試一試
<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