Drehen und übersetzen


85

Ich habe einige Probleme beim Drehen und Positionieren einer Textzeile. Jetzt funktioniert nur noch die Position. Die Drehung funktioniert auch, aber nur, wenn ich die Positionierung deaktiviere.

CSS:

#rotatedtext {
    transform-origin: left;
    transform: rotate(90deg);
    transform: translate(50%, 50%);
}

Das HTML ist nur einfacher Text.

Antworten:


150

Der Grund dafür ist, dass Sie die Transformationseigenschaft zweimal verwenden. Aufgrund von CSS-Regeln mit der Kaskade gewinnt die letzte Deklaration, wenn sie dieselbe Spezifität haben. Da sich beide Transformationsdeklarationen im selben Regelsatz befinden, ist dies der Fall.

Was es tut, ist Folgendes:

  1. Drehen Sie den Text um 90 Grad. OK.
  2. 50% mal 50% übersetzen. Ok, dies ist dieselbe Eigenschaft wie in Schritt eins. Führen Sie diesen Schritt aus und ignorieren Sie Schritt 1.

Siehe http://jsfiddle.net/Lx76Y/ und öffnen Sie es im Debugger, um zu sehen, dass die erste Deklaration überschrieben wird

Da die Übersetzung die Drehung überschreibt, müssen Sie sie stattdessen in derselben Deklaration kombinieren: http://jsfiddle.net/Lx76Y/1/

Dazu verwenden Sie eine durch Leerzeichen getrennte Liste von Transformationen:

#rotatedtext {
    transform-origin: left;
    transform: translate(50%, 50%) rotate(90deg) ;
}

Denken Sie daran, dass sie in einer Kette angegeben sind. Daher wird zuerst die Übersetzung angewendet und danach die Drehung.


22
Ich habe festgestellt, dass die Verkettung sehr wichtig ist. Vergleichen Sie eine Übersetzung gefolgt von einer Rotation - jsfiddle.net/Mrjm8/3 - mit einer Rotation gefolgt von einer Übersetzung - jsfiddle.net/Mrjm8/2
Luke

Wie funktioniert das, wenn es in HTML anstelle von CSS geschrieben ist?
JakeTheSnake

2
@JakeTheSnake Das tut es nicht. CSS-Transformationen sind eine CSS-Funktion.
Stijn de Witt

2
Wow Danke. Sie sollten den Verkettungsaspekt kühn machen :) das war ein Schlüsselelement, das viele Blogs und Spezifikationen nie erwähnen!
Cgatian

@ Luke Danke, dass du darauf hingewiesen hast , die Reihenfolge ist wirklich wichtig!
Yami Odymel


4

Dies ist nicht erforderlich, da Sie den CSS-Schreibmodus mit den Werten 'vertikal-lr' oder 'vertikal-rl' nach Wunsch verwenden können.

.item {
  writing-mode: vertical-rl;
}

CSS: Schreibmodus


2

Etwas, das möglicherweise übersehen wird: In meinem Verkettungsprojekt stellt sich heraus, dass eine durch Leerzeichen getrennte Liste am Ende auch ein durch Leerzeichen getrenntes Semikolon benötigt.

Mit anderen Worten, das funktioniert nicht:

transform: translate(50%, 50%) rotate(90deg);

aber das tut:

transform: translate(50%, 50%) rotate(90deg) ; //has a space before ";"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.