gambar bergerak saat melayang - masalah opasitas chrome

92

Sepertinya ada masalah dengan halaman saya di sini: http://www.lonewulf.eu

Saat mengarahkan kursor ke gambar kecil, gambar bergerak sedikit ke kanan, dan itu hanya terjadi di Chrome.

Css saya:

.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;
}
zefs
sumber
Tidak bergerak untuk saya22.0.1229.94 m
Danny
3
Praktik terbaiknya adalah meletakkan kursor di tag A, bukan gambar itu sendiri.
Diodeus - James MacFarlane
Ya .img adalah kelas href. Haruskah saya memberinya nama yang berbeda? mungkin sekarang bentrok dengan <img src>? EDIT: Nvm, saya mengubah nama dari .img menjadi .thumb dan masih mengalami masalah ini. Ada saran lain?
zefs
Itu mungkin sesuatu yang sedang dilakukan Fancybox.
Diodeus - James MacFarlane
4
menggunakan terjemahan pada sumbu Z adalah satu-satunya solusi yang berhasil untuk saya: stackoverflow.com/questions/12502234/…
Larry

Jawaban:

231

Solusi lain adalah menggunakan

-webkit-backface-visibility: hidden;

pada elemen hover yang memiliki opacity. Visibilitas ke belakang berkaitan dengan transform, jadi @Beskow ada hubungannya dengan itu. Karena ini adalah masalah khusus webkit, Anda hanya perlu menentukan visibilitas ke belakang untuk webkit. Ada lainnya prefiks vendor .

Lihat http://css-tricks.com/almanac/properties/b/backface-visibility/ untuk info lebih lanjut.

alpipego
sumber
Ini adalah jawaban yang benar, tetapi Anda harus mengatakan bahwa backface-visibilityproperti harus disetel pada imgelemen. Dalam kasus saya, elemen yang memiliki keburaman adalah aelemen yang membungkusnya img, jadi jawaban Anda tidak sempurna untuk saya. Btw, saya juga menemukan kesalahan ini di Firefox untuk Mac, jadi saya sarankan menggunakan setiap awalan vendor.
Oliboy50
1
@ Oliboy50 Maaf, saya harus membantahnya. Im kasus saya, unsur-unsur yang rusak itu hanya kosong divs dengan background-image. @alpipego Terima kasih atas solusinya!
bonflash
1
Ini berhasil untuk saya tetapi membuat gambar saya terlihat buruk, berpiksel, bukan halus.
Kieran Hunter
1
Saya tidak tahu mengapa itu berhasil, tetapi saya kebetulan melakukannya dan mencobanya. Ini memperbaiki bug yang terus muncul di situs saya selama berbulan-bulan yang tidak pernah saya ketahui. Terima kasih!
Shnibble
Saya juga harus menambahkan a z-indexagar efek hover berfungsi dengan benar untuk saya.
Jack
34

Untuk beberapa alasan Chrome menafsirkan posisi elemen tanpa opasitas 1 dengan cara yang berbeda. Jika Anda menerapkan atribut CSS position:relativeke elemen a.img Anda, tidak akan ada lagi gerakan kiri / kanan karena opasitasnya bervariasi.

Rick Giner
sumber
1
Apakah ada yang tahu mengapa ini terjadi? Tentunya itu bukan masalah hasLayout?
sidonalds
7
Mengalami masalah yang sama di Firefox sekarang. Relatif tidak memperbaikinya, tetapi menyetel ini pada elemen itu - transform: translate3d(0px,0px,0px);
ConorLuddy
Saya memiliki masalah yang sama di Safari dan transform: translate3d(0px,0px,0px);bekerja
zevnicsca
21

Saya memiliki masalah yang sama, saya memperbaikinya dengan css transform rotate. Seperti ini:

-webkit-transform: rotate(0);
-moz-transform: rotate(0);
transform: rotate(0);

Ini berfungsi dengan baik di browser utama.

Beskow
sumber
1
Terima kasih untuk ini. Ini memperbaikinya di Firefox! : D
Hans Wassink
Ya saya juga. Trik backface tidak berhasil untuk saya (img inside a) tapi yang ini berhasil! Terima kasih!
mikmikmik
Ini adalah satu-satunya jawaban yang berhasil untuk saya (Chrome). Terima kasih!
Kid Diamond
14

Solusi lain yang memperbaiki masalah ini bagi saya adalah menambahkan aturan:

will-change: opacity;

Dalam kasus khusus saya, ini menghindari masalah lompatan piksel serupa yang translateZ(0)diperkenalkan di Internet Explorer, meskipun memperbaiki hal-hal di Chrome.

Sebagian besar solusi lain disarankan di sini yang melibatkan transformasi (misalnya. translateZ(0), rotate(0), translate3d(0px,0px,0px), Dll) bekerja dengan menyerahkan lukisan dari elemen ke GPU, yang memungkinkan render lebih efisien.will-changememberikan petunjuk ke browser yang mungkin memiliki efek serupa (memungkinkan browser untuk melakukan transisi dengan lebih efisien), tetapi terasa kurang hacky (karena ini secara eksplisit menangani masalah daripada hanya mendorong browser untuk menggunakan GPU).

Karena itu, perlu diingat bahwa dukungan browser tidak sebaik will-change(meskipun jika masalahnya hanya pada Chrome maka ini mungkin hal yang baik!), Dan dalam beberapa situasi hal itu dapat menimbulkan masalah sendiri , tetapi tetap saja , ini adalah solusi lain yang mungkin untuk masalah ini.

