202 votes

transformation css, bords irréguliers dans chrome

J'ai utilisé CSS3 transform pour faire pivoter des images et des zones de texte avec des bordures dans mon site web.

Le problème est que les bordures sont irrégulières dans Chrome, comme dans un jeu (basse résolution) sans anti-crénelage. Dans IE, Opera et FF, l'aspect est bien meilleur parce que l'anti-crénelage est utilisé (ce qui est encore clairement visible mais pas si mal). Je ne peux pas tester Safari car je n'ai pas de Mac.

La photo pivotée et le texte lui-même sont corrects, c'est seulement la bordure qui est irrégulière.

La méthode CSS que j'utilise est la suivante :

.rotate2deg {
    transform: rotate(2deg);
    -ms-transform: rotate(2deg); /* IE 9 */
    -webkit-transform: rotate(2deg); /* Safari and Chrome */
    -o-transform: rotate(2deg); /* Opera */
    -moz-transform: rotate(2deg); /* Firefox */
}

Existe-t-il un moyen de résoudre ce problème, par exemple en forçant Chrome à utiliser AA ?

Exemple ci-dessous :

Jagged Edges example

0 votes

Pour ceux qui le lisent plus tard : ce problème devrait être résolu dans Chrome à partir de la version 15 (novembre 2011), mais Safari a introduit exactement le même problème dans la version 5.1 pour Mac, qui n'est pas encore résolu à l'heure actuelle.

0 votes

Et ils l'ont si bien réparé qu'il est impossible de revenir en arrière. Nous avons des cas où l'anticrénelage est la dernière chose que nous voulons, mais maintenant Chrome/Chromium/Safari n'a pas de méthode pour désactiver l'anticrénelage dans les images transformées bien qu'il s'agisse d'images 1-bit (ex. gif n/b). Le flou est si cool, si cool, plus de flou est plus cool, dit-on ! La seule façon de garantir des bords nets est de convertir toutes les images en chemins ou objets svg et d'ajouter l'attribut shape-rendering="crispEdges".

0 votes

Pour moi, le problème concerne les bordures transparentes utilisées pour créer une flèche. C'est dans Chrome 40 sur win et mac. Aucune des options proposées ne résout le problème.

403voto

Neven Points 1656

Au cas où quelqu'un le chercherait plus tard, une bonne astuce pour se débarrasser de ces bords irréguliers sur les transformations CSS dans Chrome est d'ajouter la propriété CSS -webkit-backface-visibility avec une valeur de hidden . Dans mes propres tests, cela les a complètement lissés.

-webkit-backface-visibility: hidden;

7 votes

Cette astuce nous a permis de réactiver -webkit-transform sur un certain nombre de sites pour lesquels nous devions auparavant désactiver les transformations en raison de problèmes d'anticrénelage. Nous vous remercions.

0 votes

Toute aide à ce sujet : stackoverflow.com/questions/9235342/ ?

0 votes

Quelqu'un sait-il ce que cela donne par rapport à -webkit-transform-style : preserve-3d ? Ils semblent avoir des résultats identiques...

130voto

mhhorizon Points 1271

Si vous utilisez transition au lieu de transform , -webkit-backface-visibility: hidden; ne fonctionne pas. Un bord dentelé apparaît lors de l'animation d'un fichier png transparent.

Pour résoudre ce problème, j'ai utilisé : outline: 1px solid transparent;

27voto

Callam Points 892

L'ajout d'une bordure transparente de 1px déclenche l'anticrénelage.

outline: 1px solid transparent;

Il est également possible d'ajouter une ombre transparente de 1px.

box-shadow: 0 0 1px rgba(255,255,255,0);

18voto

Zypherone Points 51

Essayez la transformation 3D. Cela fonctionne à merveille !

/* Due to a bug in the anti-liasing*/
-webkit-transform-style: preserve-3d; 
-webkit-transform: rotateZ(2deg);

1 votes

J'essaye maintenant avec chrome (août 2013 sur un Mac), la solution acceptée ne fonctionne pas, mais en utilisant ceci (spécifiquement preserve-3d ; rotate peut toujours être utilisé sans passer à rotateZ ).

0 votes

C'est très simple, mais cela a fonctionné pour moi. Essayez même un degré plus petit, comme 0,05, pour éviter un désalignement visible.

0 votes

Preserve-3d m'a sauvé la vie.

10voto

doğukan Points 13809

J'ai essayé toutes les solutions proposées ici et elles n'ont pas fonctionné dans mon cas. Mais en utilisant

will-change: transform;

corrige le problème de la dentelure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X