2009-07-03 13 views
238

Chcę obrócić pojedyncze słowo tekstu o 90 stopni, korzystając z obsługi wielu przeglądarek (> = IE6,> = Firefox 2, dowolnej wersji przeglądarki Chrome, Safari lub Opera). Jak to zrobić?Jak mogę narysować tekst pionowy za pomocą przeglądarki CSS?

+4

Nie ma czystego CSS można korzystać z wzajemnej zgodności. To, co mam, to wszystko, co istnieje. Lepiej z obrazem. –

+0

Oto zestawienie użytej techniki: http://scottgale.com/blog/css-vertical-text/2010/03/01/ –

+0

Oto samouczek wyjaśniający, jak wykonywać wszelkiego rodzaju transformacje tekstu nawet w IE (w tym rozwiązanie twojego problemu) :) http://www.useragentman.com/blog/2010/03/09/cross-browser-css-transforms-even-in-ie/ Hope it help! –

Odpowiedz

210

Zaktualizowano tę odpowiedź na podstawie najnowszych informacji (z CSS Tricks). Kudos do 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); 
} 

Old odpowiedź:

For FF 3.5 lub Safari/Webkit 3.1, sprawdź: -moz-transform (i -webkit-transform). IE ma Matrix filter (v5.5 +), ale nie jestem pewien, jak z niego korzystać. 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... */ 
} 
+1

dzięki, ale ff 2 wyglądałby okropnie. – usr

+0

FF2 nie zrobiłby niczego, nie interpretuje -transform. –

+0

, więc menu pionowe będzie bardzo szerokie. – usr

6

I dostosowany to z http://snook.ca/archives/html_and_css/css-text-rotation:

 
<style> 
    .Rotate-90 
    { 
     display: block; 
     position: absolute; 
     right: -5px; 
     top: 15px; 
     -webkit-transform: rotate(-90deg); 
     -moz-transform: rotate(-90deg); 
    } 
</style> 
<!--[if IE]> 
    <style> 
     .Rotate-90 { 
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); 
      right:-15px; top:5px; 
     } 
    </style> 
    <![endif]--> 
73

Używam następujący kod do wpisywania tekstu w pionie 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); 
} 
+0

Działa w Chrome 5. Nie działa w trybie "dziwactw" IE 8; * działa * w trybie "Standard IE8". –

+0

Dzięki za poinformowanie mnie. Proszę napisać to tutaj, jeśli znajdziesz sposób, aby mieć pionowy tekst w IE w trybie dziwactwa. – tchoesang

5

miałem problemy staramy się robić to w czystym CSS - w zależności od czcionki może wyglądać trochę śmieci. Jako alternatywę możesz użyć SVG/VML, aby to zrobić. Istnieją biblioteki, które ułatwiają przeglądanie przeglądarki, 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); 

To będzie pracować w IE6 + i wszystkich nowoczesnych przeglądarkach, jednak niestety myślę, że trzeba co najmniej FF3.0.

+1

Kochanie rozróżnienie między IE6 + i wszystkimi nowoczesnymi przeglądarkami - brzmi to tak, jakby powiedzieć, że jakakolwiek wersja IE nie jest nowoczesna :) – ClarkeyBoy

+1

@ClarkeyBoy Powiedziałbym, że tylko IE10 jest prawie na czasie z innymi przeglądarkami, i tylko dlatego, że wymuszono gpu renderowanie i układ siatki. Naprawdę nie da się zmienić IE w nowoczesną przeglądarkę, ponieważ aktualizuje się x3-x10 razy wolniej niż w każdej innej przeglądarce. – skmasq

+0

Najlepiej jest użyć pliku SVG lub tego JS, ponieważ może się okazać, że użycie właściwości przekształcenia CSS może być niezgodne z twoimi responsywnie zaprojektowanymi stronami. – b01

4

Moje rozwiązanie, które będzie działać na Chrome, Firefox, IE9, IE10 (Zmień stopni jak na swoje wymagania):

.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*/  
} 
5

Jeśli używasz Bootstrap 3, można użyć jednej z nich znajduje się wstawek:

.rotate(degrees); 

przykład:

.rotate(-90deg); 
+1

Ciągle działa, ale zauważ, że: ** Wszystkie mixiny dostawców są przestarzałe od wersji v3.2.0 z powodu wprowadzenia Autoprefixer w naszym pliku Gruntfile. Zostaną one usunięte w wersji v4. ** – yishaiz

8

Innym rozwiązaniem jest użycie tex SVG t węzeł, który jest supported by most browsers.

<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 w tekście SVG:http://tutorials.jenkov.com/svg/text-element.html

+0

świetne rozwiązanie, znacznie lepsze niż poprzednie - brak problemów z pozycjonowaniem tekstu po obróceniu – Picard

5

Moduł CSS Writing Modes wprowadza ortogonalne przepływów z tekstem pionowym.

Po prostu użyj właściwości writing-mode z żądaną 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>

+0

od tej pory sideways-rl jak na razie nie jest obsługiwane, polecam vertical-rl i obracanie do 180 stopni – godblessstrawberry

Powiązane problemy