Nick F.
sumber
10

Saya perlu menerapkan keduanya backface-visibilitydan transformaturan untuk mencegah kesalahan ini. Seperti ini:

a     {-webkit-transform: rotate(0);}
a img {-webkit-backface-visibility: hidden;}
Jamland
sumber
10

Saya memiliki masalah serupa dengan filter (non-opacity) pada hover. Diperbaiki dengan menambahkan aturan ke kelas dasar dengan:

filter: brightness(1.01);
Juan Casares
sumber
Masalah yang sama dengan transisi filter saat mengarahkan kursor. Ini memperbaikinya untuk saya juga.
Josh Harrison
Menggunakan filter: kecerahan (1); pada elemen img memperbaikinya untuk saya, terima kasih
Sai
ini berfungsi untuk saya, memiliki masalah 1px saat menerapkan filter skala abu-abu pada gambar saat mengarahkan kursor. Mengapa pengembang browser tidak bisa memperbaiki semua hal itu akhirnya? Mengapa saya harus menggunakan backface-visibility dan semua itu ....
Varin
Ini memperbaikinya, tetapi animasi transisi berhenti bekerja
Amin
6

backface-visibility (atau -webkit-backface-visibility) hanya memperbaiki masalah di Chrome untuk saya. Untuk memperbaiki di Firefox dan Chrome saya menggunakan kombinasi jawaban di atas berikut.

//fixes image jiggle issue, please do not remove
img {
  -webkit-backface-visibility: hidden; //Webkit fix
  transform: translate3d(0px,0px,0px); //Firefox fix
}
andersra
sumber
4

Saya mengalami masalah serupa di Safari 8.0.2, di mana gambar akan bergetar saat opasitasnya dialihkan. Tidak ada perbaikan yang diposting di sini yang berfungsi, namun hal berikut berhasil:

-webkit-transform: translateZ(0);

Semua kredit untuk jawaban ini melalui jawaban berikut ini

James Fletcher
sumber
Mencoba semua jawaban lainnya, ini adalah yang pertama yang berhasil!
2

Saya mengalami masalah ini dengan gambar dalam kisi setiap gambar bersarang di layar yang memiliki: blok sebaris dinyatakan. Solusi yang diposting Jamland di atas berfungsi untuk memperbaiki masalah saat tampilan: inline-block; dideklarasikan pada elemen induk.

Saya memiliki kisi lain di mana gambar berada dalam daftar yang tidak berurutan dan saya hanya dapat menyatakan display: block; dan lebar pada item daftar induk dan menyatakan backface-visibility: hidden; pada elemen gambar dan sepertinya tidak ada pergeseran posisi saat mengarahkan kursor.

li { width: 33.33333333%; display: block; }
li img { backface-visibility: hidden; }
pengguna2125009
sumber
2

Solusi alpipego melayani saya dalam masalah ini. Gunakan -webkit-backface-visibility: hidden; Dengan ini gambar tidak bergerak dalam transisi opacity hover

/* fix error hover image opacity*/
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;
Lenin Zapata
sumber
2

Saya mengalami masalah dengan semua solusi lain di sini, karena mereka memerlukan perubahan pada CSS yang dapat merusak hal-hal lain - position: relative mengharuskan saya untuk sepenuhnya memikirkan kembali bagaimana saya memposisikan elemen saya, transform: rotate (0) dapat mengganggu yang ada mengubah dan memberikan efek transisi kecil yang miring ketika saya memiliki set durasi transisi, dan visibilitas belakang tidak akan berfungsi jika saya benar-benar membutuhkan tampilan belakang (dan memerlukan banyak awalan.)

Solusi paling malas yang saya temukan adalah menyetel opacity pada elemen saya yang sangat dekat dengan, tetapi tidak cukup, 1. Ini hanya masalah jika opacity 1, jadi tidak akan merusak atau mengganggu gaya saya yang lain:

opacity:0.99999999;
Josh dari Qaribou
sumber
1

Setelah menandai jawaban Rick Giner sebagai benar, saya kemudian menemukan bahwa itu tidak memperbaiki masalah.

Dalam kasus saya, saya memiliki gambar lebar responsif yang terkandung dalam div lebar maksimal. Setelah lebar situs melewati lebar maksimal itu, gambar bergerak saat melayang (menggunakan transformasi css).

Perbaikan dalam kasus saya adalah dengan hanya mengubah lebar maksimal menjadi kelipatan tiga, tiga kolom dalam kasus ini, dan itu memperbaikinya dengan sempurna.

sidonaldson.dll
sumber
1
Terima kasih atas komentarnya, saya juga memperhatikan posisi relatif tidak selalu berfungsi sebagai solusi jadi jika masalah ini muncul lagi, saya akan mencoba metode Anda juga.
zefs
0

Saya perhatikan Anda memiliki opacity yang disertakan dalam CSS Anda. Saya memiliki masalah yang persis sama dengan Chrome (gambar bergerak saat melayang) .. yang saya lakukan hanyalah menonaktifkan opacity dan itu diselesaikan, tidak ada lagi gambar yang bergerak.

.yourclass:hover {
  /* opacity: 0.6; */
}
cssninja
sumber
0

Memiliki masalah yang sama, Perbaikan saya adalah meletakkan kelas sebelum src di tab img.

Beached As
sumber