深入研究 CSS 文本换行

简介: 深入研究 CSS 文本换行

今天来研究一下 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 将使浏览器使用系统的默认换行行为。因此,对于英语和其他相关书写系统,换行符将出现在空格和连字符处。

00000.webp.jpg

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


(2)anywhere


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

0000.webp.jpg

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

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

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

效果如下:

000.webp.jpg

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

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

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


00.webp.jpg

(3)break-word

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

0.webp.jpg

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

(4)浏览器兼容性

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

1.webp.jpg


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 将应用默认的断行规则:

1.webp (1).jpg

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

(2)break-all

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

2.webp.jpg

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

(3)keep-all

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

3.webp.jpg

(4)浏览器兼容性

4.webp.jpg


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 时,可以防止文本自动换行

5.webp.jpg

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

(2)pre

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

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

样式设置如下:

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

显示效果如下:

6.webp.jpg

(3)浏览器兼容性

7.webp.jpg


4. line-break


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

(1)anywhere

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

8.webp.jpg

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

(2)浏览器兼容性

9.webp.jpg


5. hyphens


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


<plang="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;
}

显示效果如下:

11.webp.jpg

(2)浏览器兼容性

12.webp.jpg


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; 可以用于使用连字符连接单词。

参考:

codersblock.com/blog/deep-d…blog.logrocket.com/guide-word-…

相关文章
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
238 0
|
9月前
|
自然语言处理 前端开发 JavaScript
Playwright系列课(2) | 元素定位四大法宝:CSS/文本/XPath/语义化定位实战指南
本文是Playwright系列第二课,详解元素定位四大核心技术:CSS选择器、文本定位、XPath和语义化定位,结合实战演示各方法应用场景。重点解析Playwright智能定位器(Locator)的独特优势——自动等待与重试机制,通过预检元素可操作性(可见/可点击)有效规避网络延迟导致的脚本失效,显著提升自动化测试稳定性。
|
前端开发
Css实现文本超出长度隐藏并用三个点结尾
Css实现文本超出长度隐藏并用三个点结尾
362 17
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
784 3
前端基础(五)_CSS文本文字属性、背景颜色属性
CSS3几何透明层文本悬停变色源码
CSS3几何透明层文本悬停变色源码是一款基于css3 svg制作的背景图片鼠标悬停几何形状透明层变色显示文本内容
146 0
CSS3几何透明层文本悬停变色源码
|
前端开发
【前端web入门第三天】02 CSS字体和文本
本文详细介绍了CSS中字体和文本的相关属性。字体部分涵盖字体大小、粗细、样式、行高、字体族及`font`复合属性,通过具体示例展示了如何设置和使用这些属性。文本部分则讲解了文本缩进、对齐方式、修饰线及文字颜色等属性,并提供了实用的代码示例。此外,还简要介绍了调试工具中的一些细节,如错误属性标识和属性生效状态的控制。
364 28
|
前端开发 容器
CSS 中几种常用的换行方法
CSS 中几种常用的换行方法
628 2
|
前端开发
使用CSS样式化占位文本
使用CSS样式化占位文本
175 0
|
前端开发
如何使用 CSS 防止换行
如何使用 CSS 防止换行
192 0
|
前端开发 容器
CSS实现多行文本的展开收起
CSS实现多行文本的展开收起
792 0

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    449
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    350
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    335
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    226
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    449
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    621
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    925
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    238
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    757
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    417