我试图在 rtl HTML 页面中显示一个负数。
标签似乎没有回应我的direction: ltr
我写了一个jsFiddle来显示相反的场景(试图从右到左显示)。
direction: ltr
不把减号放在数字左边的原因是周围的字符是从右到左的字符,使得像数字和减号(或连字符)这样的“中性”字符具有这种方向性。该direction
属性影响盒子的布局方向和相关问题,而不是文本的书写方向。
考虑以下:
<p>א <label id="ProfitShk" class="labelVal">-9 ₪</label> ת
<p>a <label id="ProfitShk" class="labelVal">-9 ₪</label> b
在第一种情况下,连字符出现在数字 9 的右侧,遵循周围文本的书写方向。第二种情况,顺序相反,因为周围的字符是拉丁字母,具有固有的从左到右的方向性。
这是一个棘手的问题,希伯来语中的某些页面似乎使用了将连字符放在 HTML 源代码中的数字后的技巧,因此当应用从右到左书写时,连字符出现在数字的左侧。
更合适的方法是:
unicode-bidi: bidi-override
CSS 中与direction
. 这意味着在内容中忽略固有的方向性,并direction
应用 指定的顺序。unicode-bidi: embed
CSS 中与direction
. 这会创建一个“方向性孤岛”,其中周围的文本不会影响方向性。当元素内容仅包含“中性”字符时,该direction
属性设置文本方向。<bdo>
元素,带有dir
属性。这是方法 2 的 HTML 对应物,更好的是,这不是关于样式表示建议(这是 CSS 的用途和最擅长的),而是关于让事情正确,处理方向性方面的一些基本问题。‎
和‏
。这使得字符串之前的最后一个字符成为从左到右的标记,如果它只包含“中性”字符,则导致它从左到右显示。这是一个复杂问题的简化介绍。无论如何,使用<bdo>
可能是最好的方法。在所有方法中,方向性的设置都应限制为尽可能小的字符串,例如示例中的 -9:
<p>א <label id="ProfitShk" class="labelVal"><bdo dir="ltr">-9</bdo> ₪</label> ת
用作减号的字符实际上应该是 Unicode 减号“-” U+2212 MINUS SIGN,在 HTML 中表示为−
,但这不会影响方向性问题。
除了 Henrik 的回答之外,我还会在减号之前添加一个 LRM 控制字符,如下所示:
<label id="ProfitShk" class="labelVal">‎-9 ₪</label>
这样,减号就会放在 9 之前(这可能是你想要的)
这个微软文档解释了 LRM 控制字符以及其他控制字符。