l'immagine si sposta al passaggio del mouse - problema di opacità del cromo


92

Sembra che ci sia un problema con la mia pagina qui: http://www.lonewulf.eu

Quando si passa con il mouse sulle miniature, l'immagine si sposta leggermente a destra e accade solo su Chrome.

Il mio 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;
}

Non si muove per me22.0.1229.94 m
Danny

3
È consigliabile posizionare il passaggio del mouse sul tag A, non sull'immagine stessa.
Diodeus - James MacFarlane

Sì .img è una classe href. Devo dargli un nome diverso? forse ora è in conflitto con <img src>? EDIT: Nvm, ho cambiato il nome da .img a .thumb e ho ancora questo problema. Qualche altro suggerimento?
zefs

Probabilmente è qualcosa che sta facendo Fancybox.
Diodeus - James MacFarlane

4
l'utilizzo di una traduzione sull'asse Z era l'unica soluzione che ha funzionato per me: stackoverflow.com/questions/12502234/…
Larry

Risposte:


231

Un'altra soluzione potrebbe essere quella di utilizzare

-webkit-backface-visibility: hidden;

sull'elemento al passaggio del mouse che ha l'opacità. La visibilità della faccia posteriore si riferisce a transform, quindi quella di @Beskow ha qualcosa a che fare con essa. Poiché si tratta di un problema specifico del webkit, devi solo specificare la visibilità del backface per il webkit. Ci sono altri prefissi di fornitori .

Vedi http://css-tricks.com/almanac/properties/b/backface-visibility/ per maggiori informazioni.


Questa è la risposta corretta, ma devi dire che la backface-visibilityproprietà deve essere impostata imgsull'elemento. Nel mio caso, l'elemento che ha l'opacità era l' aelemento che avvolgeva img, quindi la tua risposta non era perfetta per me. A proposito, ho trovato questo problema anche su Firefox per Mac, quindi suggerisco di utilizzare tutti i prefissi dei fornitori.
Oliboy50

1
@ Oliboy50 Scusa, devo ribadirlo. Nel mio caso, gli elementi difettosi erano solo vuoti divcon background-image. @alpipego Grazie per la soluzione!
bonflash

1
Questo ha funzionato per me, ma ha reso le mie immagini pessime, pixellate invece che lisce.
Kieran Hunter

1
Non so perché funzioni, ma mi sono imbattuto in questo e ci ho provato. Questo ha risolto un bug che continuava a comparire sul mio sito per mesi ora che non sono mai riuscito a capire. Grazie!
Shnibble

Ho anche dovuto aggiungere un z-indexper far funzionare correttamente l'effetto hover.
Jack

34

Per qualche motivo Chrome interpreta la posizione degli elementi senza un'opacità di 1 in un modo diverso. Se applichi l'attributo CSS position:relativeai tuoi elementi a.img non ci sarà più movimento sinistra / destra al variare della loro opacità.


1
qualcuno sà perche è cosi? Sicuramente non è una cosa hasLayout?
Sidonaldson

7
Ho avuto lo stesso problema in Firefox solo ora. Relative non lo ha risolto, ma impostandolo sull'elemento lo ha fatto - transform: translate3d(0px,0px,0px);
ConorLuddy

Ho avuto lo stesso problema su Safari e transform: translate3d(0px,0px,0px);
ho

21

Ho avuto lo stesso problema, l'ho risolto con css transform rotate. Come questo:

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

Funziona bene nei principali browser.


1
Grazie per questo. Questo lo ha risolto in Firefox! : D
Hans Wassink

Sì anche a me. Il trucco del backface non ha funzionato per me (img in a) ma questo ha funzionato! Grazie!
mikmikmik

Questa è l'unica risposta che ha funzionato per me (Chrome). Grazie!
Kid Diamond

14

Un'altra soluzione che ha risolto questo problema per me è stata l'aggiunta della regola:

will-change: opacity;

Nel mio caso particolare, questo ha evitato un problema simile al salto dei pixel translateZ(0)introdotto in Internet Explorer, nonostante le correzioni in Chrome.

La maggior parte delle altre soluzioni proposte qui che coinvolgono trasforma (ad es. translateZ(0), rotate(0), translate3d(0px,0px,0px), Ecc) opera di consegna pittura dell'elemento verso la GPU, permettendo il rendering più efficiente.will-changefornisce un suggerimento al browser che presumibilmente ha un effetto simile (consentendo al browser di eseguire il rendering della transizione in modo più efficiente), ma si sente meno hacker (poiché affronta esplicitamente il problema piuttosto che spingere il browser a utilizzare la GPU).

