html - 在 HTML 中混合 RTL 和 LTR 文本

标签 html css arabic bidi

.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 渲染如下:

sample of current output

请注意,在 HTML 中,“red”在“green”之前以从左到右的顺序排列,而渲染则将它们交换。

如果我替换 '2.'对于任何拉丁字母,跨度会交换到正确的位置。

如何让两个跨度(以及 <p> 的所有直接子级)按从左到右的顺序出现?

首选纯 CSS 解决方案。

最佳答案

您当前的文本之所以如此,是因为数字没有“强方向”,并且可以嵌入到任一方向的文本中。无论您的标记和 CSS 是什么,浏览器都会将“ااڡوںںطں͌ ااڡوںںطو 2. ااونيطن هو قاتل النمر”视为单个字符串,并确定它应该从右到左呈现。

用拉丁字母(或单词)替换“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>

关于html - 在 HTML 中混合 RTL 和 LTR 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62468519/

相关文章:

php - 不刷新提交

css - 在 IE 和 Edge 上为 svg 元素拖动 Sprite

javascript - 在 JavaScript 中使用 Regex 处理阿拉伯语单词

某些设备中的 Android 阿拉伯语语言支持问题

html - 在 IE11 中使用 pseudo element::before 和 display:table-cell 和 glyphicons 内容不会显示

html - 如果内容太长,Bootstrap 列换行

php代码以两种不同的显示方式显示行

html - 在主 Div 内居中 Div

悬停菜单项上的 jQuery 更改主图像

java jar以两种不同的字符编码写入