24

我的公司正在建立一个网站,我们遇到了一些问题,即 JavaScript 库无法替换某些东西。我们决定将我们的 HTML 提交给 W3C 验证器,它告诉我们在<div>标签中包含<button>标签是非法的。

<button class="button" type="submit">
    <div class="buttonNormalLargeLeft"><!--#--></div>
    <div class="buttonNormalLargeCenter">Search Flights</div>
    <div class="buttonNormalLargeRight"><!--#--></div>
</button>

结果是:

Line 287, Column 46: Element div not allowed as child of element button in this context. (Suppressing further errors from this subtree.)

编辑:澄清我们在这里尝试做的事情。我们想制作一个圆角按钮,不依赖box-radius. 我们在按钮元素中制作了 3 个 div,每个 div 都有自己的精灵,以使其看起来是圆形的并允许不同的宽度。其他资源指出,按钮元素是为希望按钮包含子元素(例如图像)的用户创建的,但由于某种原因 div 似乎无效。

为什么按钮元素中不允许使用 div?

这个问题的理想解决方案是什么?

编辑2:

为什么不使用输入法?因为输入不能具有所需的布局

为什么不使用div?因为没有 JavaScript 的用户将无法提交表单。

4

4 回答 4

4

好吧,我发表了评论,但没有爱。

您可以通过简单地将图像放入按钮中来实现 W3C 有效按钮。

小提琴

当然,您必须创建图像并向其中添加文本。但是由于您已经为不应该太难的角落创建了图像。

图像精灵也是一件很棒的事情。

.test {
  width: 258px;
  height: 48px;
  background: none;
  border: 1px solid transparent;
}
.test:active {
  outline: 0;
}
.test > img {
  width: 258px;
  height: 45px;
  opacity: 1;
  background: url('http://www.copygirlonline.com/wp-content/plugins/maxblogpress-subscribers-magnet/lib/include/popup1/images/btn/blue-button.png');
  background-position: -3px 0px;
}
.test > img:hover {
  background-position: -3px -50px;
}
<button class="test">
  <img src="http://alistapart.com/d/cssdropshadows/img/shadowAlpha.png" />
</button>

如果你想坚持使用 3 张图片,这里有一个更新版本。

button {
  margin: 0;
  padding: 0;
  border: none;
}
<button>
  <img src="http://placehold.it/50x50" /><img src="http://placehold.it/50x50" /><img src="http://placehold.it/50x50" />
</button>

此外,如果没有额外的 CSS,您似乎需要将所有<img />标签保持在同一行,否则它将图像视为它们之间有空格。

于 2015-03-25T19:47:08.753 回答
2

如果要使用自定义按钮,则必须将按钮标签替换为 div 或输入。在这种情况下,看起来 div 是您想要的。您只需要添加任何必要的事件处理程序(用于您的提交)。

可能有助于澄清一些事情。

于 2013-04-08T17:42:15.977 回答
2

根据HTML 标准a<button>只能包含Phrasing contentdiv元素不是短语内容的有效元素。

于 2020-07-29T21:56:37.520 回答
1

如果您使用的是表单,则可以将按钮更改为可点击的 div。例如:

<div role="button" onclick="$(this).closest('form').submit()">
    <!-- your child content here -->
</div>

或者,如果您知道表单名称或 ID,您可以将内联 javascript 更改为类似document.getElementById("form-id").submit()

于 2017-03-01T18:14:56.047 回答