dir
属性用于定义文本方向,但在使用的过程中,有一些奇怪的问题,比如:
<p dir="rtl">qq.</p>
上面这个代码,浏览器会输出.qq
,小数点会被挪到前面;
但如果在小数点后面加上一些内容,比如:
<p dir="rtl">qq.123</p>
浏览器则会原样输出qq.123
,小数点没有被挪到最前面了,为什么会这样呢
dir
属性用于定义文本方向,但在使用的过程中,有一些奇怪的问题,比如:
<p dir="rtl">qq.</p>
上面这个代码,浏览器会输出.qq
,小数点会被挪到前面;
但如果在小数点后面加上一些内容,比如:
<p dir="rtl">qq.123</p>
浏览器则会原样输出qq.123
,小数点没有被挪到最前面了,为什么会这样呢
通过控制台发现一个css属性:unicode-bidi: isolate
MDN 上面的说明文档比较复杂,而且有些难懂,通过修改unicode-bidi
的值来自行解释相关属性的意义发现,在文本的dir='rtl'
时代表是文本从右向左开始书写,文本默认的unicode-bidi: isolate
将内容分成多个U+FFFC Object Replacement Character
,这个时候的双向算法是将其看成图片qq
和.
两部分,而qq.123
则又看成了一个图片,所以仅从p标签的rtl来看,是只进行从右向左排列,内部双向算法看成整体。
通过修改unicode:bidi: bidi-override
,则发现qb.123
又根据U+FFFC Object Replacement Character
拆分成多个图片看待,为证明这一想法,把qq.123
改成了qb.123
,
理解尚浅,可能偏颇,具体你可以再参考下MDN手册里相关的语法解释https://developer.mozilla.org...
10 回答11.6k 阅读
2 回答7.1k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
2 回答4.1k 阅读✓ 已解决
5 回答2.2k 阅读
3 回答2.7k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
这个可能跟浏览器对语系的解释有关,非右向左的语系不会更改文本方向:
而为什么小数点会被放置在前可能跟分词有关,因为标点符号这东西比较难认定是哪个语系,所以如果标点作为文本结尾的话会将其独立看待然后应用dir,你可以在.之后继续添加其他标点符号就也会放到前面,但如果是中文或英文或者其他非右向语言的文字都不会。
以上是个人猜测