görüntü üzerine gelindiğinde hareket ediyor - krom opaklık sorunu


92

Buradaki sayfamla ilgili bir sorun var gibi görünüyor: http://www.lonewulf.eu

Küçük resimlerin üzerine gelindiğinde, resim biraz sağa doğru hareket eder ve bu yalnızca Chrome'da gerçekleşir.

CSS'im:

.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;
}

Benim için hareket etmiyor22.0.1229.94 m
Danny

3
İmleci resmin kendisine değil, A etiketine koymak en iyi uygulamadır.
Diodeus - James MacFarlane

Evet .img bir href sınıfıdır. Ona farklı bir isim vermeli miyim? belki şimdi <img src> ile çelişiyor? DÜZENLEME: Nvm, adı .img'den .thumb'a değiştirdim ve hala bu sorunu yaşıyorum. Başka bir öneriniz var mı?
zefs

Muhtemelen Fancybox'ın yaptığı bir şeydir.
Diodeus - James MacFarlane

4
Z ekseninde bir çeviri kullanmak benim için işe yarayan tek çözümdü: stackoverflow.com/questions/12502234/…
Larry

Yanıtlar:


231

Başka bir çözüm kullanmaktır

-webkit-backface-visibility: hidden;

opaklığa sahip fareyle üzerine gelme öğesinde. Arka yüz görünürlüğü ile ilgilidir transform, bu nedenle @Beskow'un bununla bir ilgisi vardır. Webkit'e özgü bir sorun olduğundan, yalnızca webkit için arka yüz görünürlüğünü belirlemeniz gerekir. Başka satıcı önekleri var .

Daha fazla bilgi için http://css-tricks.com/almanac/properties/b/backface-visibility/ adresine bakın .


Doğru cevap bu, ancak backface-visibilityözelliğin imgöğede ayarlanması gerektiğini söylemelisiniz . Benim durumumda, opaklığa sahip olan unsur, onu asaran unsurdu img, bu yüzden cevabınız benim için mükemmel değildi. Btw, bu aksaklığı Mac için Firefox'ta da buldum, bu yüzden her satıcı önekini kullanmanızı öneririm.
Oliboy50

1
@ Oliboy50 Üzgünüm, bunu tartışmalıyım. Davamı Im, hatalı unsurlar sadece boş divler ile background-image. @alpipego Çözüm için teşekkürler!
bonflash

1
Bu benim için işe yaradı, ancak görüntülerimin düzgün değil pikselli, kötü görünmesine neden oldu.
Kieran Hunter

1
Neden işe yaradığını bilmiyorum ama bunun üzerine geldim ve bir şans verdim. Bu, sitemde aylarca ortaya çıkan ve artık asla anlayamadığım bir hatayı düzeltti. Teşekkür ederim!
Shnibble

Ayrıca z-index, gezinme efektinin benim için doğru şekilde çalışması için bir de eklemem gerekiyordu.
Dev

34

Bazı nedenlerden dolayı Chrome, 1 opaklığı olmayan öğelerin konumunu farklı bir şekilde yorumlar. CSS özniteliğini position:relativea.img öğelerinize uygularsanız, opaklıkları değiştikçe artık sola / sağa hareket olmayacaktır.


1
Bunun neden olduğunu bilen var mı? Kesinlikle hasLayout bir şey değil mi?
sidonaldson

7
Aynı sorunu şimdi Firefox'ta yaşadım. Göreli bunu düzeltmedi, ancak bunu öğeye ayarlamak - transform: translate3d(0px,0px,0px);
ConorLuddy

Safari'de de aynı sorunu transform: translate3d(0px,0px,0px);
yaşadım

21

Aynı sorunu yaşadım, css dönüşümü döndürme ile düzelttim. Bunun gibi:

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

Büyük tarayıcılarda iyi çalışıyor.


1
Bunun için teşekkürler. Bu, Firefox'ta düzeltildi! : D
Hans Wassink

Evet ben de. Arka yüz numarası benim için işe yaramadı (a içindeki img) ama bu işe yaradı! Teşekkürler!
mikmikmik

Benim için çalışan tek cevap bu (Chrome). Teşekkürler!
Kid Elmas

14

Bu sorunu benim için çözen bir başka çözüm de kuralı eklemekti:

will-change: opacity;

Benim özel durumumda bu translateZ(0), Chrome'daki sorunları düzeltmesine rağmen, Internet Explorer'da ortaya çıkan benzer bir piksel atlama sorununu önledi .

