关于HTML dir属性的疑惑

dir属性用于定义文本方向,但在使用的过程中,有一些奇怪的问题,比如:

<p dir="rtl">qq.</p>

上面这个代码,浏览器会输出.qq,小数点会被挪到前面;

但如果在小数点后面加上一些内容,比如:

<p dir="rtl">qq.123</p>

浏览器则会原样输出qq.123,小数点没有被挪到最前面了,为什么会这样呢

阅读 2.3k
2 个回答

这个可能跟浏览器对语系的解释有关,非右向左的语系不会更改文本方向:

<p dir="rtl">阿拉伯语من فضلكqq.aa</p>
<p dir="rtl">中文qq.aa</p>

screen
而为什么小数点会被放置在前可能跟分词有关,因为标点符号这东西比较难认定是哪个语系,所以如果标点作为文本结尾的话会将其独立看待然后应用dir,你可以在.之后继续添加其他标点符号就也会放到前面,但如果是中文或英文或者其他非右向语言的文字都不会。
以上是个人猜测

image.png
通过控制台发现一个css属性:unicode-bidi: isolate
image.png
image.png
MDN 上面的说明文档比较复杂,而且有些难懂,通过修改unicode-bidi的值来自行解释相关属性的意义发现,在文本的dir='rtl'时代表是文本从右向左开始书写,文本默认的unicode-bidi: isolate将内容分成多个U+FFFC Object Replacement Character,这个时候的双向算法是将其看成图片qq.两部分,而qq.123则又看成了一个图片,所以仅从p标签的rtl来看,是只进行从右向左排列,内部双向算法看成整体。
image.png
通过修改unicode:bidi: bidi-override,则发现qb.123又根据U+FFFC Object Replacement Character拆分成多个图片看待,为证明这一想法,把qq.123改成了qb.123

理解尚浅,可能偏颇,具体你可以再参考下MDN手册里相关的语法解释https://developer.mozilla.org...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题