如何使用CSS跨浏览器绘制垂直文本?


243

我想通过跨浏览器(> = IE6,> = Firefox 2,任何版本的Chrome,Safari或Opera)将单个文本单词旋转90度。如何才能做到这一点?


4
没有可用于交叉兼容性的纯CSS。我所拥有的就是一切。最好有图像。
罗伯特·K

1
垂直文本跨浏览器不是那么困难。在dns4.nl上有一个即使在歌剧中也可以使用的解决方案。我测试了所有版本,即mozilla和safari(也称为Crown)。链接是:dns4.nl/pagina/html_code/vertikale_tekst.htmlxkcd150的注释:>问题是,这依赖于canvas元素。– xkcd150 9月20日,10:13不,该过程不依赖于canvas元素。

这是一个教程,说明即使在IE中也如何进行各种文本转换(包括对问题的解决方案):) useragentman.com/blog/2010/03/09/…希望能帮到您!
Juanma格雷罗

这是我使用的技术的细分:scottgale.com/blog/css-vertical-text/2010/03/01

我可以按照此页面上的说明成功旋转,但无法打印该页面。文本被向后打印。这个网站对我非常有用:sevenwires.com/play/UpsideDownLetters.html
Nahuel

Answers:


213

使用最新信息(来自CSS Tricks)更新了此答案。Matt和Douglas指出了过滤器的实现,对此表示感谢。

.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具有矩阵过滤器(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为幽灵熊图标;)我在进行这项工作时遇到了很多麻烦,最终不得不更改DOM结构并以负余量进行伪造。一个更易于使用的IE版本,但在页面打印出来时看起来不正确:写作模式:tb-rl; 过滤器:flipv fliph;
RMorrisey 2010年

12
Microsoft“过滤器:progid:DXImageTransform.Microsoft.BasicImage(rotation = 3);”
马特

1
不幸的是,IE9(在标准模式下!)同时应用了-ms-transform- *样式过滤器。在兼容性视图中,它仅应用过滤器。
罗姆洛克2013年

3
确保您的文本是一个块元素,即使用display:inline-block或类似内容
James Westgate

2
这是IE8和IE9优点的一些过滤器。第一个是IE8,第二个是IE8标准模式,并且#3删除了IE9 +的过滤器。Arrrgh,我无法获得stackoverflow注释来停止过滤CSS hack,因此请看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);
}

适用于Chrome5。不适用于IE 8“怪癖”模式;确实适用于“ IE8标准模式”。
Asaf Bartov 2010年

谢谢你让我知道。如果您找到一种在怪异模式下在IE中使用垂直文本的方法,请在此处发布。
Choesang


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尚未得到广泛支持,我建议您使用vertical-rl并旋转至180度
godblessstrawberry

6

我从http://snook.ca/archives/html_and_css/css-text-rotation改编了此代码:

<样式>
    .Rotate-90
    {
        显示:块;
        位置:绝对;
        右:-5px;
        顶部:15px;
        -webkit-transform:旋转(-90deg);
        -moz-transform:旋转(-90deg);
    }
</ style>
<!-[如果是IE]>
    <样式>
        .Rotate-90 {
            过滤器:progid:DXImageTransform.Microsoft.BasicImage(rotation = 3);
            右:-15px; top:5px;
        }
    </ style>
    <![endif]->

5

我在尝试使用纯CSS进行处理时遇到了问题-根据字体的不同,它看起来可能有些垃圾。另外,您也可以使用SVG / VML来完成。有一些库可以使它轻松地跨浏览器运行,例如RaphaelExtJS。在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 2012年

1
@ClarkeyBoy我要说的是,只有IE10才能与其他浏览器几乎同步,并且仅是因为强制执行gpu渲染和网格布局。您无法真正校准IE的现代浏览器,因为它的更新速度是其他所有浏览器的x3-x10倍。
skmasq

最好的选择是使用SVG文件或此JS,因为您可能会发现使用CSS transform属性可能与响应式设计的页面不兼容。
2016年

5

如果使用Bootstrap 3,则可以使用其中之一的mixins:

.rotate(degrees);

例:

.rotate(-90deg);

1
仍然可以使用,但是请注意:由于v3.2.0中已弃用了所有供应商混合,这是由于在我们的Gruntfile中引入了Autoprefixer。它们将在v4中删除。
yishaiz 2015年

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.