【问题标题】:How can I have an anchor tag which targets its entire parent header tag?我怎样才能拥有一个定位其整个父标题标签的锚标签?
【发布时间】:2012-04-18 14:09:46
【问题描述】:

我有许多网站,其中有很多链接,其中锚标签位于标题标签内,例如:

<a href="#">
    <h2 style="padding-left: 50px;">
       A hyperlinked heading
    </h2>
</a>

这允许我单击 h2 元素中的任意位置,包括 h2 元素上的任何填充(!),并触发超链接。但是,它不符合 W3C(通过 http://validator.w3.org/ 确认)

为了符合 W3C,内联标签(即 a)内不能有任何块标签(即 h2)。因此,解决方法是将锚标签放在标题标签内:

<h2 style="padding-left: 50px;">
    <a href="#">
        A hyperlinked heading
    </a>
</h2>

该解决方案的问题是我现在只能通过单击 h2 内的 text 来触发超链接,但我实际上希望能够在 anywhere 上单击h2 元素。

我发现我可以将 display:block 添加到锚标签中,如下所示:

<h2 style="padding-left: 50px;">
    <a href="#" style="display: block;">
        A hyperlinked heading
    </a>
</h2>​​​​​​​​​

这部分解决了这个问题,它允许我单击大部分 h2 元素来触发超链接,但仍然不允许我通过单击 h2 的任何填充区域来触发超链接。

可以在此处找到突出问题的 JSFiddle:http://jsfiddle.net/84rDG/

有人建议我可以从 h2 元素中删除所有 CSS 并将其添加到 h2 类中,然后我可以将 h2 类应用于任何 h2 标签 到任何锚点需要h2标签外观的标签。不过,这不是很好,因为我必须用锚标签替换我的大部分 h2 标签,这会扰乱任何基于 h2 元素的 SEO。

似乎 HTML5 将允许锚标签围绕标题标签,可能是因为很多人都在尝试实现我在这里概述的内容,但我需要一个同时有效的解决方案。

欢迎提出任何建议!

【问题讨论】:

    标签: html css w3c-validation


    【解决方案1】:

    您应该从h2-元素中删除填充并将其添加到a-元素中

    CSS:

    h2.anchor {
        border: 1px solid red;
        font-size: 40px;
        padding: 0px;
    }
    h2 > a {
        display: block;
        padding-left: 50px;
    }
    

    HTML:

    <h2 class="anchor">
        <a href="#">
            A hyperlinked heading
        </a>
    </h2>​​​​​​​​​
    

    【讨论】:

    • 这样做的缺点是任何没有超链接(即不包含 a 元素)的 h2 元素将不再有填充。如果我可以在 a 元素上进行填充(如果存在),那么您的解决方案将起作用,否则在 h2 元素上进行填充。我不想将填充放在两个元素上,并在 h2->a 元素上加倍填充。
    • 通过向h2-element 添加一个类来编辑我的答案
    • 我希望我的 h2 元素是统一的,而不需要额外的类,但至少它确实有效。干杯:-)
    • @SamWilliams 如果您可以使用边距代替填充,则可以为 h2 和锚点添加边距 - 它会折叠。继续阅读。
    • 如果我正确理解了您的意思,那么这是一个演示:jsfiddle.net/84rDG/3。顶部的标题是我想要达到的效果,底部是我解释为您的解决方案的效果。您可以看到可点击区域减少了,这不是我想要的,但可折叠边距仍然很有趣。谢谢!
    猜你喜欢
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多