您是否允许在链接中嵌套链接?

den*_*xic 53 html css

这看起来很基本,你是否允许在链接中放置一个链接?见下图:

在此输入图像描述

我试图将整个灰色条点击到某个地方,但如果用户点击滚轮或移动箭头,它们就是其他链接.看我目前的代码:

<a href="#" class="sp_mngt_bar">
    <h1><?php echo $v; ?></h1>
    <a href="#" class="t_icons t_icons_settings sp_mngt_settings"></a>
    <a href="#" class="t_icons t_icons_move sp_mngt_move"></a>
</a>
Run Code Online (Sandbox Code Playgroud)

这是一个好习惯吗?我做错了吗?你会怎么做?谢谢您的帮助!

Jos*_*osh 59

直接从W3C for HTML4:

12.2.2嵌套链接是非法的

由A元素定义的链接和锚点不得嵌套; A元素不得包含任何其他A元素.

由于DTD将LINK元素定义为空,因此LINK元素也可以不嵌套.

HTML 5

对于HTML5,它有点不同.

您不能在A元素中包含交互式内容.交互式内容包括锚标签.

  • 只是澄清一下:HTML5 锚标记不能包含锚标记,即使是非交互式内容的锚标记(即没有 href 属性的锚标记)。 (3认同)
  • @Jonz快进几年 - 如果一个锚嵌入另一个锚中,Mac上的Chrome版本59.0.3071.115会调整HTML ... (2认同)

Jul*_*lle 30

简单回答一个问题:不.

话虽这么说,这是一个纯粹的html/css解决方法:

https://codepen.io/pwkip/pen/oGMZjb

.block {
  position:relative;
}

.block .overlay {
  position:absolute;
  left:0; top:0; bottom:0; right:0;
}

.block .inner {
  position:relative;
  pointer-events: none;
  z-index: 1;
}

.block .inner a {
  pointer-events: all;
}
Run Code Online (Sandbox Code Playgroud)
<div class="block">
  <a class="overlay" href="#overlay-link"></a>
  <div class="inner">
    This entire box is a hyperlink. (Kind of)<br><br><br><br>
    <a href="#inner-link">I'm a W3C compliant hyperlink inside that box</a>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 出色的解决方案-如果我可以给此票超过1票,我会的! (3认同)

Pim*_*Web 16

将嵌套链接包装在对象标记内:

<a href="#" class="sp_mngt_bar">
    <h1><?php echo $v; ?></h1>
    <object><a href="#" class="t_icons t_icons_settings sp_mngt_settings"></a></object>
    <object><a href="#" class="t_icons t_icons_move sp_mngt_move"></a></object>
</a>
Run Code Online (Sandbox Code Playgroud)

  • 我建议您在应用此黑客后检查您的表现.我们将它添加到应用程序中,后来发现我们的pagespeed得分下降了.事实证明,在我们的案例中包装像这样的链接是原因. (5认同)

omg*_*oha 7

尽管我完全同意所选答案,是的,您不应该在 A 元素中包含交互式内容,但有时您可能需要解决此问题。

下面是一个示例,您需要在 A 标记中放置一个交互式元素。右上角的那个小关闭按钮。

A 标签中的交互元素

这是用于此的 HTML。(这不是实际的构建,我简化了一些)

    <a href="#">
        <span class="hide">X</span> <!-- THIS IS THE SMALL 'X' WHICH HIDES THE WHOLE BOX -->
        <img src="images/camera.svg" width="50" alt="Camera" />
        <em>
            Upload a profile picture
            <small>
                Here's the deal. Make your profile look awesome and even get 25 karma for it. We're not kidding.
            </small>
        </em>
        <strong>
            + 25 K
        </strong>
    </a>
Run Code Online (Sandbox Code Playgroud)

所以,基本上我们想在用户点击“X”时隐藏这个框。否则,它应该像一个简单的 A 标签一样工作。这是成功的jQuery。

    $('.hide').click(function(e) {
            e.preventDefault();
            e.stopPropagation(); // THIS IS THE KEY PART
    
            // DO WHATEVER YOU WANT, I FADED OUT THE BOX FOR EXAMPLE
            $(this).parent().fadeOut(300);
    });
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助有同样问题的人。;)