CSS3-Transformation funktioniert nicht

122

Ich versuche, meine Menüelemente durch Drehen um 10 Grad zu transformieren. Mein CSS funktioniert in Firefox, aber ich konnte den Effekt in Chrome und Safari nicht replizieren. Ich weiß, dass der IE diese CSS3-Eigenschaft nicht unterstützt, daher ist dies kein Problem.

Ich habe folgendes CSS verwendet:

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

Könnte jemand bitte vorschlagen, wo ich falsch liege?

Vielen Dank.

Shruti
quelle
2
Zu Ihrer Information, IE unterstützt diese CSS3-Eigenschaft, Sie benötigen nur ein Präfix:-ms-transform:rotate(10deg);
Joshua Pinter
2
Da dies noch niemand erwähnt hat, stellen Sie seit 2016 sicher, dass Sie die nicht vorfixierte Version der CSS-Regel (z. B. transform: rotate(10deg);) unter den von Ihnen unterstützten Präfixversionen platzieren .
Maximillian Laumeister

Antworten:

300

Dies ist nur eine fundierte Vermutung, ohne den Rest Ihres HTML / CSS zu sehen:

Haben Sie sich beworben display: blockoder display: inline-blockbei li a? Wenn nicht, probieren Sie es aus.

Versuchen Sie andernfalls, listattdessen die CSS3-Transformationsregeln anzuwenden .

dreißig Punkte
quelle
22
Ich liebe dich! Das hat display: inline-blockgeholfen.
Bugs Bunny
2
Eine Erklärung wäre hilfreich :)
Scitronboy
56

In Webkit-basierten Browsern (Safari und Chrome) -webkit-transform wird dies bei Inline-Elementen ignoriert. . Stellen Sie ein display: inline-block;, damit es funktioniert . Zu Demonstrations- / Testzwecken möchten Sie möglicherweise auch einen negativen Winkel verwenden oder transformation-originden Text aus dem sichtbaren Bereich herausdrehen.

Phihag
quelle
Hat perfekt für mich funktioniert, danke! Ich habe es auf <span> & copy </ span> verwendet, um ein Copyleft-Symbol zu erstellen.
Elisabeth
@ Elizabeth Das ist eine hervorragende Anwendung. Beachten Sie, dass Entitätsreferenzen jedoch (wie in <span>&copy;</span>) durch ein Semikolon abgeschlossen werden müssen , obwohl die meisten Browser in beide Richtungen rendern.
Phihag
Ein weiterer Hinweis: Wenn Sie die Transformation für einen Interaktionsstatus anwenden (z. B. :hoveroder :active), müssen Sie die Transformation inline-blockauf das Element in seinem Standardstatus anwenden , z a { display: inline-block; } a:active { transform: translateY(0.125em); }. Das Anwenden inline-blockauf den Interaktionsstatus allein scheint nicht zu funktionieren. Zumindest in Chrome - in Firefox funktioniert es einwandfrei.
Paul d'Aoust
1
Vielen Dank für den Hinweis, dass -webkit-transformdies bei Inline-Elementen nicht funktioniert. War vorher festgefahren.
Pbojinov
@phihag Ausgezeichneter Punkt, du hast mir einiges an Haaren erspart! Beachten Sie, dass dies dazu führen kann, dass Ihre Elemente nach dem Ausführen der Animation verschwinden.
Texelate
21

Da niemand auf relevante Dokumentation verwies:

CSS Transforms Module Level 1 - Terminologie - Transformierbares Element

Ein transformierbares Element ist ein Element in einer dieser Kategorien:

  • Ein Element, dessen Layout vom CSS-Box-Modell gesteuert wird, das entweder ein Element auf Block- oder atomarer Inline-Ebene ist , oder dessen Anzeigeeigenschaft in Tabellenzeile, Tabellenzeilengruppe, Tabellenkopfgruppe und Tabellenfußzeile berechnet wird -Gruppe, Tabellenzelle oder Tabellenbeschriftung
  • Ein Element im SVG-Namespace, das nicht vom CSS-Box-Modell gesteuert wird und dessen Attribute transform, 'patternTransform' oder gradientTransform aufweisen.

In Ihrem Fall sind die <a>Elemente inlinestandardmäßig.

Wenn Sie den displayWert der Eigenschaft so inline-blockändern, dass die Elemente als atomare Elemente auf Inline-Ebene dargestellt werden , werden die Elemente per Definition "transformierbar" .

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

Wie oben erwähnt, scheint dies nur in -webkitbasierten Browsern zuzutreffen, da es unabhängig davon in IE / FF zu funktionieren scheint.

Josh Crozier
quelle
0

Versuchen Sie speziell, nur die Links zu drehen? Weil es auf den LI-Tags gut zu funktionieren scheint.

Laut Snook- Transformationen müssen die betroffenen Elemente blockiert werden. Er hat dort auch Code, damit dieser IE mithilfe von Filtern funktioniert, wenn Sie ihn hinzufügen möchten (obwohl es anscheinend einige Einschränkungen bei den Werten gibt).

Su '
quelle
-4

-webkit-transform wird nicht mehr benötigt

ms unterstützen bereits Rotation ( -ms-transform: rotate(-10deg);)

Versuche dies:

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
quelle
1
Bei meinen heutigen Tests habe ich festgestellt, dass dies -webkit-transformin Chrome tatsächlich nicht mehr benötigt wird. Es wurde jedoch noch in Safari 8 benötigt.
John Slegers
Wofür ist -sand-transform? Eine kurze Google-Suche ergab nichts.
Pete
google 'CSS Sandpaper', das für die Frage relevant ist und die Dinge möglicherweise einfacher macht. Es ist ein Hack, der die Unterstützung für die Standard-CSS-Transformation für alte Versionen von IE implementiert
Pedro Justo