Как исправить размытое изображение в масштабе преобразования

Когда я поставил transform: scale(1.1); при наведении на какой-то элемент, изображение стало размытым. Как исправить эту ошибку?

Пример

введите описание изображения здесь


person Viktor Zahov    schedule 22.04.2016    source источник
comment
Возможный дубликат -webkit-transform: масштабирование/размытие изображений   -  person Gajus    schedule 16.08.2017


Ответы (3)


Попробуйте это, это работает отлично для меня!

img {
    -webkit-backface-visibility: hidden; 
    -ms-transform: translateZ(0); /* IE 9 */
    -webkit-transform: translateZ(0); /* Chrome, Safari, Opera */
    transform: translateZ(0);
}
person dimitar    schedule 22.04.2016
comment
В то время как Chrome 77 автоматически изменяет резкость масштабированного изображения, Safari 13.0.1 этого не делает, и представленное решение также не заставляет Safari изменять резкость изображения. Изображение, которое я использовал, представляет собой вектор SVG. Я думаю, это просто Safari. - person Daniel W.; 01.10.2019
comment
Насколько я мог понять, это работает, если вы увеличиваете внешний контейнер (выше 1) и уменьшаете изображение (меньше 1). Пример: jsfiddle.net/5mf7naxh/4 - person axel freudiger; 14.02.2020

TL; DR transform: scale на самом деле масштабирует исходное изображение, и, поскольку вы оставляете его механизму рендеринга браузера, чтобы выяснить, что там должно быть, вы получаете размытое изображение. пытаться

img {
transform: scale(.9)    
}

img:hover {
transform: scale(1)
}

Аарон Сиблер ответил мне на вопрос.

Я только что испытал эту загадку. В вашем примере вам нужно будет преобразовать img ВНИЗ что-то вроде «transform: scale (0,7)», а затем масштабировать вверх до исходных размеров изображения при наведении, например «transform: scale (1,0)»

Значение масштаба относится к размерам исходного изображения, а не к их текущим размерам на экране, поэтому масштаб 1 всегда равен размерам исходного изображения.

Я использовал это здесь;

http://meetaaronsilber.com/experiments/css3imgpop/index.html

person axecopfire    schedule 08.06.2018

У меня была эта проблема с масштабированием SVG и размытыми изображениями. Я увеличил фоновое изображение до 4,5, и изображение стало очень размытым при увеличении. Я читал, что сначала можно уменьшить масштаб до transform: scale(0.7), а затем увеличить до transform: scale(1.0). В моем случае это означало огромную перестройку моей анимации. У меня была очень сложная анимация с несколькими масштабами, преобразованиями и т. д.

Я просто оставил все как есть и добавил ширину псевдомасштаба. Затем браузер, кажется, перерисовывает каждый кадр, но поскольку ширина на самом деле не меняется, вы все равно можете использовать transform: scale(x.x) для масштабирования, и вы получите очень четкое изображение.

Может быть, кто-то может подтвердить это. Вот мой код. В моем случае изображение было шириной 86 пикселей и увеличено в 4,5 раза по сравнению с исходным значением.

<div class="overall-scale">
 <div class="image-scale"></div>
</div>

@keyframes overall-scale {
0% {
    transform: scale(1);
}

100% {
    transform: scale(4.5);
}
}

@keyframes image-scale {
0% {
    width: 86px;
}

100% {
    width: 86px;
}
}

Надеюсь, это поможет, и мое объяснение имеет смысл.

Пожалуйста, прокомментируйте, если это не работает для вас.

person Mikaelik    schedule 10.11.2020
comment
Другие упомянутые методы не работали для меня. Может у кого такая же проблема. :) - person Mikaelik; 10.11.2020