css – 如何强制Firefox渲染textarea填充与div中相同?

前端之家收集整理的这篇文章主要介绍了css – 如何强制Firefox渲染textarea填充与div中相同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图在IE8,Firefox和Safari中的textarea内部以像素为单位提供一致的宽度,以便文本内容尽可能地以可预测和一致的方式包装行.

Firefox正在做一些有点奇怪的事情:它在textarea的内容空间与其他两个浏览器之间有一个额外的填充像素,与一个类似装备的div块相比.

将此类应用于textarea和div时,差异是可见的,div中的文本触及红色背景的左外边缘,但textarea中的文本尽管填充为零,仍具有1 px填充式偏移:

.testBox{
    padding:0;
    margin:0;
    border:0;
    background: red;
    width: 40px;
    height: 40px;
    font-size: 12px;
    line-height: 16px;
}

填充的其他值最终显示一个额外的偏移像素与div.

关于是否有办法欺骗Firefox渲染textarea就好像它是一个div,或者为textarea调整这个不填充但看起来像填充属性的任何想法?

最佳答案
我最近一直在研究OP为a similar question on SO描述的问题.似乎Firefox中的一个错误导致在textarea元素上渲染这种所谓的“不填充但看起来像填充”.

通常这个额外的填充并不是一个真正的问题,但是当你想要保持两个元素的宽度相同时,它会成为一个问题,而你关心的是让它的内容在两个元素中以相同的方式包装.

获取textarea以包装内容与例如Firefox中的div元素

似乎不可能在Firefox中删除textarea上的这个1.5px宽的填充,所以如果你想确保Firefox中div内的包装内容与Firefox中textarea内部包装的内容完全相同,最佳方法似乎是在div中的右侧和左侧添加额外的1.5px填充,但仅限于Firefox.您可以通过在div上设置以下特定于供应商的前缀CSS属性来实现此目的:

-moz-Box-sizing: border-Box;
-moz-padding-end: 1.5px; 
-moz-padding-start: 1.5px; 

第一个确保div上的填充设置不会增加div的宽度,接下来的两个确保在div的右侧和左侧设置1.5px的填充.

这种方法不会影响任何其他浏览器中div的渲染,它不需要,因为其他浏览器中的textarea不会渲染任何额外的填充.但它确保在Firefox内部的div和textarea之间没有内容包装差异,只要它们共享相同的font-family和font-size属性等等.

这是一个jsFiddle用于演示目的.

让textarea在浏览器中一致地包装内容

如果您只想确保Firefox中的textarea与其他浏览器中的textarea具有相同的宽度和包装行为,可以将其Box-sizing设置为border-Box,在5.5px的两边添加一个填充并设置-moz -padding-end和-moz-padding-start到0px.

textarea {
    padding: 0 5.5px 0 5.5px;
    -moz-padding-end: 0px;
    -moz-padding-start: 0px;
    -moz-Box-sizing: border-Box;
    -webkit-Box-sizing: border-Box;
    Box-sizing: border-Box;
}

这是一个显示这种方法jsFiddle.

猜你在找的CSS相关文章