Làm cách nào tôi có thể vẽ văn bản dọc với trình duyệt chéo CSS?


243

Tôi muốn xoay một từ văn bản một góc 90 độ, với trình duyệt chéo (> = IE6,> = Firefox 2, mọi phiên bản Chrome, Safari hoặc Opera) hỗ trợ. Điều này có thể giải quyết như thế nào?


4
Không có CSS ​​thuần mà bạn có thể sử dụng với khả năng tương thích chéo. Những gì tôi đã có là tất cả có. Bạn tốt hơn với một hình ảnh.
Robert K

1
Crossbrowser văn bản dọc không quá khó. Trên dns4.nl có một giải pháp hoạt động ngay cả trong opera. Tôi đã thử nghiệm nó với tất cả các phiên bản, ví dụ như mozilla và safari (cũng là vương miện). liên kết là: dns4.nl/pagina/html_code/vertikale_tekst.html . nhận xét cho xkcd150 :> Vấn đề là, đó là dựa vào yếu tố canvas. - xkcd150 ngày 20 tháng 9 lúc 10:13 Không, quy trình không dựa vào yếu tố canvas.

Đây là một hướng dẫn giải thích cách thực hiện tất cả các loại chuyển đổi văn bản ngay cả trong IE (bao gồm giải pháp cho vấn đề của bạn) :) useragentman.com/blog/2010/03/09/ Hy vọng nó sẽ giúp!
Juanma Guerrero

Đây là sự cố về kỹ thuật tôi đã sử dụng: scottgale.com/blog/css-vertical-text/2010/03/01

Tôi có thể xoay thành công theo hướng dẫn đưa ra trên trang này nhưng tôi không thể in trang. Các văn bản được in ngược. Trang web này rất hữu ích với tôi: sevenwires.com/play/UpsideDownLetters.html
Nahuel

Câu trả lời:


213

Đã cập nhật câu trả lời này với thông tin gần đây (từ Thủ thuật CSS ). Kudos cho Matt và Douglas đã chỉ ra việc thực hiện bộ lọc.

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

Câu trả lời cũ:

Đối với FF 3.5 hoặc Safari / Webkit 3.1, hãy xem: -moz-Transform (và -webkit-Transform). IE có bộ lọc Ma trận (v5.5 +), nhưng tôi không chắc chắn cách sử dụng nó. Opera chưa có khả năng biến đổi.

.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 cho biểu tượng gấu ma;) Tôi gặp rất nhiều rắc rối khi thực hiện công việc này, cuối cùng tôi đã phải thay đổi cấu trúc DOM của mình và làm mờ đi với một lề âm. Một phiên bản IE đơn giản hơn để sử dụng nhưng trông không ổn khi trang được in ra: write-mode: tb-rl; bộ lọc: flipv fliph;
RMorrisey

12
Bộ lọc "Microsoft: progid: DXImageTransform.Microsoft.BasicImage (rotation = 3);"
Matt

1
Thật không may, IE9 (ở chế độ tiêu chuẩn!) Áp dụng cả kiểu -ms-Transform- * bộ lọc. Trong chế độ xem tương thích, nó chỉ áp dụng bộ lọc.
Romløk

3
Đảm bảo văn bản của bạn là một thành phần khối, tức là sử dụng hiển thị: khối nội tuyến hoặc tương tự
James Westgate

2
Dưới đây là một số bộ lọc cho sự tốt lành của IE8 và IE9. Đầu tiên là IE8, thứ hai là chế độ tiêu chuẩn IE8 và # 3 xóa bộ lọc cho IE9 +. Xin chào, tôi không thể nhận được các bình luận stackoverflow để ngừng lọc các bản hack CSS của mình, vì vậy hãy xem jsfiddle.net/GrPyj/9
Justin Grant

73

Tôi đang sử dụng đoạn mã sau để viết văn bản dọc trong một trang. Firefox 3.5+, webkit, opera 10.5+ và 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);
}

