深入研究 CSS 文本换行

article/2025/8/14 19:12:36

欢迎和号主【前端点线面】进群盘算法,此外本号干货满满:14个门类(100+篇原创)内容(又干又硬)《前端百题斩》pdf(助力薪资double)20+篇思维导图(知识系统化、记忆简单化),进摸鱼群

今天来研究一下 CSS 中的文本换行。正常情况下,在固定宽度的盒子中的中文会自动换行。但是,当遇到非常长的英文单词或者很长的URL时,文本可能就不会自动换行,而会溢出所在容器。幸运的是,CSS 为我们提供了一些和文本换行相关的属性;

  • overflow-wrap

  • word-break

  • white-space

  • line-break

  • hyphens

1. overflow-wrap

overflow-wrap 用来说明当一个不能被分开的字符串太长而不能填充其包裹盒时,为防止其溢出,浏览器是否允许这样的单词中断换行。其属性值有以下三种:

overflow-wrap: normal;
overflow-wrap: anywhere;
overflow-wrap: break-word;

(1)normal

属性值为 normal 将使浏览器使用系统的默认换行行为。因此,对于英语和其他相关书写系统,换行符将出现在空格和连字符处。

19442d8e33517c25a05b1354e78ad289.png

从图中可以看出,段落中有一个很长的单词溢出了容器,这是系统的默认换行行为。

(2)anywhere

使用值 anywhere 将在字符串之间的任意点来进行中断,仅当在其行上显示单词会导致溢出时,浏览器才会中断该单词。如果单词放在其行上时仍然溢出,它将在发生溢出的点处中断该单词。

bbfedca070807a6cfad57bb9b3490bf3.png

可以看到,使用 overflow-wrap:anywhere 将溢出的单词分解成文本块,这样就可以将其放入容器中。这里文本所在的容器宽度是固定的。

该属性会影响其所在元素的 min-content 属性大小计算。当width设置为min-content时很容易看出来:

.break-word {width: min-content;overflow-wrap: break-word;
}.anywhere {width: min-content;overflow-wrap: anywhere;
}

效果如下:

1c73405943b1fe4c096b2a96f735d7e8.png

可以看到,带有overflow-wrap:break-word 的元素计算出的 min-content 就像单词没有被破坏一样,因此它的宽度变成了最长单词的宽度。而带有 overflow-wrap:anywhere 的元素,由于在任何地方都可能发生中断,因此 min-content 最终成为单个字符的宽度。

注意,这种行为只有为文本所在容器的宽度设置为min-content时才会发挥作用,如果宽度设置为固定的值,那么anywherebreak-word 的表现是一致的。

另外需要注意,目前有些浏览器不支持该属性:

abcd9ea1b224fb68935347ca9574cc38.png

(3)break-word

break-word 属性表示如果行内没有多余的地方容纳该单词到结尾,则那些正常的不能被分割的单词会被强制分割换行。

a1340313be51ee575b9157f94e20cac5.png

可以看到,文本在长单词的某个地方自动换行了。如果文本所在容器设置了固定的宽度,就会在长单词溢出的地方换行。

(4)浏览器兼容性

overflow-wrap 属性就是原来的word-wrapword-wrap最初是一个没有前缀的Microsoft扩展。它不是CSS标准的一部分,尽管大多数浏览器都使用word-wrap这个名称来实现它。根据CSS3规范草案,浏览器应将word-wrap视为overflow-wrap属性的遗留名称别名,以确保兼容性。

03eb12722ce7018f20a39db45a4abdd8.png

2. word-break

word-break 属性用于指定怎样在单词内进行断行。我们可以使用该属性在内容发生溢出的确切位置拆分单词并将其换行到下一行。下面是 word-break的属性值:

word-break: normal;
word-break: break-all;
word-break: keep-all;
word-break: break-word;

需要注意,break-word 属性值已经被弃用,但是由于遗留原因,浏览器仍然支持它。指定该属性与同时使用word-break: normaloverflow-wrap: anywhere  的效果是一样的。

下面就来看看前三个属性:

(1)normal

word-break 属性的值设置为 normal 将应用默认的断行规则:

8ffb5eaba7db28cc31b7c2242e9451c7.png

