12

我试图在 rtl HTML 页面中显示一个负数。

标签似乎没有回应我的direction: ltr

我写了一个jsFiddle来显示相反的场景(试图从右到左显示)。

4

3 回答 3

14

添加unicode-bidi: embed;到您的 CSS。应该做的伎俩 -更新小提琴

你可以在这里找到用法

于 2012-09-23T13:42:48.190 回答
7

direction: ltr不把减号放在数字左边的原因是周围的字符是从右到左的字符,使得像数字和减号(或连字符)这样的“中性”字符具有这种方向性。该direction属性影响盒子的布局方向和相关问题,而不是文本的书写方向。

考虑以下:

<p>א <label id="ProfitShk" class="labelVal">-9 ₪&lt;/label> ת
<p>a <label id="ProfitShk" class="labelVal">-9 ₪&lt;/label> b

在第一种情况下,连字符出现在数字 9 的右侧,遵循周围文本的书写方向。第二种情况,顺序相反,因为周围的字符是拉丁字母,具有固有的从左到右的方向性。

这是一个棘手的问题,希伯来语中的某些页面似乎使用了将连字符放在 HTML 源代码中的数字后的技巧,因此当应用从右到左书写时,连字符出现在数字的左侧。

更合适的方法是:

  1. unicode-bidi: bidi-overrideCSS 中与direction. 这意味着在内容中忽略固有的方向性,并direction应用 指定的顺序。
  2. unicode-bidi: embedCSS 中与direction. 这会创建一个“方向性孤岛”,其中周围的文本不会影响方向性。当元素内容仅包含“中性”字符时,该direction属性设置文本方向。
  3. 在 HTML 中使用<bdo>元素,带有dir属性。这是方法 2 的 HTML 对应物,更好的是,这不是关于样式表示建议(这是 CSS 的用途和最擅长的),而是关于让事情正确,处理方向性方面的一些基本问题。
  4. 在字符串前后使用从左到右和从右到左的标记。它们可以在 HTML 中分别表示为&lrm;&rlm;。这使得字符串之前的最后一个字符成为从左到右的标记,如果它只包含“中性”字符,则导致它从左到右显示。

这是一个复杂问题的简化介绍。无论如何,使用<bdo>可能是最好的方法。在所有方法中,方向性的设置都应限制为尽可能小的字符串,例如示例中的 -9:

<p>א <label id="ProfitShk" class="labelVal"><bdo dir="ltr">-9</bdo> ₪&lt;/label> ת

用作减号的字符实际上应该是 Unicode 减号“-” U+2212 MINUS SIGN,在 HTML 中表示为&minus;,但这不会影响方向性问题。

于 2012-09-23T20:12:33.860 回答
2

除了 Henrik 的回答之外,我还会在减号之前添加一个 LRM 控制字符,如下所示:

<label id="ProfitShk" class="labelVal">&lrm;-9 ₪&lt;/label>​​​​​​​​​​​​​​​​​​​​​​

这样,减号就会放在 9 之前(这可能是你想要的)

这个微软文档解释了 LRM 控制字符以及其他控制字符。

于 2012-09-23T23:17:25.330 回答