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

推荐订阅源

腾讯CDC
博客园 - Franky
MyScale Blog
MyScale Blog
L
LangChain Blog
Martin Fowler
Martin Fowler
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
量子位
A
About on SuperTechFans
C
Check Point Blog
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
V
Visual Studio Blog
Vercel News
Vercel News
B
Blog
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
U
Unit 42

张鑫旭-鑫空间-鑫生活

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排版为何强?瞧瞧多牛这换行 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2022-06-30 · via 张鑫旭-鑫空间-鑫生活

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

网页文字与换行

CSS这门语言中有各种各样的CSS属性和值来专门处理与文字排版换行相关的需求。

一、默认换行行为

在 Web 文字排版中,默认的换行行为如下。

1. 中文(CJK文字)

所有中文的文字内容都是换行点,例如,当宽度很小的时候,文字一柱擎天显示了:

一柱擎天

但是如果有标点符号,则情况发生了变化。

因为标点自带一些特别的换行特性。

例如逗号,句号,问号,逗号,感叹号就属于避头标点,是不能在开头显示的,称为避头标点。

例如上引号,上括号不能出现一行的尾部,称为避尾标点。

由于这种不能出现在开头或结尾的特性,使得这些标点在匹配这种情况的时候是不能换行的。

例如,下面的容器宽度很小的时候,也保持了两个汉字的宽度,原因在于最后的感叹号是避头标点,如果换行了,就会出现在一行的开头,这是不被允许的,因此,在“持”这个字后面显示了。

在所有的中文标点中,有个标点符号值得专门一提,这个标点就是中文的破折号。

当中文破折号连续书写的时候,虽然避首避尾规则各个浏览器下有所不同(见下图),但破折号内部不会换行是所有浏览器都保持一致的的。

破折号处理

2. 英文和数字(非CJK文字)

英文的单词由连续英文字母构成,因此默认是不会换行的,连续的数字也是如此,只有遇到空格(U+0020)或者短横线连接符(U+002d)才会换行。

因此,如果一段文字内容中都是英文体系的字符,没有空格和短横线,则就可能出现连续字符超过容器宽度的情况,如下图所示:

 超出容器宽度

下面看看上述这些默认的换行行为如何使用 CSS 进行改变。

二、中文内容不可换行

如果希望中文内容不能成为换行点,可以使用如下所示的 CSS 声明:

word-break:keep-all;

此设置不会影响英文内容,也就是英文句子该换行还是换行,只中文内容变得不会自动换行。

在精确排版场景中,有时候希望中文一行显示,比方说下面的例子。

在宽度自适应的表格下,如果表格宽度不是很富足,标题中文可能就会换行,实际上一行显示效果更好,此时就可以使用上面的 word-break:keep-all,效果如下图所示:

keep-all中文不换行

三、中文标点可换行

如果希望中文标点没有避头和避尾特性,可以使用下面的 CSS 声明:

line-break: anywhere;

此时的效果如下图所示:

line-break-anywhere示意

可以看到上引号出现在了一行的尾部,句号也跑到了一行的开头。

四、连续破折号可换行

在默认情况下,如果书写过于冗长的破折号,可能会出现破折号超出容器宽度的布局问题,例如:

破折号超出容器

这肯定不是我们希望看到的,此时,可以通过设置如下所示的 CSS 声明让连续破折号也换行。

word-wrap: break-word;

此时,破折号就会在容器的边缘自动换行,效果如下所示:

破折号换行示意

五、英文数字成为换行点

默认情况下,英文单词和连续的数字是无法换行的,此时我们可以使用如下所示的 CSS 声明使其强制换行。

word-break:break-all;

例如,一开始出现的连续英文字符超出容器的渲染效果:

 超出容器宽度

就会变成下图这样:

换行处理

六、空格不是换行点

默认情况下,英文句子都是在空格位置处换行,如果希望这些空格不再是换行点,可以使用下面的 CSS 声明:

white-space: nowrap;

例如,这是一段默认排版的文字:

空格换行

应用了 white-space:nowrap 后就会一行显示:

空格不会换行

由于在 Web 中,换行符都会按照空格进行解析,因此,当一段文字设置为 white-space:nowrap,中文也会在一行显示,因为让中文换行的这个换行符解析成了 white-space。

如果还是不理解,可以参考我之前这篇文章:“为什么white-space:nowrap可以让文字一行显示?

七、英文标点强制换行

某些英文表单具有不可换行特性,例如 i’m 这个单词,其中的单引号具有特殊含义,默认是不能换行的。

此时,我们可以设置如下所示的 CSS 声明,让这个单引号单独一行显示。

overflow-wrap: anywhere;

我们可以对比下 word-break:break-all 这个声明,就可以知道 overflow-wrap:anywhere 的作用了。
如下一段 HTML 和 CSS 代码:

<p class="p1">i'm a developer</p>
<p class="p2">i'm a developer</p>
p {
  width: min-content;
  border: 2px solid deepskyblue;
}
.p1 {
  overflow-wrap: anywhere;
}
.p2 {
  word-break: break-all;
}

此时的效果对比效果如下图所示:

英文标点换行

八、结语

从上面的案例可以看出,凡是 Web 中的换行规则都可以改变,无论是中文的还是英文的,灵活到超出你的想象,非常强大。

所以在文字内容排版这块,CSS 是计算机领域中无可争议的霸主气,什么 SVG 什么 canvas 根本就是望尘莫及。

当然,关于 CSS 文字排版,还有很多其他属性,以及还有很多上面出现过的属性的其他值。

限于篇幅,这里就不一一介绍了。

感谢大家的阅读,如果你觉得本文内容还不错,欢迎点赞,欢迎!

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

(本篇完)