可以看到,设置为 normal 时,和不设置word-break时的效果是一样的,这就是浏览器默认的断行行为。

(2)break-all

当属性值为 break-all 时,对于 non-CJK (CJK 指中文/日文/韩文) 的文本,可在任意字符间断行。

619a98d1f72f7c4cb9c0c67446f6813b.png

可以看到,长单词在溢出的位置将剩余的文本进行了换行。使用 break-all 将在英语和其他相关语言系统中发生溢出的确切位置在两个字符之间断开一个单词。但是,它不会对中文、日文和韩文文本应用相同的行为。因为 CJK 书写系统有自己的应用断点规则。

(3)keep-all

如果使用值 keep-all,即使内容溢出,浏览器也不会将分词应用于 CJK 文本。应用 keep-all 值的效果与非 CJK 书写系统的正常效果相同。简单来说就是,像英语这种 CJK 文本不会断行,像中文这种 Non-CJK 文本表现同 normal

680079ab751a299caf70e54935ba9aea.png

(4)浏览器兼容性

3d0af8440e9391f27ffc70b862c47a18.png

3. white-space

white-space 属性是用来设置如何处理元素中的空白。其属性值如下:

white-space: normal;
white-space: nowrap;
white-space: pre;
white-space: pre-wrap;
white-space: pre-line

下面来看看这些属性值都有哪些作用。

(1)nowrap

当我们将white-space的值设置为 nowrap 时,可以防止文本自动换行

909abe64308ba1e5903ce27d5d93c60d.png

可以看到,这里文本并没有换行,这时文本会在同一行上继续,直到遇到 <br> 标签为止。

(2)pre

当我们将white-space的值设置为pre时,文本之间的空白会被浏览器保留。其行为方式类似 HTML 中的 <pre> 标签。

<!-- 这个HTML的格式会导致额外的空白 -->
<p>What's worse, ignorance or apathy?I don't know and I don't care.
</p><p>What's worse, ignorance or apathy?I don't know and I don't care.</p><pre>What's worse, ignorance or apathy?
I don't know and I don't care.</pre>

样式设置如下:

p {white-space: pre;
}pre {/* <pre> 会设置 font-family: monospace, 这里将其重置 */font-family: inherit;
}

显示效果如下:

748c64c661257297cf0a33225cfc4e2a.png

(3)浏览器兼容性

3c43b579df96c84d38e350fb18862833.png

4. line-break

line-break属性可以用来处理如何断开带有标点符号的中文、日文或韩文文本的行。简而言之,该属性可以用来处理过长的标点符号。

(1)anywhere

可以使用 line-break: anywhere 来使长标点符号进行换行:

1aa4c99b6716bc4785dcd0206f414c75.png

可以看到,overflow-wrap: break-wordline-break:anywhere 能够保持内容被包含在容器内,但是 word-break: break-all 在有长标点符号时就会发生溢出。

(2)浏览器兼容性

ef1e15e871d590f8befa08ac34cbe300.png

5. hyphens

hyphens 属性告知浏览器在换行时如何使用连字符连接单词。可以完全阻止使用连字符,也可以控制浏览器什么时候使用,或者让浏览器决定什么时候使用。其断字规则由语言决定,因此需要告诉浏览器使用哪种语言。这是通过在 HTML 中指定lang属性来完成的:

<p lang="en">This is just a bit of arbitrary text to show hyphenation in action.</p>

(1)auto

hyphens 设置为 auto 时,浏览器可以自由地在适当的断字点自动断词:

p {-webkit-hyphens: auto; / * 用于 Safari */hyphens: auto;
}

显示效果如下:

e72a695387328bc944076537fbade7a3.png

(2)浏览器兼容性

df0611e1d40aad9bcdf7c057d8558106.png

6. 总结

  • 当文本所在容器的宽度固定时,可以使用 overflow-wrap: break-word;overflow-wrap: anywhere; 来实现文本的自动换行;如果容器宽度为 min-content,就只能使用 overflow-wrap: break-word; 实现文本换行;overflow-wrap: break-word;也可以用于长标点符号的换行。

  • word-break: break-all; 可以用于文本换行,但是该属性不能使长标点符号换行;

  • white-space: nowrap; 可以用于防止文本自动换行;

  • line-break: anywhere 可以用于将长标点符号进行换行;

  • hyphens: auto; 可以用于使用连字符连接单词。

