试一试
<h1>World wrestling championships</h1>
<ul>
<li><bdi class="name">Evil Steven</bdi>: 1st place</li>
<li><bdi class="name">François fatale</bdi>: 2nd place</li>
<li><span class="name">سما</span>: 3rd place</li>
<li><bdi class="name">الرجل القوي إيان</bdi>: 4th place</li>
<li><span class="name" dir="auto">سما</span>: 5th place</li>
</ul>
html {
font-family: sans-serif;
}
bdi {
/* Add your styles here */
}
.name {
color: red;
}
双向文本是指可能同时包含从左到右(LTR)排列的字符序列和从右到左(RTL)排列的字符序列的文本,例如嵌入在英文字符串中的阿拉伯语引述。浏览器会实现 Unicode 双向算法来处理这种情况。在该算法中,字符会被赋予隐式方向性:例如,拉丁字母被视为 LTR,而阿拉伯字母被视为 RTL。其他一些字符(如空格和某些标点符号)被视为中性字符,其方向性会根据周围字符的方向性来确定。
通常情况下,双向算法能够正确处理,无需作者提供任何特殊标记。但偶尔,该算法需要帮助。这时 `<bdi>` 就派上用场了。
<bdi>
元素用于包裹一段文本,并指示双向算法将此文本与其周围环境隔离开来处理。这体现在两个方面:
- 嵌入在
<bdi>
中的文本的方向性不会影响周围文本的方向性。 - 嵌入在
<bdi>
中的文本的方向性不受周围文本方向性的影响。
例如,考虑以下文本:
EMBEDDED-TEXT - 1st place
如果 `EMBEDDED-TEXT` 是 LTR,则此文本显示正常。但如果 `EMBEDDED-TEXT` 是 RTL,那么 ` - 1` 将被视为 RTL 文本(因为它由中性字符和弱字符组成)。结果将是乱码。
1 - EMBEDDED-TEXTst place
如果你预先知道 `EMBEDDED-TEXT` 的方向性,则可以通过将 `EMBEDDED-TEXT` 包装在带有 `dir` 属性设置为已知方向性的 <span>
中来解决此问题。但如果你不知道方向性——例如,因为 `EMBEDDED-TEXT` 是从数据库读取的,或者是由用户输入的——那么你应该使用 `<bdi>` 来防止 `EMBEDDED-TEXT` 的方向性影响其周围环境。
尽管使用 CSS 规则 unicode-bidi: isolate
应用于 <span>
或其他文本格式化元素可以实现相同的视觉效果,但 HTML 作者不应使用此方法,因为它缺乏语义,并且浏览器可以忽略 CSS 样式。
使用 <span dir="auto">
嵌入字符与使用 `<bdi>` 效果相同,但其语义不太明确。
属性
与其他所有 HTML 元素一样,此元素支持 全局属性,但 `dir` 属性的行为与通常不同:它默认为 `auto`,这意味着其值永远不会从父元素继承。这意味着,除非你为 `dir` 指定 `rtl` 或 `ltr` 的值,否则 用户代理将根据 `<bdi>` 的内容确定要使用的正确方向性。
示例
无 bdi 仅 LTR
此示例仅使用 <span>
元素列出了竞赛的获胜者。当姓名仅包含 LTR 文本时,结果看起来正常。
<ul>
<li><span class="name">Henrietta Boffin</span> - 1st place</li>
<li><span class="name">Jerry Cruncher</span> - 2nd place</li>
</ul>
无 bdi,含 RTL 文本
此示例仅使用 <span>
元素列出了竞赛的获胜者,其中一位获胜者的名字由 RTL 文本组成。在这种情况下,由中性或弱方向性字符组成的 ` - 1` 将采用 RTL 文本的方向性,结果将是乱码。
<ul>
<li><span class="name">اَلأَعْشَى</span> - 1st place</li>
<li><span class="name">Jerry Cruncher</span> - 2nd place</li>
</ul>
使用 bdi 处理 LTR 和 RTL 文本
此示例使用 <bdi>
元素列出了竞赛的获胜者。这些元素指示浏览器将姓名与其嵌入上下文隔离开来处理,因此示例输出的顺序是正确的。
<ul>
<li><bdi class="name">اَلأَعْشَى</bdi> - 1st place</li>
<li><bdi class="name">Jerry Cruncher</bdi> - 2nd place</li>
</ul>
技术摘要
规范
规范 |
---|
HTML # the-bdi-element |
浏览器兼容性
加载中…
另见
- HTML 中的内联标记和双向文本
- Unicode 双向算法基础
- 本地化
- 相关 HTML 元素:
<bdo>
- 相关 CSS 属性:
direction
,unicode-bidi