Hoạt động trên Chrome 5. Không hoạt động trên chế độ "quirks" IE 8; không hoạt động trên "Chế độ tiêu chuẩn IE8".
Asaf Bartov

Cảm ơn vì đã cho tôi biết. Vui lòng gửi nó ở đây, nếu bạn tìm cách có Văn bản dọc trong IE ở chế độ quirks.
Choesang

15

Một giải pháp khác là sử dụng một nút văn bản SVG được hỗ trợ bởi hầu hết các trình duyệt .

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

Bản trình diễn: https://jsfiddle.net/bkymb5kr/

Thông tin thêm về văn bản SVG: http://tutorials.jenkov.com/svg/text-element.html


giải pháp tuyệt vời, tốt hơn nhiều so với những giải pháp trước - không có vấn đề gì với định vị văn bản sau khi xoay
Picard

9

Các CSS chế độ Viết Module giới thiệu dòng trực giao với văn bản dọc.

Chỉ cần sử dụng writing-modetài sản với giá trị mong muốn.

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
sidays-rl như bây giờ không được hỗ trợ rộng rãi, tôi muốn giới thiệu dọc-rl và xoay đến 180 độ
godblessstrawberry

6

Tôi đã điều chỉnh điều này từ http://snook.ca/archives/html_and_css/css-text-rotation :

<phong cách>
    .Rotate-90
    {
        hiển thị: khối;
        vị trí: tuyệt đối;
        phải: -5px;
        đầu trang: 15px;
        -webkit-Transform: xoay (-90deg);
        -moz-Transform: xoay (-90deg);
    }
</ phong cách>
<! - [nếu IE]>
    <phong cách>
        .Rotate-90 {
            bộ lọc: progid: DXImageTransform.Microsoft.BasicImage (rotation = 3);
            phải: -15px; trên cùng: 5px;
        }
    </ phong cách>
    <! [endif] ->

5

Tôi đã gặp vấn đề khi cố gắng thực hiện bằng CSS thuần túy - tùy thuộc vào phông chữ, nó có thể trông hơi rác. Để thay thế, bạn có thể sử dụng SVG / VML để làm điều đó. Có những thư viện giúp làm cho nó vượt qua trình duyệt một cách dễ dàng, ví dụ như RaphaelExtJS . Trong ExtJS4, mã trông như thế này:

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

Điều này sẽ hoạt động trong IE6 + và tất cả các trình duyệt hiện đại, tuy nhiên, thật không may, tôi nghĩ rằng bạn cần ít nhất FF3.0.


1
Yêu thích sự khác biệt giữa IE6 + và tất cả các trình duyệt hiện đại - nó đọc như thể bạn đang nói bất kỳ phiên bản IE nào không hiện đại :)
ClarkeyBoy

1
@ClarkeyBoy Tôi chỉ nói rằng IE10 gần như tăng tốc với các trình duyệt khác và chỉ vì kết xuất gpu bắt buộc và bố cục lưới. Bạn thực sự không thể xem IE một trình duyệt hiện đại, bởi vì nó cập nhật x3-x10 chậm hơn mọi trình duyệt khác.
skmasq

Đặt cược tốt nhất là sử dụng tệp SVG hoặc JS này, vì bạn có thể thấy rằng việc sử dụng thuộc tính biến đổi CSS có thể không tương thích với các trang được thiết kế đáp ứng của bạn.
b01

5

Nếu bạn sử dụng Bootstrap 3, bạn có thể sử dụng một trong những mixins của nó:

.rotate(degrees);

Thí dụ:

.rotate(-90deg);

1
Vẫn hoạt động, nhưng lưu ý rằng: Tất cả các mixin của nhà cung cấp không được chấp nhận kể từ phiên bản 3.2 do việc giới thiệu Autoprefixer trong Gruntfile của chúng tôi. Chúng sẽ bị xóa trong v4.
yishaiz

4

Giải pháp của tôi sẽ hoạt động trên Chrome, Firefox, IE9, IE10 (Thay đổi độ theo yêu cầu của bạn):

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.