当文本行以数字开头时,在RTL模式下,右侧会显示一个数字.为什么?



尝试将以下html片段粘贴到浏览器中的新选项卡中:

data:text/html,<html dir=rtl>5 little ducks went out to play.

文本输出,右对齐,如下所示:

.小鸭子出去玩5

为什么5被移动到行的末尾?

如果我将5更改为非数字值,例如5a,则文本显示为我所期望的:

.5a小鸭子外出玩

我已经在Ubuntu上的Chrome和Firefox中复制了它,所以我认为它不是浏览器错误。

我的语言环境是en-US,编码设置为UTF-8。

再举几个例子,这就显得更加奇怪了。如果句子以一个单词开头,事情也会像预期的那样出现:

5只小鸭子出去玩

我想随之而来的是一个类似的问题,即为什么这个时期也被移动了。

最后,如果我在css中抛出一个bidi-override,则所有内容都会反转,但顺序正确:

data:text/html,<html dir=rtl><div style="unicode-bidi: bidi-override;">5 little ducks went out to play.

.yalp ot tuo tnew skcud elttil 5

dir属性设置方向中立文本的方向性,以及整体布局方向(例如,表列的布局顺序)。拉丁字母不是方向中立的;它们具有很强的左右方向性。

就方向性而言,内容5 little ducks went out to play.由三部分组成:字符5、带空格的拉丁字母串和字符.。当从右到左的方向性应用于此时,可以按顺序从右到右得到这些部分。

当用5a替换5时,方向中立的5由从左到右的字符a控制,因此字符串5a被视为属于从左到左的字符序列。

当你有The 5 little时,中性的5再次被加入到从左到右的帮派中,因为它位于两个从左到左的强字符串之间。

这一切都在Unicode BiDi规则中进行了描述。

当您在CSS中设置unicode-bidi: bidi-override,或者等效地在HTML中使用<bdo>元素时,您将覆盖整个Unicode BiDi算法。所有与字母相关的固有方向性都被忽略了。无论怎样,字符都严格从左到右或从右到左排列。

本地语言和编码与此无关。

寓意是,你通常应该只为传统上从右到左书写的文本设置方向性,如希伯来语、阿拉伯语或波斯语。如果你只是出于随意布局的目的而使用方向性,请小心;它可能会咬你。如果您混合了从左到右或从右到左的文本,请使用嵌入(unicode-bidi: embed),而不是强力方向性覆盖。

最新更新