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?


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

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

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


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>


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

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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.