我可以使用HTML5在<a>中嵌套<button>元素吗?

Mar*_*rie 129 html html5

我正在做以下事情:

 <a href="www.stackoverflow.com">
   <button disabled="disabled" >ABC</button>
 </a>  
Run Code Online (Sandbox Code Playgroud)

这很好,但我得到一个HTML5验证错误,说"元素'按钮'不能嵌套在元素'按钮'中.

谁能给我建议我应该怎么做?

And*_*ore 212

,根据W3CHTML5规范文档,它不是有效的HTML5 :

内容模型: 透明,但必须没有交互式内容后代.

只要在其中没有交互式内容(例如按钮或其他链接),a元素可以围绕整个段落,列表,表格等,甚至整个部分.

换句话说,您可以嵌套<a>除以下内容之外的任何元素:

  • <a>

  • <audio>(如果存在controls属性)

  • <button>

  • <details>

  • <embed>

  • <iframe>

  • <img>(如果存在usemap属性)

  • <input>(如果type属性不处于隐藏状态)

  • <keygen>

  • <label>

  • <menu>(如果type属性处于工具栏状态)

  • <object>(如果存在usemap属性)

  • <select>

  • <textarea>

  • <video>(如果存在controls属性)


如果您尝试使用链接到某处的按钮,请将该按钮包含在<form>标记内:

<form style="display: inline" action="http://example.com/" method="get">
  <button>Visit Website</button>
</form>
Run Code Online (Sandbox Code Playgroud)

但是,如果您的<button>标签使用CSS设置样式并且看起来不像系统的小部件...请帮自己一个忙,为您的<a>标签创建一个新类并以相同的方式设置样式.

  • 如果使用表单,Google会注意到该链接吗? (3认同)
  • user25 not 不是更好地使用 method="post" 因为浏览器在来回导航时要求重新发送帖子表单。由于 GET 是表单的默认方法,为简洁起见,可以将 method="get" 保留。 (3认同)
  • 为什么元素列表中有一个 &lt;div&gt; 不能嵌套在 &lt;a&gt; 中?&lt;div&gt; 不是交互式的,我很确定在 HTML5 中将 &lt;div&gt; 嵌套在 &lt;a&gt; 标记中是有效的? (3认同)
  • @AndrewMoore:将链接的样式设置为类似于按钮的样式会产生自己的一系列问题,例如可访问性。当按钮具有焦点并按下空格键时,应执行该按钮。链接没有。如果您在乎ADA(或要求假装在乎),那么这可能会咬您。 (3认同)
  • @Marie:除了将链接设置为按钮外,别无他法. (2认同)
  • 正如@jonaspas 所建议的,`&lt;a&gt;` 中的 `&lt;div&gt;` 在 HTML5 中绝对有效:https://validator.w3.org/nu/?showsource=yes&amp;doc=data%3Atext%2Fhtml%3Bcharset%3DUTF -8%2C%253C%21DOCTYPE%2520html%253E%250A%253Chtml%253E%250A%253Chead%253E%253Ctitle%253ETitle%253C%252Ftitle%253E%253C%25%A253C%253%253C%253%Chead%253Chead%253Chead%253Chead%253Chead %2520href%253D%2522%2523%2522%253E%253Cdiv%253ETesting%2520A%2520div%2520in%2520an%2520A%253C%252Fdiv%253E%253C%252Fa%253E%250A%253C%252Fbody%253E%250A%253C %252Fhtml%253E (2认同)

小智 42

如果您使用的是Bootstrap 3,则可以正常使用

<a href="#" class="btn btn-primary btn-lg active" role="button">Primary link</a>
<a href="#" class="btn btn-default btn-lg active" role="button">Link</a>
Run Code Online (Sandbox Code Playgroud)


gob*_*tri 9

我刚刚跳到同样的问题,我用'button'标签代替'span'标签解决了它.在我的情况下,我正在使用bootstrap.这是它的样子:

<a href="#register"> 
    <span class="btn btn-default btn-lg">
        Subscribe
    </span>
</a> 
Run Code Online (Sandbox Code Playgroud)

  • 使用bootstrap时根本不需要跨度.只需将整个班级部分移动到<a>,您就会有一个链接按钮.例如<a href="#register" class="btn btn-default btn-lg">订阅</a> (4认同)

小智 9

没有.

以下解决方案依赖于JavaScript.

<button type="button" onclick="location.href='http://www.stackoverflow.com'">ABC</button>
Run Code Online (Sandbox Code Playgroud)

如果按钮放置内现有的<form>method="post",则确保按钮具有属性type="button",否则该按钮将提交POST操作.通过这种方式,您可以拥有一个<form>包含GET和POST操作按钮的混合体.


rog*_*ack 8

如今,即使规范不允许,“似乎”仍然可以将按钮嵌入到标签中<a href...><button ...></a>,FWIW...

  • 当“&lt;button&gt;”不包含在“&lt;form&gt;”中时,此方法有效。然而,一旦包含按钮(例如,`&lt;form&gt;...&lt;a&gt;&lt;button&gt;`),它就会停止工作,_除非_禁用按钮的单击处理程序。这足以保证避免这种情况。 (4认同)
  • @bishop它在表单中工作正常,只需指定类型: &lt;button type="button"&gt; (2认同)

Ste*_*sen 7

如果这是有效的,那将是非常奇怪的,我希望它是无效的.在另一个可点击元素中有一个可点击元素应该是什么意思?它是什么 - 按钮或链接?