参考:

https://codersblock.com/blog/deep-dive-into-text-wrapping-and-word-breaking/

https://blog.logrocket.com/guide-word-wrap-overflow-wrap-word-break-css/

··············· 执鸢者简介 ·················

看号主详细信息,来这

瞅一瞅

669edd708614874a14b156637d184693.png

畅所欲言交流

【1】前端百题斩系列

【2】Vue系列

【3】React系列

【4】前端基础系列

【5】基础知识

【6】浏览器系列

【7】构建工具系列

【8】网络系列

【9】Node系列

【10】源码系列

【11】前端有意思

【12】手撕算法系列

【13】个人总结

【14】杂科


http://chatgpt.dhexx.cn/article/dJi0naQn.shtml

相关文章

竣达技术丨智能温湿度检测单元

一、概述 该产品用于环境温湿度监测&#xff0c;同时支持1路输入扩展可接烟感漏水等开关量设备&#xff0c;支持0.96寸128*64高分辨率OLED显示 二、产品外观及尺寸 尺寸&#xff1a;57mm(L)*81mm(w)*32mm(H) 重量&#xff1a;60g 三、技术参数 1.内置高精度温湿度传感器和低…

物联网常见通信类型介绍

物联网领域常见通信类型 有线通信如下&#xff1a; RS485&#xff1a;两线制&#xff0c;差分信号传输&#xff0c;半双工通信&#xff0c;最大通信距离千米以上。 RS232&#xff1a;三线制&#xff0c;全双工通信&#xff0c;一般通信距离小于 10 米。 以太网&#xff1a;4 线…

串口、COM口、TTL、RS232、RS485区别详解

原贴地址&#xff1a;http://xilinx.eetrend.com/article/10712 1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。 2、接设备的时候&#xff0c;一般只接GND RX TX。不会接Vcc或者3.3v的电源线&#xff0c;避免与目标设备上的供电冲突…

do msgbox loop_【连载1】DDC模块 DO点与强电电气柜的接口形式

形式一、DDC的DO点直接输出 DDC 模块上的DO点(无源干接点信号)直接串到强电AC24V的二次回路中(强电箱内配有AC24V继电器及AC24V电源,DDC盘内不配置AC24V继电器),如下图所示: 形式二、DDC 的DO点接AC24V输出 强电电气箱内设计有DC24V继电器“1KA1”,但不提供DC24V电源,需要…

5G工业路由器

星纵智能UR75是一款精致小巧、性能强大的5G路由器。强大的硬件设计结合丰富的软件特性使UR75 能胜任各式各样的物联网/M2M应用。高速5G网络提供稳定可靠的连接能力,为您创造一个永不掉线的网络环境。 该产品内置4核高性能处理器,采用全网通通信模块与5个千兆网口,提供无可比…

UPS电源扩展功能一UPS干节点通讯接口扩展板,你了解吗?

UPS不间断电源的通信接口越来越多&#xff0c;而且因为 UPS非常易于扩展的特性&#xff0c;使用通信口的智能设备越来越多&#xff0c;成为一种潮流和趋势。UPS电源是机房设备中是非常重要的一个成员&#xff0c;其因它的电路简单&#xff0c;可靠性以及效率高&#xff0c;过载…

干接点与湿接点

&#xff08;1&#xff09;干接点的定义 无源开关&#xff1b;具有闭合和断开的2种状态&#xff1b;2个接点之间没有极性&#xff0c;可以互换。 常见的干接点信号有&#xff1a; 1&#xff09;各种开关如&#xff1a;限位开关、行程开关、脚踏开关、旋转开关、温度开关、液…

关于康耐德网络I\O模块、传感器NPN/PNP类型以及传感器湿接点/干接点的介绍

关于康耐德网络I\O模块、传感器NPN/PNP类型以及传感器湿接点/干接点的介绍 写这篇文章问题的起因 在工作中遇到的问题&#xff0c;使用的是康耐德网络I\O模块 型号 &#xff1a;C2000-A2-SD0404-AD3。输入信号使用的是松下 PX-441-P型光线传感器&#xff0c;刚开始对I\O模块输…

