Jak narysować tekst w pionie w przeglądarce CSS?

243

Chcę obrócić jedno słowo tekstu o 90 stopni, z obsługą wielu przeglądarek (> = IE6,> = Firefox 2, dowolna wersja Chrome, Safari lub Opera). Jak można to zrobić?

usr
źródło
4
Nie ma czystego CSS, którego można użyć z kompatybilnością krzyżową. Wszystko, co mam, to wszystko. Lepiej jest z obrazem.
Robert K
1
Przeglądarka tekstu w pionie nie jest taka trudna. Na dns4.nl jest rozwiązanie, które działa nawet w operze. Przetestowałem to ze wszystkimi wersjami, tj. Mozilla i safari (także korona). link to: dns4.nl/pagina/html_code/vertikale_tekst.html . komentarz do xkcd150 :> Problem polega na tym, że polega on na elemencie canvas. - xkcd150 20 września o 10:13 Nie, procedura nie opiera się na elemencie canvas.
Oto samouczek, który wyjaśnia, jak wykonywać wszelkiego rodzaju transformacje tekstu nawet w IE (w tym rozwiązanie problemu) :) useragentman.com/blog/2010/03/09/… Mam nadzieję, że to pomaga!
Juanma Guerrero,
Oto zestawienie zastosowanej przeze
Mogłem pomyślnie obracać zgodnie z instrukcjami podanymi na tej stronie, ale nie mogłem wydrukować strony. Tekst zostanie wydrukowany do tyłu. Ta strona była dla mnie bardzo przydatna: sevenwires.com/play/UpsideDownLetters.html
Nahuel

Odpowiedzi:

213

Zaktualizowałem tę odpowiedź o najnowsze informacje (z trików CSS ). Wyrazy uznania dla Matta i Douglasa za wskazanie implementacji filtra.

.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);
}

Stara odpowiedź:

W przypadku FF 3.5 lub Safari / Webkit 3.1 sprawdź: -moz-transform (i -webkit-transform). IE ma filtr Matrix (wersja 5.5 +), ale nie jestem pewien, jak go używać. Opera nie ma jeszcze możliwości transformacji.

.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.
źródło
+1 za ikonę widmowego niedźwiedzia;) Miałem sporo problemów z wykonaniem tej pracy, ostatecznie skończyłem z koniecznością zmiany struktury DOM i kruszenia z ujemnym marginesem. Wersja IE, która jest prostsza w użyciu, ale nie wygląda poprawnie po wydrukowaniu strony: tryb pisania: tb-rl; filtr: flipv fliph;
RMorrisey
12
Microsoft „filter: progid: DXImageTransform.Microsoft.BasicImage (obrót = 3);”
Matt
1
Niestety, IE9 (w trybie standardów!) Stosuje zarówno style -ms-transform- *, jak i filtr. W widoku zgodności stosuje tylko filtr.
Romløk
3
Upewnij się, że tekst jest elementem blokowym, np. Użyj display: inline-block lub podobny
James Westgate
2
Oto kilka filtrów dla dobroci IE8 i IE9. Pierwszy to IE8, drugi to tryb standardów IE8, a # 3 usuwa filtr dla IE9 +. Arrrgh, nie mogę dostać komentarzy o przepełnieniu stosu,
Justin Grant
73

Używam następującego kodu do pisania tekstu pionowego na stronie. Firefox 3.5+, webkit, opera 10.5+ i 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
źródło
Działa w Chrome 5. Nie działa w trybie „dziwactwa” IE 8; wykonuje prace na „tryb IE8 Standards”.
Asaf Bartov
Dzięki, że dałeś mi znać. Prześlij go tutaj, jeśli znajdziesz sposób na pionowy tekst w IE w trybie dziwactwa.
Choesang
15

Innym rozwiązaniem jest użycie węzła tekstowego SVG, który jest obsługiwany przez większość przeglądarek .

<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/

Więcej informacji na temat tekstu SVG: http://tutorials.jenkov.com/svg/text-element.html

Jenny O'Reilly
źródło
świetne rozwiązanie, znacznie lepsze niż poprzednie - bez problemów z pozycjonowaniem tekstu po obróceniu
Picard
9

Moduł CSS Writing Modes wprowadza ortogonalne przepływy z tekstem pionowym.

Wystarczy użyć writing-modewłaściwości o żądanej wartości.

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
źródło
2
sideways-rl jak na razie nie jest szeroko wspierany, poleciłbym vertical-rl i obracanie do 180 stopni
godblessstrawberry 30.09.17
6

Zaadaptowałem to z http://snook.ca/archives/html_and_css/css-text-rotation :

<styl>
    .Rotate-90
    {
        Blok wyświetlacza;
        pozycja: absolutna;
        po prawej: -5px;
        góra: 15 pikseli;
        -webkit-transform: rotate (-90deg);
        -moz-transform: rotate (-90deg);
    }
</style>
<! - [if IE]>
    <styl>
        .Rotate-90 {
            filter: progid: DXImageTransform.Microsoft.BasicImage (obrót = 3);
            po prawej: -15px; góra: 5 pikseli;
        }
    </style>
    <! [endif] ->
Jan
źródło
5

Miałem problemy z próbą zrobienia tego w czystym CSS - w zależności od czcionki może to wyglądać trochę śmieci. Alternatywnie możesz użyć do tego SVG / VML. Istnieją biblioteki, które ułatwiają przeglądanie w przeglądarce, np. Raphael i ExtJS . W ExtJS4 kod wygląda następująco:

    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);

Będzie to działać w IE6 + i we wszystkich nowoczesnych przeglądarkach, jednak niestety myślę, że potrzebujesz przynajmniej FF3.0.

Mark Rhodes
źródło
1
Uwielbiam różnicowanie między IE6 + a wszystkimi nowoczesnymi przeglądarkami - brzmi to tak, jakby
mówiono,
1
@ClarkeyBoy Powiedziałbym, że tylko IE10 jest prawie szybki w przypadku innych przeglądarek i tylko dlatego, że wymuszono renderowanie GPU i układ siatki. Naprawdę nie można calkowicie IE nowoczesnej przeglądarki, ponieważ aktualizuje ona x3-x10 razy wolniej niż każda inna przeglądarka.
skmasq
Najlepiej jest użyć pliku SVG lub tego pliku JS, ponieważ może się okazać, że użycie właściwości transformacji CSS może nie być zgodne z responsywnie zaprojektowanymi stronami.
b01
5

Jeśli używasz Bootstrap 3, możesz użyć jednej z jego miksów:

.rotate(degrees);

Przykład:

.rotate(-90deg);
Andreas Fröwis
źródło
1
Nadal działa, ale zauważ, że: Wszystkie mixiny dostawców są przestarzałe od wersji 3.2.0 z powodu wprowadzenia Autoprefixera w naszym pliku Gruntfile. Zostaną usunięte w wersji 4.
yishaiz,
4

Moje rozwiązanie, które działałoby na Chrome, Firefox, IE9, IE10 (Zmień stopnie zgodnie z wymaganiami):

.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
źródło