说说html <p>元素的文本换行

本文详细探讨了HTML中<p>元素的作用,它如何实现文本的自动换行,以及在网页布局中使用<p>元素进行段落划分的重要性。

今天通过measureText()方法计算文字宽度,想实现文字左右滑动翻页的效果。却发现某些地方老是不对,后来才发现是换行规则在作怪。

这里就不说word-wrap和word-break这两个css样式了,因为问题与它们无关,姑且保持默认。另外下面的内容都是在指定浏览器下测试,其他浏览器不保证一致。

 

1. 标点不在行首

这是众所周知的规则,如果自动换行时发现标点在行首,会向前寻找非标点字符作为新行的开始,除非向前找了一行都没找到不是标点的字符。如图。

句号那里为了保证所有句号都不在行首,只能把前面的拿下来做行首,第一个感叹号处同理。但后面感叹号太多了,无法保证每一个都不在行首,所以没办法,浏览器只能强行拆行了。

但“标点”的范围是怎么定义的呢?不同的浏览器的实现有所不同。但一般的,至少下面这些标点不能在行首(包括但不限于):

. , : ; ! ? " ' ) ] } |。?!,、;:”’)》〉】』」﹄〕…

 不知道你有没有发现,成对出现的标点只有闭合的部分才不允许出现在行首,而像[、(、【之类的开始标点是允许出现在行首的。这条规则基本上通用。

值得注意的是,对于中文左引号(包括单双左引号),各浏览器的处理是不一致的。测试了Edge,Chrome 75.0,Firefox 67.0,IE11,除了Firefox67.0,其它浏览器都不允许中文左引号在行首。

2. 引号不在行末

相比起第一条,这条规则要陌生得多。

对于中文左引号,各浏览器的行为基本一致,都禁止左引号在行末。但经测试,在Firefox 67.0中,中文右引号或者英文引号却允许出现在行末,而其它浏览器则一视同仁。

 

对引号的处理最有争议,这里再总结一下。

各浏览器对引号的处理
 行首行末
浏览器英文引号中文左引号中文右引号英文引号中文左引号中文右引号
Chrome 75.0不允许不允许不允许不允许不允许不允许
Firefox 67.0不允许不允许不允许
Edge不允许不允许不允许不允许不允许不允许
IE11不允许不允许不允许不允许不允许不允许

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值