Arduino之干接点控制继电器取反实例

重点学习INPUT_PULLUP 目的&#xff1a; 控制电路中有一路自由干接点&#xff0c;设置为自由模式可以控制继电器中任何一路或多路的方法&#xff0c;本示例仅控制1路。 物联网干接点控制继电器取反 //关注 久爱物联网 jiuaiiot 微信公众号可远程体验 //变量定义 #define in_PI…

物联网控制入门8266-串口及干接点控制arduino源码分享

一、【准备】 1、arduino IDE 最新版 1.8.13 2、ESP8266-12S/12F模块 3、本示例是基于久爱物联网远程控制模块讲解&#xff08;4路输出1路输入RS485&#xff09; 4、其他有关知识分享链接 二、【代码分析】 /***************************** * 久爱物联网模块测试程序 * 1…

如何实现一个干接点(湿节点)控制四路继电器60种状态输出

一般情况下&#xff1a;一路输入对应一路输出&#xff0c;数字信号电平来控制输出继电器高低电平来实现开关 本博介绍如何实现一个干接点15*460种组合的控制方式&#xff1b;以四路输出为例。实现万能控制&#xff01; 实现思路&#xff1a; 通过网络指令来设置继电器的组合方…

干接点,湿接点

&#xff08;1&#xff09;干接点的定义 无源开关&#xff1b;具有闭合和断开的2种状态&#xff1b;2个接点之间没有极性&#xff0c;可以互换。 常见的干接点信号有&#xff1a; 1&#xff09;各种开关如&#xff1a;限位开关、行程开关、脚踏开关、旋转开关、温度开关、液…

什么是干接点、湿接点、源型、漏型、NPN、PNP

什么是干接点、湿接点、源型、漏型、NPN、PNP 干接点、湿接点 简单说&#xff0c;无源干接点就是信号发出方只需要提供一对无源触点即可&#xff0c;信号接收方内部自己形成电流回路&#xff0c;信号发出方的干接点只需要起到“断开”、“接通”这个回路的作用即可&#xff0c…

干接点(干节点)和湿接点(湿节点)的定义、使用场合和调理方法

干接点好像是俗称&#xff0c;但是&#xff0c;实际上&#xff0c;在工业控制领域中&#xff0c;已经是一个标准的名词了。 干接点的定义&#xff1a; 无源开关&#xff1b;具有闭合和断开的2种状态&#xff1b;2个接点之间没有极性&#xff0c;可以互换&#xff1b; 常见的干…

了解下继电器干节点,干接点,有源与无源

什么是干节点 继电器干节点指的是继电器触点中的一种类型&#xff0c;也叫做"干接点"或"干节点开关"。它是指在没有外部控制信号作用时&#xff0c;继电器触点处于断开状态&#xff0c;两个接点之间没有电气连接。只有在继电器接收到外部控制信号后&#…

【基础系列教程】项目八:震动传感器

震动传感器&#xff0c;我们从名字中应该就可以判断&#xff0c;传感器能够检测震动中的物体。我们用什么来做震动传感器呢&#xff1f;那就是滚珠开关。滚珠开关&#xff0c;其内部含有导电珠子&#xff0c;器件一旦震动&#xff0c;珠子随之滚动&#xff0c;就能使两端的导针…

Mixly16:震动报警器

震动报警器是以侦测物体振动来报警的传感器&#xff1b;适合用于柜员机、墙壁、玻璃、保险柜等&#xff0c;防止任何敲击和破坏性行为发生。生活中常常见到一种情况&#xff0c;电动助力车因为不小心的碰撞而发出刺耳的报警声&#xff0c;它就是采用了一种震动报警的装置&#…

Arduino 各种模块篇 震动模块 常开 震动传感器模块

以下是店家提供的一部分资料 一共就需要3根线 ——————————————————分割线———————————————————————— 用途:用于各种震动触发作用,报盗报警,智能小车,电子积木等。请注意这个模块在感应到小的震动时触发时间会很短,不够驱动继电器…