ฉันจะวาดข้อความแนวตั้งด้วย CSS ข้ามเบราว์เซอร์ได้อย่างไร


243

ฉันต้องการหมุนข้อความหนึ่งคำ 90 องศาด้วย cross-browser (> = IE6,> = Firefox 2, Chrome รุ่นใดก็ได้, Safari หรือ Opera) สิ่งนี้สามารถทำได้?


4
ไม่มี CSS บริสุทธิ์ที่คุณสามารถใช้กับความเข้ากันได้ข้าม สิ่งที่ฉันมีคือทั้งหมดที่มี คุณดีกว่าด้วยภาพ
Robert K

1
crossbrowser ข้อความแนวตั้งนั้นไม่ยาก ใน dns4.nl มีวิธีแก้ปัญหาที่ทำงานได้แม้ใน opera ฉันทดสอบกับทุกรุ่นคือ Mozilla และซาฟารี (รวมถึงมงกุฎ) การเชื่อมโยง: dns4.nl/pagina/html_code/vertikale_tekst.html ความคิดเห็นสำหรับ xkcd150 :> ปัญหาคือว่าขึ้นอยู่กับองค์ประกอบผ้าใบ - xkcd150 20 ก.ย. เวลา 10:13 ไม่กระบวนการนี้ไม่ได้ขึ้นอยู่กับองค์ประกอบผ้าใบ

นี่คือบทเรียนที่อธิบายวิธีการแปลงข้อความทุกชนิดแม้ใน IE (รวมถึงวิธีแก้ปัญหาของคุณ) :) useragentman.com/blog/2010/03/09/…หวังว่าจะช่วยได้!
Juanma Guerrero

นี่คือรายละเอียดของเทคนิคที่ฉันใช้: scottgale.com/blog/css-vertical-text/2010/03/01

ฉันหมุนได้สำเร็จทำตามคำแนะนำที่ให้ไว้ในหน้านี้ แต่ฉันไม่สามารถพิมพ์หน้านี้ได้ ข้อความพิมพ์ย้อนหลัง เว็บไซต์นี้มีประโยชน์มากสำหรับฉัน: sevenwires.com/play/UpsideDownLetters.html
Nahuel

คำตอบ:


213

อัปเดตคำตอบนี้ด้วยข้อมูลล่าสุด (จากเคล็ดลับ CSS ) ขอชื่นชมแมทและดักลาสสำหรับการชี้การใช้งานตัวกรอง

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

คำตอบเก่า:

สำหรับ FF 3.5 หรือ Safari / Webkit 3.1 ให้ดูที่: -moz-transform (และ -webkit-transform) IE มีตัวกรอง Matrix (v5.5 +) แต่ฉันไม่แน่ใจว่าจะใช้งานอย่างไร Opera ยังไม่มีความสามารถในการแปลงรูป

.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 สำหรับไอคอน Ghost Bear;) ฉันมีปัญหาอย่างมากในการทำงานนี้ฉันสิ้นสุดที่ต้องเปลี่ยนโครงสร้าง DOM ของฉันและทำให้ยุ่งเหยิงด้วยค่าลบ เวอร์ชัน IE ที่ใช้ง่ายกว่า แต่ดูไม่ถูกต้องเมื่อพิมพ์หน้า: โหมดการเขียน: tb-rl; ตัวกรอง: flipv fliph;
RMorrisey

12
Microsoft "ตัวกรอง: progid: DXImageTransform.Microsoft.BasicImage (rotation = 3);"
Matt

1
น่าเสียดายที่ IE9 (ในโหมดมาตรฐาน!) ใช้ทั้งสไตล์ -ms-transform- * และตัวกรอง ในมุมมองความเข้ากันได้จะใช้ตัวกรองเท่านั้น
Romløk

3
ตรวจสอบให้แน่ใจว่าข้อความของคุณเป็นองค์ประกอบบล็อกเช่นใช้งานการแสดงผล: บล็อกแบบอินไลน์หรือคล้ายกัน
James Westgate

2
ต่อไปนี้เป็นตัวกรองสำหรับความดีของ IE8 และ IE9 ที่แรกก็คือ IE8 ที่สองคือโหมดมาตรฐาน IE8 และ # 3 ลบตัวกรองสำหรับ IE9 + ยัง, ฉันไม่สามารถรับความคิดเห็น stackoverflow เพื่อหยุดกรอง hacks CSS ของฉันดังนั้นดูที่jsfiddle.net/GrPyj/9
Justin Grant

73

ฉันใช้รหัสต่อไปนี้เพื่อเขียนข้อความแนวตั้งในหน้า Firefox 3.5+, webkit, Opera 10.5+ และ 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);
}

ใช้งานได้บน Chrome 5. ไม่ทำงานในโหมด IE 8 "quirks" ไม่ทำงานในโหมด "IE8 มาตรฐาน"
Asaf Bartov

