Bagaimana cara menggambar teks vertikal dengan browser lintas CSS?

243

Saya ingin memutar satu kata teks sebesar 90 derajat, dengan cross-browser (> = IE6,> = Firefox 2, versi Chrome, Safari, atau Opera). Bagaimana ini bisa dilakukan?

usr
sumber
4
Tidak ada CSS murni yang dapat Anda gunakan dengan kompatibilitas silang. Apa yang saya dapatkan adalah semua yang ada. Anda lebih baik dengan gambar.
Robert K
1
Crossbrowser teks vertikal tidak begitu sulit. Di dns4.nl ada solusi yang berfungsi bahkan di opera. Saya mengujinya dengan semua versi yaitu, mozilla dan safari (juga mahkota). tautannya adalah: dns4.nl/pagina/html_code/vertikale_tekst.html . komentar untuk xkcd150 :> Masalahnya, itu bergantung pada elemen kanvas. - xkcd150 20 Sep pukul 10:13 Tidak, prosedurnya tidak bergantung pada elemen kanvas.
Berikut adalah tutorial yang menjelaskan cara melakukan semua jenis transformasi teks bahkan di IE (termasuk solusi untuk masalah Anda) :) useragentman.com/blog/2010/03/09/... Semoga membantu!
Juanma Guerrero
Berikut ini adalah rincian teknik yang saya gunakan: scottgale.com/blog/css-vertical-text/2010/03/01
Saya dapat memutar dengan sukses mengikuti instruksi yang diberikan pada halaman ini tetapi saya tidak dapat mencetak halaman. Teks dicetak mundur. Situs web ini sangat berguna bagi saya: sevenwires.com/play/UpsideDownLetters.html
Nahuel

Jawaban:

213

Memperbarui jawaban ini dengan informasi terkini (dari Trik CSS ). Kudos to Matt and Douglas untuk menunjukkan implementasi filter.

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

Jawaban lama:

Untuk FF 3.5 atau Safari / Webkit 3.1, periksa: -moz-transform (dan -webkit-transform). IE memiliki filter Matrix (v5.5 +), tapi saya tidak yakin bagaimana cara menggunakannya. Opera belum memiliki kemampuan transformasi.

.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.
sumber
1 untuk ikon hantu beruang;) Saya punya banyak masalah dalam membuat pekerjaan ini, saya akhirnya harus mengubah struktur DOM saya dan menipu dengan margin negatif. Versi IE yang lebih mudah digunakan tetapi tidak terlihat benar ketika halaman dicetak: mode penulisan: tb-rl; filter: flipv fliph;
RMorrisey
12
Microsoft "filter: progid: DXImageTransform.Microsoft.BasicImage (rotasi = 3);"
Matt
1
Sayangnya, IE9 (dalam modus standar!) Berlaku baik yang -MS-Transform- * gaya, dan filter. Dalam tampilan kompatibilitas, itu hanya berlaku filter.
Romløk
3
Pastikan teks Anda adalah elemen blok yaitu gunakan tampilan: inline-block atau serupa
James Westgate
2
Inilah beberapa filter untuk kebaikan IE8 dan IE9. Yang pertama adalah IE8, yang kedua adalah mode standar IE8, dan # 3 menghapus filter untuk IE9 +. Arrrgh, saya tidak bisa mendapatkan komentar stackoverflow untuk berhenti memfilter peretasan CSS saya, jadi lihatlah jsfiddle.net/GrPyj/9
Justin Grant
73

Saya menggunakan kode berikut untuk menulis teks vertikal dalam satu halaman. Firefox 3.5+, webkit, opera 10.5+ dan 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
sumber
Bekerja pada Chrome 5. Tidak berfungsi pada mode "quirks" IE 8; tidak bekerja pada "mode Standar IE8".
Asaf Bartov
Terima kasih telah memberi tahu saya. Silakan posting di sini, jika Anda menemukan cara untuk memiliki Teks vertikal di IE dalam mode quirks.
Choesang
15

Solusi lain adalah dengan menggunakan simpul teks SVG yang didukung oleh sebagian besar browser .

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

Lebih lanjut tentang teks SVG: http://tutorials.jenkov.com/svg/text-element.html

Jenny O'Reilly
sumber
solusi hebat, jauh lebih baik daripada yang sebelumnya - tidak ada masalah dengan pemosisian teks setelah rotasi
Picard
9

The CSS Menulis Mode modul memperkenalkan arus orthogonal dengan teks vertikal.

Cukup gunakan writing-modeproperti dengan nilai yang diinginkan.

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
sumber
2
sideways-rl seperti yang sekarang tidak didukung secara luas, saya akan merekomendasikan vertikal-rl dan berputar ke 180 deg
godblessstrawberry
6

Saya mengadaptasi ini dari http://snook.ca/archives/html_and_css/css-text-rotation :

<style>
    .Rotate-90
    {
        display: blok;
        posisi: absolut;
        kanan: -5px;
        atas: 15px;
        -webkit-transform: rotate (-90deg);
        -moz-transform: rotate (-90deg);
    }
</style>
<! - [jika IE]>
    <style>
        .Rotate-90 {
            filter: progid: DXImageTransform.Microsoft.BasicImage (rotasi = 3);
            kanan: -15px; atas: 5px;
        }
    </style>
    <! [endif] ->
john
sumber
5

Saya mengalami masalah saat mencoba melakukannya dalam CSS murni - tergantung fontnya, ini bisa terlihat seperti sampah. Sebagai alternatif, Anda dapat menggunakan SVG / VML untuk melakukannya. Ada perpustakaan yang membantu membuatnya lintas browser dengan mudah misalnya Raphael dan ExtJS . Dalam ExtJS4 kodenya terlihat seperti ini:

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

Ini akan bekerja di IE6 + dan semua browser modern, namun, sayangnya saya pikir Anda memerlukan setidaknya FF3.0.

Mark Rhodes
sumber
1
Mencintai perbedaan antara IE6 + dan semua browser modern - sepertinya Anda mengatakan bahwa versi IE tidak modern :)
ClarkeyBoy
1
@ClarkeyBoy Saya akan mengatakan hanya IE10 yang hampir mencapai kecepatan dengan browser lain, dan hanya karena rendering GPU yang dipaksa dan tata letak jaringan. Anda tidak dapat benar-benar memberi IE browser modern, karena pembaruan x3-x10 kali lebih lambat daripada setiap browser lainnya.
skmasq
Taruhan terbaik adalah menggunakan file SVG atau JS ini, karena Anda mungkin menemukan bahwa menggunakan properti transformasi CSS mungkin tidak kompatibel dengan halaman yang dirancang secara responsif.
B01
5

Jika Anda menggunakan Bootstrap 3, Anda dapat menggunakan salah satu dari itu mixins:

.rotate(degrees);

Contoh:

.rotate(-90deg);
Andreas Fröwis
sumber
1
Masih berfungsi, tetapi perhatikan bahwa: Semua mixins vendor tidak digunakan lagi pada v3.2.0 karena diperkenalkannya Autoprefixer di Gruntfile kami. Mereka akan dihapus di v4.
yishaiz
4

Solusi saya yang dapat digunakan di Chrome, Firefox, IE9, IE10 (Ubah derajat sesuai kebutuhan Anda):

.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
sumber