在 HTML 中混合 RTL 和 LTR 文本
Mixing RTL and LTR text in HTML
.red {
color: red;
direction: rtl;
}
.green {
color: green;
direction: rtl;
}
p {
direction: ltr;
}
<p>Example:
1. <span class="red">ااڡوںںطں، ااڡوںںطو</span>
2. <span class="green">ااقونيطن هو قاتل النمر</span>
</p>
上面的HTML和CSS渲染成这样:
请注意,在 HTML 中,'red' 按从左到右的顺序出现在 'green' 之前,而渲染将它们交换了。
如果我替换“2”。对于任何拉丁字母,跨度都会交换到正确的位置。
如何让两个跨度(以及 <p>
的所有直接子级)按从左到右的顺序出现?
CSS-首选解决方案。
您可以在父元素中使用 dir="rtl"
属性
.red {
color: red;
}
.green {
color: green;
}
p {
}
<p dir="rtl">Example: <span class="red">ااڡوںںطں، ااڡوںںطو</span>... <span class="green">ااقونيطن هو قاتل النمر</span>
</p>
您当前的文本之所以如此,是因为数字没有 "strong direction",并且可以嵌入到任一方向的文本中。无论您的标记和 CSS 是什么,浏览器都会将“ااڡوںںطں، امونيطن هو قاتل النمر” 视为单个字符串,并确定它应该从右到左呈现。
用拉丁字母(或单词)替换“2”会强制将字符串分成三个部分并改变方向。
要强制浏览器将阿拉伯文本的两个部分分开处理,您可以对红色和绿色部分使用 the bdi
(Bi-Direction Isolate) element 而不是 span
。请注意,您无需指定任何文本的特定方向,浏览器将根据 Unicode 规则进行计算。
.red {
color: red;
}
.green {
color: green;
}
<p>Example:
1. <bdi class="red">ااڡوںںطں، ااڡوںںطو</bdi>
2. <bdi class="green">ااقونيطن هو قاتل النمر</bdi>
</p>
CSS 的唯一等效项是 unicode-bidi: isolate;
,尽管 MDN 指出不鼓励直接使用它以支持暗示它的元素(大概包括 bdi
)。
.red {
color: red;
unicode-bidi: isolate;
}
.green {
color: green;
unicode-bidi: isolate;
}
<p>Example:
1. <span class="red">ااڡوںںطں، ااڡوںںطو</span>
2. <span class="green">ااقونيطن هو قاتل النمر</span>
</p>
.red {
color: red;
direction: rtl;
}
.green {
color: green;
direction: rtl;
}
p {
direction: ltr;
}
<p>Example:
1. <span class="red">ااڡوںںطں، ااڡوںںطو</span>
2. <span class="green">ااقونيطن هو قاتل النمر</span>
</p>
上面的HTML和CSS渲染成这样:
请注意,在 HTML 中,'red' 按从左到右的顺序出现在 'green' 之前,而渲染将它们交换了。
如果我替换“2”。对于任何拉丁字母,跨度都会交换到正确的位置。
如何让两个跨度(以及 <p>
的所有直接子级)按从左到右的顺序出现?
CSS-首选解决方案。
您可以在父元素中使用 dir="rtl"
属性
.red {
color: red;
}
.green {
color: green;
}
p {
}
<p dir="rtl">Example: <span class="red">ااڡوںںطں، ااڡوںںطو</span>... <span class="green">ااقونيطن هو قاتل النمر</span>
</p>
您当前的文本之所以如此,是因为数字没有 "strong direction",并且可以嵌入到任一方向的文本中。无论您的标记和 CSS 是什么,浏览器都会将“ااڡوںںطں، امونيطن هو قاتل النمر” 视为单个字符串,并确定它应该从右到左呈现。
用拉丁字母(或单词)替换“2”会强制将字符串分成三个部分并改变方向。
要强制浏览器将阿拉伯文本的两个部分分开处理,您可以对红色和绿色部分使用 the bdi
(Bi-Direction Isolate) element 而不是 span
。请注意,您无需指定任何文本的特定方向,浏览器将根据 Unicode 规则进行计算。
.red {
color: red;
}
.green {
color: green;
}
<p>Example:
1. <bdi class="red">ااڡوںںطں، ااڡوںںطو</bdi>
2. <bdi class="green">ااقونيطن هو قاتل النمر</bdi>
</p>
CSS 的唯一等效项是 unicode-bidi: isolate;
,尽管 MDN 指出不鼓励直接使用它以支持暗示它的元素(大概包括 bdi
)。
.red {
color: red;
unicode-bidi: isolate;
}
.green {
color: green;
unicode-bidi: isolate;
}
<p>Example:
1. <span class="red">ااڡوںںطں، ااڡوںںطو</span>
2. <span class="green">ااقونيطن هو قاتل النمر</span>
</p>