ขอบคุณสำหรับการให้ฉันรู้ว่า. โปรดโพสต์ไว้ที่นี่หากคุณพบวิธีที่จะมีข้อความแนวตั้งใน IE ภายใต้โหมดนิสัย
Choesang

15

ทางออกก็คือการใช้โหนดข้อความ SVGซึ่งมีการสนับสนุนจากเบราว์เซอร์ส่วนใหญ่

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

การสาธิต: https://jsfiddle.net/bkymb5kr/

เพิ่มเติมเกี่ยวกับข้อความ SVG: http://tutorials.jenkov.com/svg/text-element.html


ทางออกที่ดีดีกว่าครั้งก่อนมาก - ไม่มีปัญหากับการวางตำแหน่งข้อความหลังจากหมุน
Picard

9

CSS เขียนโหมดโมดูลแนะนำกระแสมุมฉากที่มีข้อความในแนวตั้ง

เพียงแค่ใช้writing-modeคุณสมบัติที่มีค่าที่ต้องการ

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 ณ ตอนนี้ยังไม่รองรับกันอย่างแพร่หลายฉันอยากจะแนะนำแนวตั้ง -ll และหมุนไปที่ 180 องศา
godblessstrawberry

6

ฉันดัดแปลงจากhttp://snook.ca/archives/html_and_css/css-text-rotation :

<style>
    .Rotate-90
    {
        แสดงผล: บล็อก;
        ตำแหน่ง: สัมบูรณ์;
        ขวา: -5px;
        ด้านบน: 15px;
        -webkit-transform: หมุน (-90deg);
        -moz-transform: หมุน (-90deg);
    }
</ style>
<! - [ถ้า IE]>
    <style>
        . หมุน -90 {
            ตัวกรอง: progid: DXImageTransform.Microsoft.BasicImage (หมุน = 3);
            ขวา: -15px; ด้านบน: 5px;
        }
    </ style>
    <[endif] ->

5

ฉันมีปัญหาในการพยายามทำมันด้วย CSS บริสุทธิ์ - ขึ้นอยู่กับตัวอักษรว่ามันดูขยะไปหน่อย คุณสามารถใช้ SVG / VML แทนได้ มีห้องสมุดที่ช่วยให้มันข้ามเบราเซอร์ได้อย่างง่ายดายเช่นราฟาเอลและExtJS ใน ExtJS4 โค้ดมีลักษณะดังนี้:

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

มันจะทำงานใน IE6 + และเบราว์เซอร์ที่ทันสมัยทั้งหมด แต่น่าเสียดายที่ฉันคิดว่าคุณต้องการ FF3.0 เป็นอย่างน้อย


1
ความแตกต่างระหว่างความรัก IE6 + และเบราว์เซอร์ที่ทันสมัย - มันอ่านเช่นถ้าคุณกำลังจะบอกว่ารุ่นของ IE ที่ใด ๆ ที่ไม่ทันสมัย :)
ClarkeyBoy

1
@ ClarkeyBoy ฉันจะบอกว่ามีเพียง IE10 เกือบจะเร็วขึ้นสำหรับเบราว์เซอร์อื่น ๆ และเพียงเพราะบังคับให้แสดงผล GPU และรูปแบบตาราง คุณไม่สามารถจัดเบราว์เซอร์ที่ทันสมัยใน IE ไม่ได้เพราะมันอัปเดตช้ากว่า x3-x10 ทุกครั้งที่เบราว์เซอร์อื่น ๆ
skmasq

ทางออกที่ดีที่สุดคือการใช้ไฟล์ SVG หรือ JS นี้เนื่องจากคุณอาจพบว่าการใช้คุณสมบัติการแปลง CSS อาจเข้ากันไม่ได้กับหน้าเว็บที่คุณออกแบบอย่างมีความรับผิดชอบ
b01

5

หากคุณใช้ Bootstrap 3 คุณสามารถใช้หนึ่งในนั้นของ mixins:

.rotate(degrees);

ตัวอย่าง:

.rotate(-90deg);

1
ยังคงใช้งานได้ แต่โปรดสังเกตว่า: มิกซ์ผสมของผู้ขายทั้งหมดจะถูกคัดค้าน ณ วันที่ v3.2.0 เนื่องจากมีการแนะนำ Autoprefixer ใน Gruntfile พวกเขาจะถูกลบออกใน v4
yishaiz

4

โซลูชันของฉันที่ใช้งานได้กับ Chrome, Firefox, IE9, IE10 (เปลี่ยนองศาตามความต้องการของคุณ):

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

0

ถ้าโหมดการเขียน CSS : sideways-lrเป็นสิ่งที่คุณต้องการและคุณจะพบกับเบราว์เซอร์ที่ใช้โครเมียม / โครม คุณอาจลอง

{
  writing-mode: vertical-rl; 
  transform: rotate(180deg);
}

ดังนั้นเบราว์เซอร์ที่ทันสมัยทั้งหมดจึงสนับสนุนในตอนนี้

การอ้างอิง: https://bugs.chromium.org/p/chromium/issues/detail?id=680331#c4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.