惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
美团技术团队
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
有赞技术团队
有赞技术团队
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
月光博客
月光博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活
使用CSS text-combine-upright实现字符的横向合并 « 张鑫旭-...
张鑫旭,zhangxinxu · 2021-02-18 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=9875
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

狐狸亲吻

本文介绍一个大家可能不太了解的CSS属性,text-combine-upright

一、从垂直排版说起

垂直排版(writing-mode:vertical-lr)默认效果如下。

垂直排版效果

可以看到上面垂直排版段落中的数字都是90度旋转排列的。

这样的排列并不利于阅读,希望可以横着排列,此时大家可能会想到使用text-orientation属性,例如,在容器元素上设置:

p {
    text-orientation: upright;
    writing-mode: vertical-lr;
}

会有如下所示的效果:

text-orientation:upright效果示意

上面的数字虽然正立了,但是阅读起来还是有些吃力,尤其2021,阅读速度还不如默认的90度旋转排列的效果呢。

如果希望里面的数字都横过来排列,则可以试试text-combine-upright属性。

一、text-combine-upright简介

text-orientation属性可以让垂直排版中的局部区域的文字水平排版,同时多个水平排版字符占据的宽度和一个正常的字符一样。

text-combine-upright属性支持下面这些属性值:

/* 关键字值 */
text-combine-upright: none;
text-combine-upright: all;

/* 数字值 */
text-combine-upright: digits;     /* 按照2个数字算 */
text-combine-upright: digits 4;   

其中:

none
初始值。不连续横排。
all
试图水平排版框内所有连续字符,使它们占用框垂直线内单个字符的空间。
digits <integer>?
多少个连续数字认为是横着显示。默认是2,范围不能在2-4之外,否则认为是不合法。也就是最多只能让一个标签内4个字符水平排列。

然后digits 2这样的语法其实很厉害,下图就是MDN文档上示意的理论状态下digits 2的排版效果:

p {
    writing-mode: vertical-lr;
    text-combine-upright: digits 2;
    font: 36px serif;
}

digits 2效果示意

然而,根据我的实际测试,目前,Chrome 88以及Firefox 85以及Safari都不支持这个高级的语法。

因此,我们只能使用text-combine-upright:all进行水平排版,已知有如下HTML和CSS:

<p class="upright">我叫张鑫旭,<span>2021</span>年<span>2</span>月<span>18</span>日我<span>36</span>岁</p>
.upright {
    writing-mode: vertical-lr;
}
.upright span {
    text-combine-upright: all;
    /* forSafari */
    -webkit-text-combine: horizontal;
    text-combine-upright: digits 2;
}

效果如下截图:

text-combine-upright效果截图

眼见为实,您可以狠狠地点击这里:text-combine-upright与垂直排版demo

和普通水平排版的区别

重置span元素的排版方式也是可以让数字横向排列,例如:

.upright {
    writing-mode: vertical-lr;
}
.upright span {
    writing-mode: initial;
}

但是,这个水平排版所占据的宽度是每个字符累加的宽度,而不是单个字符宽度,例如下图箭头示意:

重置writing-mode后的排版

text-combine-upright实现的水平排版,则是会让2~4个字符(包括中文)全部所在一个字符宽度中。

三、IE和Safari的兼容

text-combine-upright属性的兼容性如下表所示:

text-combine-upright兼容性

其中:

IE浏览器使用的是-ms-text-combine-horizontal这个属性,语法如下所示:

-ms-text-combine-horizontal: none | all | [ digits <integer> ? ]

text-combine-upright属性一致。

然后Safari浏览器使用的是-webkit-text-combine属性,仅支持nonehorizontal这两个属性值。

因此,实际使用的代码会是下面这样的:

.target {
    -ms-text-combine-horizontal: all;
    -webkit-text-combine: horizontal;
    text-combine-upright: all;
}

下面就是上面的demo页面在IE11浏览器下的效果:

IE11浏览器下效果

可以看到单个数字的时候,字形变得宽大厚重了,这个是和其他现代浏览器不一样的表现。

四、水平排版中的应用

text-combine-upright属于小众CSS属性,实用的场景有限,首先需要垂直排版,然后目标应该是数字或者字符长度不超过4个词组,这样一看,也就年月日的显示需要这样了。

但是,如果我们脱离排版,以布局的角度思考这个属性。

那就可以实现任意2~4个字符按照1个字符宽度渲染排版的效果,这个说不定会让text-combine-upright属性迸发出全新的生命力。

举个例子,“大家好,我叫张鑫旭,简写为zxx”,这句话中的'zxx'现在是3字符宽度,使用text-combine-upright可以让其最多占据一个字符宽度。

大家好,我叫张鑫旭,简写为<my-name>zxx</my-name>。
my-name {
    writing-mode: tb-lr;
    writing-mode: vertical-lr;
    -ms-text-combine-horizontal: all;
    -webkit-text-combine: horizontal;
    text-combine-upright: all;
}

实时渲染效果如下所示(如果无效果,可能访问的是盗版):

大家好,我叫张鑫旭,简写为zxx

这么一看,text-combine-upright是不是还有挺有用的?脱离了垂直排版,可以让特殊名词合并显示,例如S*,TMD等。

本文为原创文章,欢迎分享,勿全文转载,如果实在喜欢,可收藏,永不过期,且会及时更新知识点及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=9875

(本篇完)