Home > Develop > Firefox Input Button Line-Height Bug
2010March . 1st

Firefox Input Button Line-Height Bug

最近国外有开发者发现Firefox和Opera的一个BUG:无法改变按钮里文字的行高(包括input type=”sumbit”和HTML的button标签)。举个例子,对一个按钮使用以下样式:

1
2
3
4
5
6
7
input#button {
	border: 2px solid #06f;
	color: #06f;
	background-color: #6cf;
	font: bold 12px Arial, Helvetica, sans-serif;
	line-height: 50px;
}

按照常理,这个样式将为按钮设置50px的行高,并使文本垂直居中。因为这个样式在Chrome、Safari和IE8里的表现都一致,唯独在Firefox和Opera里并没有表现出50px的行高,具体效果如下图。

button-sizes-by-browser

是什么原因引起了这个问题?

在Firebug的帮助下,该开发人员发现虽然自己已经把行高设为50px,但Firefox依然使用15px的行高。

firebug-firefox-line-height

该开发人员认为是Firefox强行限制了按钮文本的行高,于是编写了以下的CSS用于验证。

1
2
3
ibutton, input[type="reset"], input[type="button"], input[type="submit"] {
	line-height:normal !important;
}

该开发人员发现,Firefox会私自把按钮内文本的行高设置为normal,这个值在Firefox里默认为15px,但各个浏览器对normal的值并没有一个统一的标准。最后这个开发人员放弃了通过行高把按钮撑开并使文本居中的方法,而采用了以下的样式,解决了Firefox的按钮行高问题。

1
2
3
4
5
6
7
input#button {
	border: 2px solid #06f;
	color: #06f;
	background-color: #6cf;
	font: bold 12px Arial, Helvetica, sans-serif;
	padding: 18px 6px;
}

这并不是最好的办法,但也算是达到了所需的效果。

本文案例出自The Firefox Input Button Line-Height Bug

后记

我认为这个开发人员似乎并没有考虑到令一个CSS属性,而是抱着“完成了就好”的心态去解决问题。你认为这个所谓的BUG有更好的办法解决吗?欢迎讨论一下。

  1. 2010March . 1st - 6:10 PM

    button一直是用背景图片的的飘过。input的line-height也很崩溃,最后也是用padding来解决。

  2. 2010March . 1st - 7:46 PM

    技术文章…………

  3. 2010March . 2nd - 2:50 AM

    嘿嘿,以后小邪会注意了 ~

  4. 2010March . 2nd - 2:06 PM

    我觉得用行距来定高不是个好办法。因为input是block而line-height属性是对inline级才有用,所以firefox下这个效果应该是正确的。

  5. 2010March . 2nd - 2:33 PM

    哥 你研究是太细致了

  6. 2010March . 2nd - 8:28 PM

    我也是用 padding 来处理。

  7. 2010March . 2nd - 8:43 PM

    标准不一确实很苦恼。
    我博客上的搜索框里面的文本,在FF和op下就位置不同。。吐血

  8. 2010March . 3rd - 9:23 AM

    这。。。我看不懂。。不过没想到你会研究这些哈

  9. 2010March . 3rd - 2:06 PM

    @Y.Jiajia
    的确是,很多初学者搞不清一些标签的默认级别,结果有的重复定义了
    @卢松松
    平时的开发中也会遇到这个问题的
    @welee
    这是没有办法的办法了
    @A.shun
    那就重写一下样式吧,这两个浏览器还是很好兼容的

  10. 2010March . 3rd - 2:56 PM

    我忘了怎么定义的了,老是遇到时才去处理

  11. 2010March . 3rd - 3:52 PM

    刚才又查了一下,应该是这样:line-height可以作用于block级时,是当block元素需要内部可以包含inline元素时。line-height作用于inline级元素时相当于“height”。但是在W3C里input的定义是:可以当作inline也可以当作block。这样说来,就比较有意思了。

  12. 2010March . 4th - 12:04 PM

    @zwwooooo
    会处理就行了,哈哈
    @Y.Jiajia
    我想说的就是那个开发人员没有尝试对input进行重定义,一次浏览器都根据自己的默认属性进行渲染了

Subscriber selector

Close