这更多是一种好奇心。在使用多语言Web应用程序时,我注意到某些字符(如标点符号(!?。;,))位于块元素的末尾,就好像它们放在开头一样,而当书写方向是从右到左时(因为我不会说某些亚洲语言)。
换句话说,字符串
Hello, World!
呈现为
!Hello, World
与
direction: rtl
放在div块中时如果将文本分为两部分并使用不同的颜色,则这一点变得更加明显:结尾的连续文本块在两个单独的区域中呈现:
http://jsfiddle.net/22Qk9/
这种行为的意义是什么?我猜这一定是浏览器自动处理的从右到左语言的所有特性,所以我不需要关心它,还是应该?
最佳答案
原因是感叹号“!”拥有BiDi类O.N. (“其他中立语言”),这意味着它有效地适应了周围文本的方向性。因此,在示例情况下,它位于文本之前的左侧。对于从右到左书写的语言,这是完全正确的:终止标点符号出现在末尾,即左侧。
通常,对于使用从右到左书写的语言的文本,只对它们使用CSS代码direction: rtl
,或者最好对HTML属性dir=rtl
。对于他们来说,这种行为是解决方案,而不是问题。
如果您仅将direction: rtl
或dir=rtl
用于特殊效果(例如使表列从右到左排列),则需要考虑其含义。例如,在表格情况下,您需要将表格的每个单元格的方向设置为ltr
(除非您希望将它们主要显示为从右到左的文本)。
例如,如果您在阿拉伯文字块中引用了英文句子,则需要将包含英文文本的元素的方向性设置为ltr
,例如
<blockquote dir=ltr>Hello, World!</blockquote>
W3C文档What you need to know about the bidi algorithm and inline markup中的用例6讨论了一个类似的用例(只在英语文本中用阿拉伯语表示)(不过,与W3C建议相反,它有一些奇怪之处,例如对引用的文本使用
cite
标记)。关于html - 为什么在方向:rtl的开头显示结尾的标点符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20805176/