Diğer çözümlerin çoğu dönüşümleri (örn. İçerdiğini burada önerdi translateZ(0), rotate(0), translate3d(0px,0px,0px)daha verimli bir şekilde sunulmasını sağlayan GPU'ya üzerinde elemanın boyayarak teslim yoluyla, vs) çalışmaları.will-changetarayıcıya muhtemelen benzer bir etkiye sahip olan (tarayıcının geçişi daha verimli bir şekilde oluşturmasına izin veren), ancak daha az hilekarlık hissi veren bir ipucu sağlar (çünkü tarayıcıyı GPU kullanmak için dürtmek yerine sorunu açık bir şekilde ele alır).

Bunu söyledikten sonra, tarayıcı desteğinin o kadar iyi olmadığını akılda tutmakta fayda var will-change(sorun yalnızca Chrome ile ilgiliyse, bu iyi bir şey olabilir!) Ve bazı durumlarda kendi başına sorunları ortaya çıkarabilir , ancak yine de , bu sorun için başka bir olası çözüm.


10

Hem uygulamak gerekir idi backface-visibilityve transformbu aksaklık önlemek için yönetir. Bunun gibi:

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

10

Fareyle üzerine gelindiğinde (opaklık olmayan) filtrelerle benzer bir sorun yaşadım. Temel sınıfa bir kural eklenerek düzeltildi:

filter: brightness(1.01);

Fareyle üzerine gelindiğinde filtre geçişiyle aynı sorun. Bu benim için de düzeltti.
Josh Harrison

Filtrenin kullanılması: parlaklık (1); img öğesinde benim için düzeltti, teşekkür ederim
Sai

bu benim için çalıştı, fareyle üzerine gelindiğinde bir görüntüye gri tonlama filtresi uygularken 1px sorunu vardı. Tarayıcı geliştiricileri neden tüm bunları sonunda düzeltemiyor? Neden arka yüz görünürlüğünü falan kullanmam gerekiyor?
Varin

Bu sorunu düzeltir, ancak geçiş animasyonu çalışmayı durdurur
Amin

6

backface-visibility (veya -webkit-backface-visibility) sorunu yalnızca benim için Chrome'da düzeltti. Hem Firefox hem de Chrome'da düzeltmek için yukarıdaki cevapların aşağıdaki kombinasyonunu kullandım.

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

4

Safari 8.0.2'de benzer bir sorunla karşılaştım, burada görüntülerin opaklıkları geçtikçe titriyordu. Burada yayınlanan düzeltmelerin hiçbiri işe yaramadı, ancak aşağıdakiler işe yaradı:

-webkit-transform: translateZ(0);

Bu sonraki cevap aracılığıyla bu cevaba tüm itibar


Diğer tüm cevapları denedim, işe yarayan ilk cevap buydu!

2

Bu sorunla karşılaştım bir ızgaradaki görüntülerle, her görüntünün bir görüntüye sahip bir içine yerleştirildiği: satır içi blok bildirildi. Jamland'ın yukarıda yayınladığı çözüm, görüntü olduğunda sorunu düzeltmek için çalıştı: satır içi blok; üst öğe üzerinde beyan edildi.

Resimlerin sırasız bir listede olduğu başka bir ızgaram vardı ve sadece display: block; ve üst liste öğesinde bir genişlik ve bildirilen arka yüz görünürlüğü: gizli; resim öğesinde ve üzerine gelindiğinde herhangi bir konum kayması görünmüyor.

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

2

Çözüm alpipego bana bu problemde hizmet etti. Kullan -webkit-backface-visibility: hidden; Bununla görüntü üzerine gelindiğinde opaklık geçişinde hareket yok

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

2

Buradaki diğer tüm çözümlerle sorun yaşadım, çünkü bunlar CSS'de başka şeyleri bozabilecek değişiklikler gerektiriyor - konum: göreli, öğelerimi nasıl konumlandırdığımı tamamen yeniden düşünmemi gerektiriyor, dönüştürme: rotate (0) mevcut olana müdahale edebilir Bir geçiş süresi setine sahip olduğumda, küçük geçiş efektlerini dönüştürür ve verir ve arka yüz görünürlüğü, gerçekten bir arka yüze ihtiyacım olursa (ve çok fazla ön ek gerektirir) çalışmaz.

Bulduğum en tembel çözüm, elementimde 1'e çok yakın, ancak tam olmayan bir opaklık ayarlamaktı. Bu sadece opaklık 1 ise bir sorundur, bu yüzden diğer stillerimi kırmayacak veya engellemeyecektir:

opacity:0.99999999;

1

Rick Giner'ın cevabını doğru olarak işaretledikten sonra sorunun çözülmediğini anladım.

Benim durumumda, bir max-width div içinde bulunan duyarlı genişlikte resimlerim var. Site genişliği bu maksimum genişliği geçtiğinde, görüntüler fareyle üzerine gelindiğinde hareket eder (css dönüşümü kullanılarak).

Benim durumumdaki düzeltme, bu durumda maksimum genişliği basitçe üç, üç sütunun katına değiştirmekti ve mükemmel bir şekilde sabitledi.


1
Yorumunuz için teşekkürler, göreli konumun her zaman çözüm olarak çalışmadığını da fark ettim, bu nedenle bu sorun tekrar ortaya çıkarsa, yönteminizi de deneyeceğim.
zefs

0

CSS'nizde opaklığın bulunduğunu fark ettim. Chrome ile aynı sorunu yaşadım (üzerine gelindiğinde hareket eden görüntü) .. Tek yaptığım opaklığı devre dışı bırakmaktı ve çözüldü, artık görüntü hareket etmiyordu.

.yourclass:hover {
  /* opacity: 0.6; */
}

0

Aynı sorunu yaşadım, benim düzeltmem sınıfı img sekmesinde src'den önce yerleştirmekti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.