<bdi> 和 <span dir="auto"> 之间的区别

difference between <bdi> and <span dir="auto">

在下面的 HTML 中,<bdi><span dir="auto"> 似乎表现相同:

<p dir="auto">
<bdi>ABC תתת DEF</bdi>
אבג דהו.
</p>

<p dir="auto">
<span dir="auto">ABC תתת DEF</span>
אבג דהו.
</p>

我找不到他们表现不同的任何情况,所以我的问题是:

它们之间有什么区别吗?是否有理由使用 <bdi> 而不是 dir="auto"?特别是如果我想将它应用到我的 HTML 中已经存在的元素,例如 <a>:

<p dir="auto"><a href="http://example.com" dir="auto">http://example.com</a> טקסט טקסט</p>
<p dir="auto"><bdi><a href="http://example.com">http://example.com</a></bdi> טקסט טקסט</p>

<bdi>的版本有一些不必要的嵌套。

如果dir="auto"完成同样的事情,那么为什么<bdi>存在?

来自 MDN:

Embedding the characters in <span dir="auto"> has the same effect as using <bdi>, but its semantics are less clear.

The spec also confirms 通过在两种条件(dir="auto" 属性或 <bdi> 元素)下对相同算法进行分组,行为是相同的。

换句话说:如果您要应用 dir="auto" 的元素是一个不是 <span> 的短语元素并且已经带有自己的语义(例如 <a> 在你的例子中),最好使用属性来节省 <bdi> 元素的嵌套开销。如果它是 <span>,一个本身没有语义意义的元素,您最好改用专用的 <bdi> 元素。这在原则上与 <main> 优于 <div role="main"><nav> 优于 <div role="navigation"> 相同。