哪个更正确: < h1 > < a > ... </a > </h1 > OR < a > < h1 > ... </h1 > </a >

<h1><a ...> ... </a></h1><a ...><h1> ... </h1></a>都是有效的 HTML 吗,还是只有一个是正确的?如果它们都是正确的,那么它们的意义是否不同?

72301 次浏览

两个版本都是正确的。它们之间最大的区别是,在 <h1><a>..</a></h1>的情况下,只有标题中的文本可以点击。

如果你把 <a>放在 <h1>周围,css display属性是 block(默认情况下是 block) ,整个块(<h1>的高度和 <h1>所在容器宽度的100%)将是可点击的。

从历史上看,不能在内联元素中放置块元素,但 HTML5不再是这种情况。但我认为 <h1><a>..</a></h1>方法更为传统。

在希望在头部放置一个锚的情况下,比 <a id="my-anchor"><h1>..</h1></a>更好的方法是使用 idname属性,如 <h1 id="my-anchor">..</h1><h1 name="my-anchor">..</h1>

在 HTML 5之前,这一个

<a><h1>..</h1></a>

将无法验证。您可以在 HTML 5中使用它。 不过,我会用这个:

<h1><a>..</a></h1>

除非您需要在 < a > 中添加多于 < h1 > 的内容

<a><h1></h1></a>不是 W3C 有效的... ... 基本上,你不能把 块元素放在 内联元素里面

H1元素是块级元素,锚是内联元素。允许在块级元素中包含内联元素,但不允许反过来包含内联元素。当您考虑框模型和 HTML 规范时,这是有意义的。

因此,最好的办法是:

<h1><a href="#">Link</a></h1>

您是想使用超链接 <a href="…">/a:link,还是想在标题中添加一个锚?如果您想要添加一个锚,您可以简单地分配一个 id <h1 id="heading">。然后你可以把它链接成 page.htm#heading

如果你想让标题变得可点击(一个链接) ,首先使用 <h1><a></a></h1>/h1 > a-block-level 元素,然后在内部使用行内元素

当样式表不影响呈现时,<h1><a>..</a></h1><a><h1>..</h1></a>的行为总是几乎相同。差不多,但不完全是。如果您使用选项卡键导航或以其他方式将焦点集中在链接上,那么在大多数浏览器中,链接周围会出现一个“焦点矩形”。对于 <h1><a>..</a></h1>,此矩形仅围绕链接文本。对于 <a><h1>..</h1></a>,矩形在可用的水平空间中扩展,因为标记使得 a元素在呈现中成为块元素,默认情况下占据100% 的宽度。

下面展示了如何使用 Chrome 渲染聚焦的 <a href=foo><h1>link</h1></a>:

enter image description here

这意味着如果你设计元素的样式,例如为链接设置背景颜色,效果也会以类似的方式不同。

历史上,在 HTML 2.0中,<a><h1>..</h1></a>被宣布为无效,随后的 HTML 规范也是如此,但是 HTML5改变了这一点,并宣布它是有效的。正式的定义没有影响浏览器,只影响了验证器。然而,一些用户代理(可能不是普通的浏览器,但是例如专门的 HTML 渲染器、数据提取器、转换器等)不能正确处理 <a><h1>..</h1></a>的可能性很小,因为它在规范中是不允许的。

很少有好的理由将标题或标题中的文本作为链接。(这基本上是不合逻辑的,而且不利于可用性。)但是类似的问题经常出现在使用 <h2><a name=foo>...</a></h2><a name=foo><h2>...</h2></a>将标题(或标题中的文本)作为链接的潜在 目的地时。类似的考虑也适用于此(两者都可以工作,可能有区别,因为后者使 a元素成为一个块,而在 HTML5之前,只有前者是正式允许的)。但是另外,这两种方法都已经过时了,现在建议直接在标题元素上使用 id属性: <h2 id=foo>...</h2>

此外,还存在风格层次结构差异。如果将其设置为 <h1><a href="#">Heading here</a></h1>,则锚的样式将推翻 h1元素的样式。例如:

a {color:red;font-size:30px;line-height:30px;}

将驳回

h1 {color:blue;font-size:40px;line-height:40px;}

两者都是正确的。它们取决于您想要的锚标记的大小以及您想要的网站布局方式。 您可以执行 <h1><a href="example.com">Home Page</a></h1>,在这种情况下,它将返回:

主页

但使用锚。
或者你可以使用 <a href="example.com"><h1>Home Page</h1></a>,它会返回一个 H1超链接,而不是像下面这样将一个锚定到 H1:

主页

但是,大多数情况下您不能在 H1中添加链接,因为它只会将其作为一个锚呈现到 h1上,而不会添加超链接。然而,我认为我的观点是正确的,您可以看到在不同的浏览器上这种行为有所不同。

但如果我说错了请纠正我:)

我认为无论是老的还是弱的浏览器,< h1 > < a href = “”> text 是问题最少的,但是现代的浏览器和强大的搜索引擎都支持它和 < a href = “”> < h1 > text ; 因此,使用这两者来改进我们的网页是一个很好的自由和有用的。

“希望有用”