Изображение перемещается по hover - проблема непрозрачности хрома
Кажется, что проблема с моей страницей здесь:
http://www.lonewulf.eu
При наведении курсора на миниатюры изображение немного перемещается вправо, и это происходит только в Chrome.
Мой css:
.img{
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter:alpha(opacity=50);
-moz-opacity: 0.5;
opacity: 0.5;
-khtml-opacity: 0.5;
display:block;
border:1px solid #121212;
}
.img:hover{
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
filter:alpha(opacity=100);
-moz-opacity: 1;
opacity: 1;
-khtml-opacity: 1;
display:block;
}
Ответы
Ответ 1
Другим решением было бы использовать
-webkit-backface-visibility: hidden;
в элементе наведения, который имеет непрозрачность.
Охват обратной стороны относится к transform
, поэтому @Beskow имеет к этому какое-то отношение. Поскольку это специфическая проблема webkit, вам нужно указать только обратную видимость для webkit. Существуют другие префиксы поставщика.
Подробнее см. http://css-tricks.com/almanac/properties/b/backface-visibility/.
Ответ 2
По какой-то причине Chrome интерпретирует положение элементов без непрозрачности 1 по-другому. Если вы примените атрибут CSS position:relative
к вашим элементам a.img, будет больше не двигаться влево/вправо, поскольку их непрозрачность меняется.
Ответ 3
У меня была та же проблема, я исправил ее с помощью css transform rotate.
Вот так:
-webkit-transform: rotate(0);
-moz-transform: rotate(0);
transform: rotate(0);
Он отлично работает в основных браузерах.
Ответ 4
Мне нужно было применять правила backface-visibility
и transform
, чтобы предотвратить этот сбой.
Вот так:
a {-webkit-transform: rotate(0);}
a img {-webkit-backface-visibility: hidden;}
Ответ 5
Еще одно решение, которое исправило эту проблему, заключалось в том, чтобы добавить правило:
will-change: opacity;
В моем конкретном случае это предотвратило аналогичную проблему с пиксельным прыжком, которая translateZ(0)
была введена в Internet Explorer, несмотря на исправление в Chrome.
Большинство других решений, предложенных здесь, которые включают в себя преобразования (например, translateZ(0)
, rotate(0)
, translate3d(0px,0px,0px)
и т.д.), работают, передавая окраску элемента на GPU, обеспечивая более эффективный рендеринг. will-change
дает подсказку браузеру, который предположительно имеет аналогичный эффект (позволяя браузеру более эффективно отображать переход), но чувствует себя менее взломанным (поскольку он явно решает проблему, а не просто подталкивает браузер к использованию графического процессора).
Сказав это, стоит иметь в виду, что поддержка браузера не так хороша для will-change
(хотя, если проблема связана с Chrome только тогда это может быть хорошо!), и в некоторых ситуациях он может ввести свои проблемы, но все же это еще одно возможное решение для этот вопрос.
Ответ 6
У меня была аналогичная проблема с фильтрами (непрозрачность) при наведении. Исправлено добавлением правила в базовый класс с помощью:
filter: brightness(1.01);
Ответ 7
обратная видимость (или -webkit-backface-visibility) только фиксировала проблему в Chrome для меня. Для исправления как в Firefox, так и в Chrome я использовал следующую комбинацию ответов.
//fixes image jiggle issue, please do not remove
img {
-webkit-backface-visibility: hidden; //Webkit fix
transform: translate3d(0px,0px,0px); //Firefox fix
}
Ответ 8
Я столкнулся с аналогичной проблемой в Safari 8.0.2, где изображения дрожат, когда их непрозрачность переходит. Ни одно исправление, опубликованное здесь, не работает, однако следующее:
-webkit-transform: translateZ(0);
Отметьте этот ответ через этот последующий ответ
Ответ 9
Я столкнулся с этой проблемой с изображениями в сетке, каждое изображение было вложено в тот, который отображался: объявлен встроенный блок. Решение, которое Jamland опубликовал выше, помогло устранить проблему, когда дисплей: inline-block; было объявлено на родительский элемент.
У меня была другая сетка, где изображения были в неупорядоченном списке, и я смог только что объявить отображение: block; и ширину в элементе родительского списка и объявленную обратную видимость: hidden; на элементе изображения и, по-видимому, нет никакого сдвига позиции при наведении.
li { width: 33.33333333%; display: block; }
li img { backface-visibility: hidden; }
Ответ 10
У меня были проблемы со всеми другими решениями здесь, так как они требуют изменений в CSS, которые могут нарушать другие вещи - position: relative требует от меня полностью переосмыслить, как я позиционирую свои элементы, transform: rotate (0) can мешать существующим преобразованиям и дает малоприятные эффекты перехода, когда у меня установлен набор длительности перехода, а видимость обратной поверхности не будет работать, если мне когда-либо понадобится обратная сторона (и для этого требуется много префикса).
Самое лживое решение, которое я нашел, - это просто установить непрозрачность для моего элемента, который очень близок, но не совсем. 1. Это только проблема, если непрозрачность 1, поэтому она не будет нарушать или вмешиваться в любой из моих другие стили:
opacity:0.99999999;
Ответ 11
Отметив ответ Рика Гинера как правильный, я узнал, что это не решило проблему.
В моем случае у меня есть обратные изображения ширины, содержащиеся в div max-width. Как только ширина сайта пересекает эту максимальную ширину, изображения перемещаются при наведении (с использованием преобразования css).
Исправление в моем случае состояло в том, чтобы просто изменить максимальную ширину на кратное три, три столбца в этом случае, и он исправил ее отлично.
Ответ 12
В этой проблеме мне было предложено решение alpipego.
Используйте -webkit-backface-visibility: hidden;
При этом изображение не перемещается в режиме непрозрачности перехода
/* fix error hover image opacity*/
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
Ответ 13
Я заметил, что у вас есть прозрачность, включенная в ваш CSS. У меня была такая же проблема с Chrome (изображение перемещалось при наведении). Все, что я делал, это отключить непрозрачность, и она была решена, больше изображений не двигалось.
.yourclass:hover {
/* opacity: 0.6; */
}