La transformation CSS3 ne fonctionne pas

123

J'essaie de transformer mes éléments de menu en les faisant pivoter de 10 degrés. Mon CSS fonctionne dans Firefox mais je n'ai pas réussi à reproduire l'effet dans Chrome et Safari. Je sais que IE ne prend pas en charge cette propriété CSS3, donc ce n'est pas un problème.

J'ai utilisé le CSS suivant:

li a {
   -webkit-transform:rotate(10deg);
   -moz-transform:rotate(10deg);
   -o-transform:rotate(10deg); 
}

Quelqu'un pourrait-il s'il vous plaît suggérer où je vais mal?

Merci.

shruti
la source
2
FYI, IE prend en charge cette propriété CSS3, vous avez juste besoin d'un préfixe:-ms-transform:rotate(10deg);
Joshua Pinter
2
Puisque personne ne l'a encore mentionné, depuis 2016, assurez-vous de placer la version non préfixée de la règle CSS (par exemple transform: rotate(10deg);) sous les versions préfixées que vous choisissez de prendre en charge.
Maximillian Laumeister

Réponses:

303

Ceci est simplement une supposition éclairée sans voir le reste de votre HTML / CSS:

Avez-vous postulé display: blockou display: inline-blockà li a? Sinon, essayez-le.

Sinon, essayez d'appliquer les règles de transformation CSS3 à la liplace.

trentenaire
la source
22
Je t'aime! Le display: inline-blockaidé.
Bugs Bunny
2
Une explication serait utile :)
scitronboy
56

Dans les navigateurs Webkit (Safari et Chrome), -webkit-transform est ignoré sur les éléments en ligne. . Préparez-vous display: inline-block;à le faire fonctionner . À des fins de démonstration / test, vous pouvez également utiliser un angle négatif ou pour transformation-originéviter que le texte ne soit tourné hors de la zone visible.

Phihag
la source
A parfaitement fonctionné pour moi, merci! Je l'ai utilisé sur <span> & copier </span> pour créer un symbole de copyleft.
Elisabeth
@Elisabeth C'est une excellente application. Notez que les références d'entité doivent être terminées par un point-virgule (comme dans <span>&copy;</span>), bien que la plupart des navigateurs affichent dans les deux sens.
phihag
Une autre note: si vous appliquez la transformation pour un état d'interaction (par exemple, :hoverou :active) , vous devez appliquer le inline-blockà l'élément dans son état par défaut, par exemple a { display: inline-block; } a:active { transform: translateY(0.125em); }. L'application inline-blockà l'état d'interaction seule ne semble pas fonctionner. Dans Chrome au moins - cela fonctionne très bien dans Firefox.
Paul d'Aoust
1
merci d'avoir souligné le fait que -webkit-transformcela ne fonctionne pas sur les éléments en ligne. Avait été bloqué sur cela auparavant.
pbojinov
@phihag Excellent point, vous m'avez épargné un grand coup de cheveux! Il convient de noter que cela peut entraîner la disparition de vos éléments après l'exécution de l'animation.
texelate
21

Puisque personne n'a fait référence à la documentation pertinente:

Module CSS Transforms Niveau 1 - Terminologie - Élément transformable

Un élément transformable est un élément dans l'une de ces catégories:

  • un élément dont la mise en page est régie par le modèle de boîte CSS qui est un élément de niveau bloc ou atomique en ligne , ou dont la propriété d'affichage est calculée en ligne de table, groupe de lignes de table, groupe d'en-tête de table, pied de page -group, table-cell ou table-caption
  • un élément dans l'espace de noms SVG et non régi par le modèle de boîte CSS qui a les attributs transform, 'patternTransform' ou gradientTransform.

Dans votre cas, les <a>éléments sont inlinepar défaut.

Changer la displayvaleur de la propriété en inline-blockrend les éléments en tant qu'éléments atomiques de niveau en ligne , et par conséquent les éléments deviennent «transformables» par définition.

li a {
   display: inline-block;
   -webkit-transform: rotate(10deg);
   -moz-transform: rotate(10deg);
   -o-transform: rotate(10deg); 
   transform: rotate(10deg);
}

Comme mentionné ci-dessus, cela ne semble applicable que dans les -webkitnavigateurs basés car il semble fonctionner dans IE / FF de toute façon.

Josh Crozier
la source
0

Essayez-vous spécifiquement de faire pivoter les liens uniquement? Parce que le faire sur les balises LI semble fonctionner correctement.

Selon Snook, les transformations nécessitent que les éléments affectés soient bloqués. Il a également du code pour que cela fonctionne pour IE en utilisant des filtres, si vous souhaitez l'ajouter (bien qu'il semble y avoir des limitations sur les valeurs).

Su '
la source
-4

-webkit-transform n'est plus nécessaire

ms supporte déjà la rotation ( -ms-transform: rotate(-10deg); )

essaye ça:

li a {
   ...

    -webkit-transform: rotate(-10deg);
    -moz-transform: rotate(-10deg);
    -o-transform: rotate(-10deg);
    -ms-transform: rotate(-10deg);
    -sand-transform: rotate(10deg);
    display: block;
    position: fixed;
    }
pdj
la source
1
Lors de mes tests aujourd'hui, j'ai remarqué que ce -webkit-transformn'était en effet plus nécessaire dans Chrome. Cependant, il était toujours nécessaire dans Safari 8.
John Slegers
À quoi sert -sand-transform? Une brève recherche sur Google n'a rien révélé.
Pete
google 'CSS Sandpaper' qui est pertinent pour la question et peut faciliter les choses. c'est un hack qui implémente le support de la transformation CSS standard pour les anciennes versions d'IE
Pedro Justo