ChatGPT解决这个技术问题 Extra ChatGPT

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

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

没有可用于交叉兼容性的纯 CSS。我所拥有的就是一切。你最好有一个图像。
垂直文本跨浏览器并不是那么困难。在 dns4.nl 上,有一个即使在歌剧中也可以使用的解决方案。我用所有版本测试了它,即 Mozilla 和 safari(也是冠)。链接是:dns4.nl/pagina/html_code/vertikale_tekst.htmlxkcd150 的评论:>问题是,这依赖于 canvas 元素。 – xkcd150 Sep 20 at 10:13 不,该过程不依赖于 canvas 元素。
这里有一个教程,它解释了如何在 IE 中进行各种文本转换(包括您的问题的解决方案):) useragentman.com/blog/2010/03/09/… 希望对您有所帮助!
以下是我使用的技术的细分:scottgale.com/blog/css-vertical-text/2010/03/01
我可以按照此页面上的说明成功旋转,但无法打印该页面。文本向后打印。这个网站对我非常有用:sevenwires.com/play/UpsideDownLetters.html

R
Robert K

使用最新信息(来自 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 有一个Matrix filter(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版本,使用更简单,但页面打印出来时看起来不对:writing-mode: tb-rl;过滤器:翻转翻转;
微软“过滤器:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);”
不幸的是,IE9(在标准模式下!)同时应用了 -ms-transform-* 样式和过滤器。在兼容性视图中,它只应用过滤器。
确保您的文本是块元素,即使用 display:inline-block 或类似元素
这里有一些 IE8 和 IE9 的过滤器。第一个是 IE8,第二个是 IE8 标准模式,#3 去掉了 IE9+ 的过滤器。 Arrrgh,我无法让 stackoverflow 评论停止过滤掉我的 CSS hack,请查看 jsfiddle.net/GrPyj/9
D
Drew Noakes

我正在使用以下代码在页面中编写垂直文本。 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“怪癖”模式;确实适用于“IE8标准模式”。
谢谢你让我知道。如果您找到一种在 IE 中在 quirks 模式下设置垂直文本的方法,请在此处发布。
K
Krisztián Balla

另一种解决方案是使用 SVG 文本节点,即 supported by most browsers

<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


很好的解决方案,比以前的解决方案好得多 - 旋转后文本定位没有问题
O
Oriol

CSS Writing Modes 模块引入了带有垂直文本的正交流。

只需使用具有所需值的 writing-mode 属性。

跨度{边距:20px; } #vertical-lr { 写作模式:vertical-lr; } #vertical-rl { 写作模式:vertical-rl; } #sideways-lr { 写作模式:sideways-lr; } #sideways-rl { 写作模式:sideways-rl; } ↑ (1) vertical-lr 至
↑ (2) vertical-lr 至
↑ (3) vertical-lr 至
↓ (1) vertical-rl 至
↓ (2) vertical-rl 至
↓ (3) vertical-rl 至
↓ (1) sideways-lr 至
↓ (2) sideways-lr 至
↓ (3) sideways-lr 至
↓ (1) sideways-rl 至
↓ (2) sideways-rl 至
↓ (3) sideways-rl 至


sideways-rl 目前还没有得到广泛支持,我建议使用 vertical-rl 并旋转到 180 度
j
john

我从 http://snook.ca/archives/html_and_css/css-text-rotation 改编了这个:

<style>
    .Rotate-90
    {
        display: block;
        position: absolute;
        right: -5px;
        top: 15px;
        -webkit-transform: rotate(-90deg);
        -moz-transform: rotate(-90deg);
    }
</style>
<!--[if IE]>
    <style>
        .Rotate-90 {
            filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
            right:-15px; top:5px;
        }
    </style>
    <![endif]-->

M
Mark Rhodes

我在尝试使用纯 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。


喜欢 IE6+ 和所有现代浏览器之间的差异 - 读起来好像你在说任何版本的 IE 都不是现代的 :)
@ClarkeyBoy 我想说只有 IE10 几乎可以跟上其他浏览器的速度,只是因为强制 gpu 渲染和网格布局。您不能真正将 IE 称为现代浏览器,因为它的更新速度比其他所有浏览器慢 x3-x10 倍。
最好的办法是使用 SVG 文件或这个 JS,因为您可能会发现使用 CSS 转换属性可能与您的响应式设计页面不兼容。
A
Andreas Fröwis

如果您使用 Bootstrap 3,您可以使用其中的一种混合:

.rotate(degrees);

例子:

.rotate(-90deg);

仍然有效,但请注意:由于在我们的 Gruntfile 中引入了 Autoprefixer,所有供应商的 mixin 从 v3.2.0 起都已弃用。它们将在 v4 中被删除。
D
Devner

我的适用于 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*/      
}

a
aGuegu

如果 CSS writing-mode: sideways-lr 是您喜欢的,并且您碰巧遇到了基于 chromium/chrome 的浏览器。你可以试试

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

所以现在所有的现代浏览器都支持它。

参考:https://bugs.chromium.org/p/chromium/issues/detail?id=680331#c4