У меня есть немного CSS, который при наведении, эффект перехода CSS будет перемещать div.
Проблема, как вы можете видеть в этом примере, заключается в том, что translate
переход имеет ужасный побочный эффект: изображение в div перемещается на 1 пиксель вниз / вправо (и, возможно, немного изменить размер?), Так что оно выглядит неуместным и не в фокусе...
Похоже, что сбой возникает все время, когда применяется эффект наведения, и из процесса проб и ошибок я могу с уверенностью сказать, что он возникает только тогда, когда переход с переводом перемещает div (тень от блока и непрозрачность также применяются, но не имеют значения для ошибка при удалении).
Проблема возникает только тогда, когда на странице есть полосы прокрутки. Таким образом, пример только с одним экземпляром div подходит, но как только добавляются идентичные div, и поэтому странице требуется полоса прокрутки, проблема снова возникает ...
Ответы:
Обновление 2020
image-rendering
свойство CSS.<img>
тегом, используя CSS -объектное свойство.Оригинальный ответ
Попробуйте это в своем CSS :
То, что это делает, заставляет подразделение вести себя «более 2D».
backface-visibility
иtransform
без-webkit-
префикса. В настоящее время я не знаю, как это влияет на рендеринг других браузеров (FF, IE), поэтому используйте версии без префиксов с осторожностью.источник
-webkit-transform
, я не вижу изменений, и когда открываю консоль разработчика chromes. Я вижу, что эти 2 свойства CSS обведены, как будто они перезаписаны, но это не так (пустые CSS и HTML). Как будто хром больше не принимает их.Вам нужно применить 3d-преобразование к элементу, чтобы он получил собственный составной слой. Например:
или
Подробнее о критериях создания слоя вы можете прочитать прямо здесь: Ускоренный рендеринг в Chrome
Объяснение:
Примеры (наведите зеленую рамку):
Когда вы используете какой-либо переход для вашего элемента, это заставляет браузер пересчитывать стили, а затем переупорядочивать содержимое, даже если свойство перехода является визуальным (в моих примерах это непрозрачность), и, наконец, рисовать элемент:
Проблема здесь заключается в изменении макета содержимого, которое может создавать эффект «танцующих» или «мигающих» элементов на странице во время перехода. Если вы перейдете к настройкам, установите флажок «Показать составные слои», а затем примените трехмерное преобразование к элементу, вы увидите, что он получает собственный слой, который обведен оранжевой рамкой.
После того, как элемент получит свой собственный слой, браузер просто должен составлять слои при переходе без изменения структуры или даже операций рисования, поэтому проблема должна быть решена:
источник
translateZ: 0.000001
(некоторые бесконечно малые #) и вуаля! Резкие фоновые изображения еще раз!Была такая же проблема с встраиваемым iframe youtube (переводы использовались для центрирования элемента iframe). Ни одно из вышеупомянутых решений не работало, пока не попытался сбросить фильтры CSS и волшебство не произошло.
Структура:
Стиль [до]
Стиль [после]
источник
filter: blur(0)
сделал это для меня!-webkit-
префикс не должен стоять раньше? Дополнительная информацияЯ рекомендовал новый экспериментальный атрибут CSS, который я тестировал в последнем браузере, и это хорошо:
При этом браузер узнает алгоритм рендеринга
источник
image-rendering: -webkit-optimize-contrast;
решает проблему с Chrome. Тем не менее, изображения в других браузерах, например Firefox, отображаются гораздо хуже, с установленным параметром рендеринга. Поэтому я использую только директиву WebKit, которая также работает на движке Blink. Спасибо!Просто нашел другую причину, почему элемент становится размытым при преобразовании. Я использовал,
transform: translate3d(-5.5px, -18px, 0);
чтобы изменить положение элемента после его загрузки, однако этот элемент стал размытым.Я перепробовал все предложения выше, но оказалось, что это из-за того, что я использовал десятичное значение для одного из значений перевода. Целые числа не вызывают размытия, и чем дальше я удалялся от целого числа, тем хуже становилось размытие.
т.е.
5.5px
размывает элемент больше всего,5.1px
меньше всего.Просто подумал, что я это оставлю здесь на случай, если это кому-нибудь поможет.
источник
Я обманул проблему, используя переход по шагам, а не плавно
Это не решение, это обман и не может применяться везде.
Я не могу это объяснить, но это работает для меня. Ни один из других ответов не помогает мне (OSX, Chrome 63, дисплей без Retina).
https://jsfiddle.net/tuzae6a9/6/
источник
Масштабирование в два раза и снижение до половины
zoom
сработало для меня.источник
Я пробовал около 10 возможных решений. Смешал их, и они все еще не работали правильно. В конце всегда был 1px встряхнуть.
Я нахожу решение путем уменьшения времени перехода на фильтр.
Это не сработало:
Решение:
Попробуйте это в скрипке:
Я надеюсь, что это поможет кому-то.
источник
Пытаться
filter: blur(0);
У меня сработало
источник
Для меня теперь 2018 год. Единственная вещь, которая исправила мою проблему (белая линия с мерцающим мерцанием, проходящая через изображение при наведении курсора), это применила это к моему элементу ссылки, содержащему элемент изображения, который имеет
transform: scale(1.05)
источник
Мне помогло, установив значение длительности
.3s
перехода равным шагам времени перехода.3s
источник
Просто получил ту же проблему. Попробуйте установить положение: относительно родительского элемента, который работал для меня.
источник