Detto questo, vale la pena ricordare che il supporto del browser non è altrettanto buono will-change(anche se se il problema riguarda solo Chrome, questa potrebbe essere una buona cosa!) E in alcune situazioni può introdurre problemi di per sé , ma comunque , è un'altra possibile soluzione a questo problema.


10

Ero necessario applicare sia backface-visibilitye transformregole per evitare questo inconveniente. Come questo:

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

10

Ho avuto un problema simile con i filtri (non opacità) al passaggio del mouse. Risolto aggiungendo una regola alla classe base con:

filter: brightness(1.01);

Stesso problema con una transizione del filtro al passaggio del mouse. Questo ha risolto anche me.
Josh Harrison,

Utilizzando il filtro: luminosità (1); sull'elemento img risolto per me, grazie
Sai

questo ha funzionato per me, ha avuto un problema di 1px durante l'applicazione del filtro in scala di grigi su un'immagine al passaggio del mouse. Perché gli sviluppatori del browser non riescono a risolvere tutte queste cose finalmente? Perché devo usare la visibilità della faccia posteriore e tutte quelle cose ...
Varin

Questo lo risolve, ma l'animazione di transizione smette di funzionare
Amin

6

backface-visibilità (o -webkit-backface-visibilità) ha risolto il problema solo in Chrome per me. Per risolvere sia in Firefox che in Chrome ho usato la seguente combinazione di risposte sopra.

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

4

Ho riscontrato un problema simile in Safari 8.0.2, in cui le immagini tremolavano durante la transizione della loro opacità. Nessuna delle correzioni pubblicate qui ha funzionato, tuttavia quanto segue ha funzionato:

-webkit-transform: translateZ(0);

Tutto merito di questa risposta tramite questa risposta successiva


Ho provato tutte le altre risposte, questa è stata la prima che ha funzionato!

2

Mi sono imbattuto in questo problema con le immagini in una griglia, ciascuna immagine era nidificata in una visualizzazione: inline-block dichiarato. La soluzione che Jamland ha pubblicato sopra ha funzionato per correggere il problema quando il display: inline-block; è stata dichiarata sull'elemento genitore.

Avevo un'altra griglia in cui le immagini erano in un elenco non ordinato e potevo semplicemente dichiarare la visualizzazione: blocco; e una larghezza sull'elemento dell'elenco genitore e dichiarata visibilità sul retro: nascosto; sull'elemento immagine e non sembra esserci alcun cambiamento di posizione al passaggio del mouse.

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

2

La soluzione alpipego mi è stata servita in questo problema. Usa -webkit-backface-visibility: hidden; Con questo l'immagine non si muove nella transizione dell'opacità al passaggio del mouse

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

2

Ho avuto problemi con tutte le altre soluzioni qui, poiché richiedono modifiche al CSS che potrebbero rompere altre cose - position: relative mi richiede di ripensare completamente a come sto posizionando i miei elementi, transform: rotate (0) può interferire con l'esistente si trasforma e fornisce piccoli effetti di transizione traballanti quando ho un set di durata della transizione e la visibilità del backface non funzionerà se avrò mai effettivamente bisogno di un backface (e richiede un sacco di prefissi).

La soluzione più pigra che ho trovato è semplicemente impostare un'opacità sul mio elemento che è molto vicino, ma non del tutto, 1. Questo è un problema solo se l'opacità è 1, quindi non interromperà o interferirà con nessuno dei miei altri stili:

opacity:0.99999999;

1

Dopo aver contrassegnato la risposta di Rick Giner come corretta, ho scoperto che non ha risolto il problema.

Nel mio caso ho immagini di larghezza reattiva contenute in un div di larghezza massima. Una volta che la larghezza del sito supera quella larghezza massima, le immagini si spostano al passaggio del mouse (utilizzando la trasformazione CSS).

La soluzione nel mio caso era semplicemente modificare la larghezza massima in un multiplo di tre, tre colonne in questo caso, e l'ha risolto perfettamente.


1
Grazie per il commento, ho anche notato che la posizione relativa non sempre funziona come soluzione, quindi se questo problema si ripresenta proverò anche il tuo metodo.
zefs

0

Ho notato che hai incluso l'opacità nel tuo CSS. Ho avuto lo stesso identico problema con Chrome (l'immagine che si muoveva al passaggio del mouse) .. tutto ciò che ho fatto è stato disabilitare l'opacità ed è stato risolto, niente più immagini in movimento.

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

0

Ho avuto lo stesso problema, la mia soluzione è stata mettere la classe prima di src nella scheda img.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.