Tengo algo de CSS que al pasar el mouse, un efecto de transición de CSS moverá un div.
El problema, como puede ver en el ejemplo, es que la translate
transición tiene el horrible efecto secundario de hacer que la imagen en el div se mueva 1px hacia abajo / derecha (¿y posiblemente cambiar el tamaño muy ligeramente?) Para que parezca fuera de lugar y fuera de foco...
La falla parece aplicarse todo el tiempo que se aplica el efecto de desplazamiento, y a partir de un proceso de prueba y error, puedo decir con seguridad que solo parece ocurrir cuando la transición de traslación mueve el div (la sombra y la opacidad de la caja también se aplican pero no hacen ninguna diferencia para El error cuando se elimina).
El problema solo parece suceder cuando la página tiene barras de desplazamiento. Entonces, el ejemplo con solo una instancia del div está bien, pero una vez que se agregan divs idénticos y la página requiere una barra de desplazamiento, el problema vuelve a ocurrir ...
Respuestas:
Actualización 2020
image-rendering
propiedad CSS.<img>
etiqueta usando la propiedad CSS de ajuste de objeto .Respuesta original
Prueba esto en tu CSS :
Lo que esto hace es que la división se comporte "más 2D".
backface-visibility
ytransform
sin el-webkit-
prefijo. Actualmente no sé cómo esto afecta la representación de otros navegadores (FF, IE), así que use las versiones no prefijadas con precaución.fuente
-webkit-transform
, realmente no puedo ver un cambio, y cuando abro la consola de desarrollador de chromes. Veo que esas 2 propiedades css se trazan, como si se sobrescribieran, pero no lo están (css y html vacíos). Es como si Chrome ya no los acepta.Debe aplicar la transformación 3D al elemento, para que obtenga su propia capa compuesta. Por ejemplo:
o
Puede leer más sobre los criterios de creación de capas aquí: Renderizado acelerado en Chrome
Una explicación:
Ejemplos (pasar el cuadro verde):
Cuando usa cualquier transición en su elemento, hace que el navegador recalcule los estilos, luego rediseñe su contenido incluso si la propiedad de transición es visual (en mis ejemplos es una opacidad) y finalmente pinta un elemento:
El problema aquí es el rediseño del contenido que puede tener un efecto de elementos "danzantes" o "parpadeantes" en la página mientras ocurre la transición. Si va a la configuración, marque la casilla de verificación "Mostrar capas compuestas" y luego aplique la transformación 3D a un elemento, verá que obtiene su propia capa que se delinea con un borde naranja.
Después de que el elemento obtiene su propia capa, el navegador solo necesita componer capas en la transición sin rediseño o incluso operaciones de pintura, por lo que el problema debe resolverse:
fuente
translateZ: 0.000001
(algunos # infinitosimales) ¡y listo! ¡Imágenes de fondo nítidas una vez más!Tuve el mismo problema con el iframe embebido de youtube (se usaron traducciones para centrar el elemento iframe). Ninguna de las soluciones anteriores funcionó hasta que intentó restablecer los filtros CSS y sucedió la magia.
Estructura:
Estilo [antes]
Estilo [después]
fuente
filter: blur(0)
lo hizo por mi!-webkit-
venir el prefijo antes? Más informaciónRecomiendo un nuevo atributo experimental CSS que probé en el último navegador y es bueno:
Con esto, el navegador conocerá el algoritmo para renderizar
fuente
image-rendering: -webkit-optimize-contrast;
resuelve el problema en Chrome. Sin embargo, las imágenes en otros navegadores, por ejemplo, Firefox, se renderizan mucho, mucho peor con el conjunto de opciones de representación. Por lo tanto, solo uso la directiva WebKit, que también funciona en el motor Blink. ¡Gracias!Acabo de encontrar otra razón por la cual un elemento se vuelve borroso cuando se transforma. Estaba usando
transform: translate3d(-5.5px, -18px, 0);
para reubicar un elemento una vez que se había cargado, sin embargo, ese elemento se volvió borroso.Intenté todas las sugerencias anteriores, pero resultó que se debía a que usaba un valor decimal para uno de los valores de traducción. Los números enteros no causan el desenfoque, y cuanto más me alejaba del número entero, peor era el desenfoque.
es decir,
5.5px
difumina el elemento más,5.1px
lo menos.Solo pensé en tirar esto aquí en caso de que ayude a alguien.
fuente
He engañado el problema usando la transición por pasos, no sin problemas
No es una solución, es una trampa y no se puede aplicar en todas partes.
No puedo explicarlo, pero funciona para mí. Ninguna de las otras respuestas me ayuda (OSX, Chrome 63, pantalla sin retina).
https://jsfiddle.net/tuzae6a9/6/
fuente
Escalar al doble y reducir a la mitad
zoom
funcionó para mí.fuente
He probado alrededor de 10 posibles soluciones. Los mezcló y todavía no funcionaban correctamente. Siempre había 1px batido al final.
Encuentro solución reduciendo el tiempo de transición en el filtro.
Esto no funcionó:
Solución:
Prueba esto en violín:
Espero que esto ayude a alguien.
fuente
Tratar
filter: blur(0);
Funciono para mi
fuente
Para mí, ahora en 2018. Lo único que solucionó mi problema (una línea blanca intermitente parpadeante que atraviesa una imagen al pasar el mouse) fue aplicar esto a mi elemento de enlace que contiene el elemento de imagen que tiene
transform: scale(1.05)
fuente
Fui ayudado estableciendo el valor de la duración de la transición
.3s
igual a los pasos de sincronización.3s
fuente
Acabo de tener el mismo problema. Intente establecer la posición: relativa al elemento padre, eso funcionó para mí.
fuente