在查看大多数网站(包括SO)时,大多数网站使用:

<input type="button" />

而不是:

<button></button>

两者之间的主要区别是什么?是否有合理的理由使用其中一个而不是另一个?是否有合理的理由使用组合它们?使用<button>是否存在兼容性问题,因为它没有被广泛使用?


当前回答

这篇文章似乎很好地概括了两者的区别。

从页面:

使用BUTTON元素创建的按钮与按钮一样使用INPUT元素创建,但是它们提供了更丰富的渲染可能性:BUTTON元素可能有内容。例如,按钮包含图像的元素函数类似于类型设置为的INPUT元素“image”,但BUTTON元素类型允许内容。Button元素-W3C

其他回答

引用HTML手册中的表单页:

使用BUTTON元素创建的按钮的功能与使用INPUT元素创建的相同,但它们提供了更丰富的呈现可能性:BUTTON元件可能有内容。例如,包含图像的BUTTON元素的功能类似于类型设置为“image”的INPUT元素,但BUTTON类型允许内容。

<button>很灵活,因为它可以包含HTML。此外,使用CSS进行样式设置要容易得多,而且样式设置实际上适用于所有浏览器。然而,Internet Explorer(Ew!IE!)存在一些缺点。Internet Explorer使用标记的内容作为值,无法正确检测value属性。表单中的所有值都会发送到服务器端,无论是否单击按钮。这使得将其用作<button type=“submit”>变得棘手和痛苦。

另一方面,<input type=“submit”>没有任何值或检测问题,但您不能像使用<button>那样添加HTML。它也很难进行样式设置,并且样式设置在所有浏览器中的响应并不总是很好。希望这有所帮助。

我只想在这里的其他答案中添加一些内容。输入元素被视为空元素或void元素(其他空元素包括area、base、br、col、hr、img、Input、link、meta和param。您也可以在此处检查),这意味着它们不能包含任何内容。除了没有任何内容外,空元素不能有任何伪元素,如::after和::before,我认为这是一个主要缺点。

此外,其中一个差异可能来自于库的提供者以及它们的代码。例如,我在这里使用的是cordova平台和移动angular ui,尽管input/div/etc标签与ng单击配合使用很好,但该按钮可能会导致Visual Studio调试器崩溃,当然是由于程序员造成的差异;注意,MattC的答案指向了同一个问题,jQuery只是一个库,提供者没有想到一个元素上的某些功能,而他/她在另一个元素中提供的功能。因此,当您使用库时,您可能会遇到一个元素的问题,而另一个元素则不会遇到这个问题。简单地说,像输入这样的流行输入,大多是固定输入,因为它更流行。

我将引用文章锚、输入和按钮之间的区别:

锚(<a>元素)表示超链接,即用户可以在浏览器中导航或下载的资源。如果您希望允许用户移动到新页面或下载文件,请使用锚点。

一个输入(<input>)表示一个数据字段:所以您打算将一些用户数据发送到服务器。有几种与按钮相关的输入类型:

<input-type=“submit”><input-type=“image”><input-type=“file”><输入类型=“重置”><input-type=“button”>

它们每个都有一个含义,例如“file”用于上传文件,“reset”清除表单,“submit”将数据发送到服务器。检查MDN或W3Schools上的W3参考。

按钮(<button>)元素非常通用:

可以在按钮中嵌套元素,例如图像、段落或标题;按钮还可以包含::before和::after伪元素;按钮支持禁用属性。这使得转向变得容易他们断断续续。

再次,检查MDN或W3Schools上<button>标记的W3参考。