<button> 填充/宽度问题

Posted

技术标签:

【中文标题】<button> 填充/宽度问题【英文标题】:<button> padding / width problem 【发布时间】:2011-10-11 01:20:19 【问题描述】:

我正在使用&lt;button&gt; 在表单中发出发布请求。我还将a.button 的样式设置为与&lt;button&gt; 完全相同(我需要a.button 来制作一些JS 内容)。

按钮有一些填充,一个固定的高度。当我指定按钮/ a 的宽度时,它们看起来都一样。但是当我向&lt;button&gt; 添加宽度时,它会忽略填充。

我在 Chrome、Firefox 和 Opera 中遇到了这个问题,所以我想这不是渲染错误。 &lt;input type="submit" /&gt; 也有同样的问题

这是基本的 CSS:

.button, button 
    margin: 0;
    display: inline-block;
    border: 0;
    text-decoration: none;
    cursor: pointer;
    color: black;
    background: #ddd;
    font: 12px Verdana;
    padding: 40px; /* 40px, so you can see that it won't be rendered with width */
    text-align: center;

html

<a href="#" class="button">Some text</a>
<button>Some text</button>
<!-- Works fine till here -->
<br /><br />
<a href="#" class="button" style="width:200px">Some text</a>
<button style="width:200px">Some text</button>

小提琴:http://jsfiddle.net/9dtnz/

关于浏览器忽略填充的任何建议? (使用高度时为上下/使用宽度时为左右)。

【问题讨论】:

这对我来说在 FF 5.0 中看起来不错 Chrome 12 和 FF4 中没有 它工作正常您使用的是哪个版本的浏览器? 最后两个按钮是否有相同的outerWidth?它们不在 Chrome 12、FF 4 和 Opera 10.5 中 【参考方案1】:

很奇怪,我看到我的 Chrome 对输入元素有一个 box-sizing: border-box; 规则,所以宽度中包含填充...

为了避免这种情况,只需指定box-sizing: content-box;(可能需要一些前缀)。

【讨论】:

非常感谢!这解决了问题。 -webkit-box-sizing: initial 完成了这项工作 我做了一些研究,但 initial 似乎不适用于 Opera 和 FF。这样做:[前缀]-box-sizing: content-box; 是的,我刚刚在 chrome 上进行了测试。我认为它对某些人有用=) 在 2018 年仍然适用于 Firefox 和 Chrome(现在都可以识别没有前缀的标准 box-sizing 属性)。我很想知道为什么两个浏览器都对表单元素使用不同的默认框大小。这是相当违反直觉的......【参考方案2】:

对我来说看起来不错,所以可能是样式表冲突问题。尝试使用 !important 覆盖它可能会解决您的问题。

.button, button 
    margin: 0;
    display: inline-block;
    border: 0;
    text-decoration: none;
    cursor: pointer;
    color: black;
    background: #ddd;
    font: 12px Verdana;
    padding: 40px!important; /* 40px, so you can see that it won't be rendered with width */
    text-align: center;

希望这会有所帮助。

迈克尔。

【讨论】:

不,与 !important 没有区别。这是我看到的截图:cl.ly/261Z1T2C2Z0F44471f2y。最后两个按钮应该具有相同的外宽度,但它们没有。

以上是关于<button> 填充/宽度问题的主要内容,如果未能解决你的问题,请参考以下文章

<select> 与具有相同边框宽度和填充的 <input> 相比具有额外的填充

在列表框中填充网格宽度

展开一个 div 以填充剩余的宽度

样式输入元素以填充其容器的剩余宽度

SVG <g> 和 <text> 元素的默认宽度/边距/填充是多少?

IE8 <input type="button"> - CSS 悬停不适用于边框和填充设置为 0