Wie kann ich vertikalen Text mit einem CSS-Cross-Browser zeichnen?

243

Ich möchte ein einzelnes Textwort um 90 Grad drehen, mit browserübergreifender Unterstützung (> = IE6,> = Firefox 2, jede Version von Chrome, Safari oder Opera). Wie kann das gemacht werden?

usr
quelle
4
Es gibt kein reines CSS, das Sie mit Kreuzkompatibilität verwenden können. Was ich habe, ist alles was es gibt. Mit einem Bild bist du besser dran.
Robert K
1
Vertikaler Text-Crossbrowser ist nicht so schwierig. Auf der dns4.nl gibt es eine Lösung, die auch in der Oper funktioniert. Ich habe es mit allen Versionen getestet, dh Mozilla und Safari (auch Krone). Der Link lautet: dns4.nl/pagina/html_code/vertikale_tekst.html . Kommentar für xkcd150 :> Das Problem ist, dass dies auf dem Canvas-Element beruht. - xkcd150 20. September um 10:13 Nein, die Prozedur basiert nicht auf dem Canvas-Element.
Hier ist ein Tutorial, das erklärt, wie alle Arten von Texttransformationen auch im IE durchgeführt werden (einschließlich der Lösung Ihres Problems) :) useragentman.com/blog/2010/03/09/… Hoffe, es hilft!
Juanma Guerrero
Hier ist eine Aufschlüsselung der von mir verwendeten Technik: scottgale.com/blog/css-vertical-text/2010/03/01
Ich konnte erfolgreich drehen, indem ich den Anweisungen auf dieser Seite folgte, aber ich konnte die Seite nicht drucken. Der Text wird rückwärts gedruckt. Diese Website war sehr nützlich für mich: Sevenwires.com/play/UpsideDownLetters.html
Nahuel

Antworten:

213

Diese Antwort wurde mit den neuesten Informationen (aus CSS-Tricks ) aktualisiert . Ein großes Lob an Matt und Douglas für den Hinweis auf die Filterimplementierung.

.rotate {
  -webkit-transform: rotate(-90deg);
  -moz-transform: rotate(-90deg);
  -ms-transform: rotate(-90deg);
  -o-transform: rotate(-90deg);
  transform: rotate(-90deg);

  /* also accepts left, right, top, bottom coordinates; not required, but a good idea for styling */
  -webkit-transform-origin: 50% 50%;
  -moz-transform-origin: 50% 50%;
  -ms-transform-origin: 50% 50%;
  -o-transform-origin: 50% 50%;
  transform-origin: 50% 50%;

  /* Should be unset in IE9+ I think. */
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}

Alte Antwort:

Überprüfen Sie für FF 3.5 oder Safari / Webkit 3.1 Folgendes : -moz-transform (und -webkit-transform). IE hat einen Matrixfilter (v5.5 +), aber ich bin nicht sicher, wie ich ihn verwenden soll. Opera verfügt noch über keine Transformationsfunktionen.

.rot-neg-90 {
  /* rotate -90 deg, not sure if a negative number is supported so I used 270 */
  -moz-transform: rotate(270deg);
  -moz-transform-origin: 50% 50%;
  -webkit-transform: rotate(270deg);
  -webkit-transform-origin: 50% 50%;
  /* IE support too convoluted for the time I've got on my hands... */
}
Robert K.
quelle
+1 für das Geisterbärensymbol;) Ich hatte große Probleme damit, diese Arbeit zu machen. Am Ende musste ich meine DOM-Struktur ändern und mit einem negativen Rand fummeln. Eine IE-Version, die einfacher zu verwenden ist, aber beim Ausdrucken der Seite nicht richtig aussieht: Schreibmodus: tb-rl; Filter: Flipv Fliph;
RMorrisey
12
Microsoft "filter: progid: DXImageTransform.Microsoft.BasicImage (Rotation = 3);"
Matt
1
Leider wendet IE9 (im Standardmodus!) Sowohl den -ms-transform- * -Stil als auch den Filter an. In der Kompatibilitätsansicht wird nur der Filter angewendet.
Romløk
3
Stellen Sie sicher, dass Ihr Text ein Blockelement ist, dh verwenden Sie Anzeige: Inline-Block oder ähnliches
James Westgate
2
Hier sind einige Filter für die Güte von IE8 und IE9. Der erste ist IE8, der zweite ist der IE8-Standardmodus und # 3 entfernt den Filter für IE9 +. Arrrgh, ich kann keine Stackoverflow-Kommentare erhalten, um das Herausfiltern meiner CSS-Hacks zu beenden.
Justin Grant an.
73

Ich verwende den folgenden Code, um vertikalen Text in eine Seite zu schreiben. Firefox 3.5+, Webkit, Opera 10.5+ und IE

.rot-neg-90 {
    -moz-transform:rotate(-270deg); 
    -moz-transform-origin: bottom left;
    -webkit-transform: rotate(-270deg);
    -webkit-transform-origin: bottom left;
    -o-transform: rotate(-270deg);
    -o-transform-origin:  bottom left;
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
}
Choesang
quelle
Funktioniert unter Chrome 5. Funktioniert nicht im IE 8-Modus "Macken". funktioniert im "IE8-Standardmodus".
Asaf Bartov
Danke für die Information. Bitte posten Sie es hier, wenn Sie eine Möglichkeit finden, vertikalen Text im IE im Mackenmodus zu haben.
Choesang
15

