最新答案(2014 年 10 月)
在玩弄并观察“参考”项目在做什么之后,我意识到一件事:我们做错了。
简而言之:对于一个可靠且干净的跨浏览器解决方案,不能使用 line-height
属性来使input type="text"
元素更高,而是使用padding
属性。
跨浏览器问题
正如问题中所指出的,浏览器以不同line-height
的方式解释元素的属性。input type="text"
在这种情况下,对于 2012 年的 Chrome,甚至现在 2014 年 10 月(版本 37),它是针对光标位置的。
请注意,2010 年 6 月提交了一个相关错误,https://code.google.com/p/chromium/issues/detail?id=47284,但随后作为过时而关闭(谁知道为什么?):但提供的实时错误复制,http://jsbin.com/avefi/2,在编写时仍显示 chrome 错误(2014 年 10 月 - chrome 37)。
请注意,Valli69
的答案还将line-height
属性确定为问题的根源。但随后使用了一些相当 hacky/dirty/risky 的 IE8 和 IE9 修复(使用\0/
和\9
)。关于Ie8 CSS Hack 上的这些技术的相关问题 - 最佳方法?
不使用line-height
也不height
财产呢?
这个解决方案很简单,甚至现代和旧的浏览器都支持!
1) 简化示例中的解决方案
/*
* [1] overrides whatever value "line-height" property was given by any other selector
* note: make it "line-height: normal !important;" if necessary
* [2] overrides whatever value "height" property was given by any other selector
* note: make it "height: auto !important;" if necessary
*/
.username {
line-height: normal; /* [1] */
height: auto; /* [2] */
padding-top: 10px;
padding-bottom: 10px;
}
<input class="username" type="text" placeholder="Username" />
http://jsbin.com/yadebenoniro/1/edit?html,css,output上的现场演示(ps. 使用此 url http://jsbin.com/fugegalibuha/1在 IE8 上进行测试)
在Windows 操作系统上测试:IE8+、IE11、Chrome 38 和 Firefox 32。
2)问题背景下的解决方案
/*
* [1] overrides whatever value line-height property was given by any other selector
* note: make it "line-height: normal !important;" if necessary
* [2] overrides whatever value "height" property was given by any other selector
* note: make it "height: auto !important;" if necessary
*
* [3] use the padding-top, padding-bottom to adjust the height of your input type text
* [4] keep in mind that when changing the font-size value you will have to adjust the padding top and padding bottom if you want to keep the same height as previously
*/
.username input {
background-color: #FFFFFF;
border: 2px solid #DDDDDD;
border-radius: 5px;
color: #9E9E9E;
height: auto; /* [2] */
line-height: normal; /* [1] */
margin: 15px 0px 0px 0px;
padding: 10px 5px 10px 5px; /* [3] */
width: 330px;
font-size: 20px; /* [4] */
}
http://jsbin.com/busobokapama/1/edit?html,css,output上的现场演示(ps. 使用此 url http://jsbin.com/busobokapama/1在 IE8 上测试)
在Windows 操作系统上测试:IE8+、IE11、Chrome 38 和 Firefox 32。
3) 进一步说明
这个想法是在查看Foundation后想到的:它仅使用height
andpadding
属性:该line-height
属性保留为其默认的浏览器提供的值,即line-height: normal
.
自己看:通过检查基础的表单组件演示页面上input type="text"
的元素http://foundation.zurb.com/docs/components/forms.html
唯一的问题是,即使“只是”使用height
,padding
对于 IE8 来说似乎也是一个问题,所以我决定甚至删除该height
属性。
结论
该解决方案显然具有简单代码的巨大优势,可以在所有浏览器中“正常工作”。
但它也有一个缺点,即不能让您完全控制计算的总高度:计算的高度属性(字体大小 + 任意像素数)+ padding-top + padding-bottom + (border-width x 2)。“计算高度属性”似乎因浏览器而异,因此命名为“任意像素数”。
由您决定您最喜欢什么:简单的代码或像素精确的设计。
资源