Why do textarea `cols` and input text `size` yield different element widths
我试图分别了解textarea和输入文本的
根据文档,这两个属性都应确定元素的大小,以使给定数量的字符可以放入其中:
...size attribute specifies the visible width, in characters, of
an input element.Note the cols and rows attributes (...) specify how many columns tall and rows wide to make
the text area. The values are measured in characters
.
但是,如果我尝试为两个元素分配相同的值,则它们最终将具有不同的宽度。输入字段太小,无法容纳给定数量的字符和文本区域-太宽。最重要的是,两者都有不同的宽度。
例如:
1 2 | <input type="text" size=40> <textarea cols="40"></textarea> |
产生:
看到这里-http://jsfiddle.net/yjERR/
我已经在Chrome 29和Firefox 24中进行了尝试。
我知道宽度取决于字体样式,但是两个元素是否仍应具有相同的宽度?是内部元素边距还是其他原因导致这种差异?
更新
看来这两个元素具有不同的字体样式,但是分配相同的font-family和font-size仍会产生不同的宽度:
过分提琴
"字符的可见宽度"是一个模糊的表述,因为在大多数字体中,字符的宽度会有所不同。因此,除非您使用等宽字体,否则您不能期望获得容纳确切数量字符的控件。
有两个基本的要素使
如果您确实想使元素等宽(我认为您不应该如此),则可以显式设置字体和宽度,例如
1 2 3 4 5 6 | input, textarea{ font-family: Arial, sans-serif; font-size: 100%; width: 26em; /* fallback for the next one, for browsers not recognizing ch */ width: 40ch; /* sets the width to 40 times the width of the digit"0" */ } |
将两个元素设置为相同的
这是一个jsFiddle示例
如果重要的是使它们容易且精确地相等地变宽,则可以使用行值为1的textarea代替输入文件。
毫无疑问,答案来得有点晚,但这不花任何钱...