изображение перемещается при наведении-проблема непрозрачности chrome
там, кажется, проблема с моей странице здесь: 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;
}
14 ответов:
другое решение было бы использовать
-webkit-backface-visibility: hidden;
на наведении элемента, который имеет непрозрачность. Противоположная сторона-видимость относится к
transform
, Так что @Beskow ' s имеет какое-то отношение к этому. Поскольку это специфическая проблема webkit, вам нужно только указать обратную видимость для webkit. Есть и другие префиксы.см.http://css-tricks.com/almanac/properties/b/backface-visibility/ для получения дополнительной информации.
по какой-то причине Chrome интерпретирует положение элементов без непрозрачности 1 по-другому. Если вы применяете атрибут CSS
position:relative
для ваших элементов a. img больше не будет движения влево/вправо, поскольку их непрозрачность меняется.
У меня была та же проблема, я исправил ее с помощью CSS transform rotate. Вот так:
-webkit-transform: rotate(0); -moz-transform: rotate(0); transform: rotate(0);
Он отлично работает в основных браузерах.
мне нужно было применять оба
backface-visibility
иtransform
правила для предотвращения этого глюка. Вот так:a {-webkit-transform: rotate(0);} a img {-webkit-backface-visibility: hidden;}
У меня была аналогичная проблема с фильтрами (непрозрачность) при наведении. Исправлено путем добавления правила в базовый класс с помощью:
filter: brightness(1.01);
еще одним решением, которое исправило эту проблему для меня, было добавить правило:
will-change: opacity;
в моем конкретном случае это позволило избежать подобной проблемы с пикселями, которая
translateZ(0)
введено в Internet Explorer, Несмотря на исправление вещей в Chrome.большинство других решений, предложенных здесь, которые включают преобразования (например.
translateZ(0)
,rotate(0)
,translate3d(0px,0px,0px)
и т. д.) работают путем передачи рисования элемента на GPU, что позволяет более эффективно визуализировать.will-change
дает подсказку к браузер, который, по-видимому, имеет аналогичный эффект (позволяя браузеру более эффективно выполнять переход), но чувствует себя менее взломанным (поскольку он явно решает проблему, а не просто подталкивает браузер к использованию GPU).сказав это, стоит иметь в виду, что поддержка браузеров не так хорошо для
will-change
(хотя если проблема только с Chrome, то это может быть хорошо!), а в некоторых ситуациях он может ввести проблемы свой собственный, но все же, это еще одно возможное решение этой проблемы.
backface-visibility (или-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 }
я столкнулся с аналогичной проблемой в Safari 8.0.2, где изображения будут дрожать при переходе их непрозрачности. Ни одно из исправлений, опубликованных здесь, не сработало, однако следующее:
-webkit-transform: translateZ(0);
все кредиты ответ через это последующий ответ
я столкнулся с этой проблемой с изображениями в сетке каждое изображение было вложено в то, что было объявлено display: inline-block. Решение, которое Jamland опубликовал выше, работало, чтобы исправить проблему, когда display: inline-block; был объявлен на родительском элементе.
У меня была другая сетка, где изображения были в неупорядоченном списке, и я смог просто объявить display: block; и ширину в родительском элементе списка и объявленную backface-visibility: hidden; на элементе изображения и там кажется,нет никакого сдвига положения при наведении.
li { width: 33.33333333%; display: block; } li img { backface-visibility: hidden; }
решение 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;
У меня были проблемы со всеми другими решениями здесь, поскольку они требуют изменений в CSS, которые могут нарушить другие вещи-position:relative требует от меня полностью переосмыслить, как я позиционирую свои элементы, transform:rotate(0) может вмешиваться в существующие преобразования и дает шаткие небольшие эффекты перехода, когда у меня есть набор длительности перехода, а backface-visibility не будет работать, если мне когда-либо действительно нужна задняя поверхность (и требует много префиксов.)
самое ленивое решение Я нашел, чтобы просто установить непрозрачность на моем элементе, который очень близок, но не совсем, 1. Это только проблема, если непрозрачность 1, так что он не собирается ломать или вмешиваться в любой из моих других стилей:
opacity:0.99999999;
отметив ответ Рика Гинера как правильный, я узнал, что это не исправило проблему.
в моем случае у меня есть отзывчивые изображения ширины, содержащиеся в div максимальной ширины. После того, как сайт ширина кресты, что максимальная ширина изображения двигаться при наведении курсора (с помощью CSS преобразований).
исправление в моем случае состояло в том, чтобы просто изменить максимальную ширину на кратную трем, трем столбцам в этом случае, и она исправила ее отлично.