Eine andere Lösung besteht darin, einen SVG-Textknoten zu verwenden, der von den meisten Browsern unterstützt wird .

<svg width="50" height="300">
    <text x="28" y="150" transform="rotate(-90, 28, 150)" style="text-anchor:middle; font-size:14px">This text is vertical</text>
</svg>

Demo: https://jsfiddle.net/bkymb5kr/

Weitere Informationen zum SVG-Text: http://tutorials.jenkov.com/svg/text-element.html

Jenny O'Reilly
quelle
Tolle Lösung, viel besser als die vorherigen - keine Probleme mit der Textpositionierung nach dem Drehen
Picard
9

Die CSS-Schreibmodi Modul führt orthogonale Flüsse mit vertikalem Text ein.

Verwenden Sie einfach die writing-modeEigenschaft mit dem gewünschten Wert.

span { margin: 20px; }
#vertical-lr { writing-mode: vertical-lr; }
#vertical-rl { writing-mode: vertical-rl; }
#sideways-lr { writing-mode: sideways-lr; }
#sideways-rl { writing-mode: sideways-rl; }
<span id="vertical-lr">
  ↑ (1) vertical-lr 至<br />
  ↑ (2) vertical-lr 至<br />
  ↑ (3) vertical-lr 至
</span>
<span id="vertical-rl">
  ↓ (1) vertical-rl 至<br />
  ↓ (2) vertical-rl 至<br />
  ↓ (3) vertical-rl 至
</span>
<span id="sideways-lr">
  ↓ (1) sideways-lr 至<br />
  ↓ (2) sideways-lr 至<br />
  ↓ (3) sideways-lr 至
</span>
<span id="sideways-rl">
  ↓ (1) sideways-rl 至<br />
  ↓ (2) sideways-rl 至<br />
  ↓ (3) sideways-rl 至
</span>

Oriol
quelle
2
seitwärts-rl wird ab sofort nicht weit unterstützt, ich würde vertikal-rl empfehlen und auf 180 Grad
drehen
6

Ich habe dies von http://snook.ca/archives/html_and_css/css-text-rotation angepasst :

<Stil>
    .Rotate-90
    {
        Bildschirmsperre;
        Position: absolut;
        rechts: -5px;
        oben: 15px;
        -webkit-transform: drehen (-90 Grad);
        -moz-transform: drehen (-90 Grad);
    }}
</ style>
<! - [wenn IE]>
    <Stil>
        .Rotate-90 {
            filter: progid: DXImageTransform.Microsoft.BasicImage (Rotation = 3);
            rechts: -15px; oben: 5px;
        }}
    </ style>
    <! [endif] ->
John
quelle
5

Ich hatte Probleme, es in reinem CSS zu versuchen - je nach Schriftart kann es ein bisschen blöd aussehen. Alternativ können Sie dazu SVG / VML verwenden. Es gibt Bibliotheken, die dazu beitragen, dass es problemlos browserübergreifend ist, z . B. Raphael und ExtJS . In ExtJS4 sieht der Code folgendermaßen aus:

    var drawComp = Ext.create('Ext.draw.Component', {
        renderTo: Ext.getBody(), //or whatever..
        height: 100, width: 100 //ditto..
    });
    var text = Ext.create('Ext.draw.Component', {
        type: "text",
        text: "The text to draw",
        rotate: {
            x: 0, y: 0, degrees: 270
        },
        x: -50, y: 10 //or whatever to fit (you could calculate these)..
    });
    text.show(true);

Dies wird in IE6 + und allen modernen Browsern funktionieren, aber leider denke ich, dass Sie mindestens FF3.0 benötigen.

Mark Rhodes
quelle
1
Ich mag
1
@ClarkeyBoy Ich würde sagen, dass nur IE10 mit anderen Browsern fast auf dem neuesten Stand ist, und nur, weil erzwungenes GPU-Rendering und Rasterlayout erzwungen werden. Sie können IE nicht wirklich als modernen Browser bezeichnen, da er x3-x10-mal langsamer aktualisiert als jeder andere Browser.
Skmasq
Verwenden Sie am besten eine SVG-Datei oder diese JS, da Sie möglicherweise feststellen, dass die Verwendung der CSS-Transformationseigenschaft möglicherweise nicht mit Ihren reaktionsschnell gestalteten Seiten kompatibel ist.
b01
5

Wenn Sie Bootstrap 3 verwenden, können Sie eines der Mixins verwenden:

.rotate(degrees);

Beispiel:

.rotate(-90deg);
Andreas Fröwis
quelle
1
Funktioniert immer noch, aber beachten Sie Folgendes
Yishaiz
4

Meine Lösung, die unter Chrome, Firefox, IE9, IE10 funktioniert (Ändern Sie die Grade gemäß Ihren Anforderungen):

.rotate-text {
  -webkit-transform: rotate(270deg);
  -moz-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  -o-transform: rotate(270deg);
  transform: rotate(270deg);
  filter: none; /*Mandatory for IE9 to show the vertical text correctly*/      
}
Devner
quelle