我能找到的每个资源都说textarea的cols属性表示水平线中的平均字符宽度数。然而,在Chrome,Firefox和Safari(全部在OSX上)中,使用等宽字体将textarea的cols设置为(例如)80,将允许您在包装之前键入81个字符。这不是一个四舍五入的问题; cols = 1添加相同的数量。这也不是填充或保证金问题;所有样式被剥离的行为都是一样的。它只是cols,而不是行。
这是指定的行为吗?如果是这样,为什么不在规范中,或者数百个在线指南/资源中的任何一个?如果这是一个非正式的约定,它是否足够可靠,我总是可以为80列设置cols = 79,而不是设置css宽度?
答案 0 :(得分:2)
cols
的指定含义是“指定平均字符宽度的可见宽度”,Windows平台上的浏览器遵循此。当然,如果字体不是等宽字体,则“平均字符宽度”变为模糊概念,浏览器的宽度分配可能不同。
包装是另一个问题。 HTML 4.01规范仍然反映了在textarea中没有自动包装的旧想法,但浏览器通常拒绝这一点。默认情况下,它们会自动换行超过cols
值的行,这在Windows浏览器中是完全正确的。
可以使用wrap
属性来控制自动换行,这是非标准的,但wrap=off
实际上是使浏览器按照HTML 4.01“标准”运行的唯一方法!
在HTML5草稿中,wrap
attribute已定义,但仅包含值soft
和hard
,因此它无法描述实现旧行为的任何方式。
作为一项规则,你不应该过分担心这一点。根据您对用户最有用的内容设置cols
属性。值80通常太大; 55或60将对应于正常的最佳线长度。为方便写作,除非数据是计算机代码或预先格式化的文本,否则应将字体设置为某种比例字体,这样您无论如何都不会获得每行的确切最大字符数。
答案 1 :(得分:1)
有两件事要对此负责。
<强>滚动条强>
根据W3C,滚动条有额外的空间。请参阅W3C中的说明。
cols = number [CN]
此属性指定平均字符宽度的可见宽度。用户应该能够输入比这更长的行,因此当内容超出可见区域时,用户代理应该提供一些滚动控件内容的方法。用户代理可以包装可见文本行以保持长行可见,而无需滚动。
<强>字体大小强>
仅当您的字体大小为浏览器默认字体大小的cols
时, 100%
属性才有效。如果你改变了,它就行不通。任何隐式/显式font-size
css规则都将改变行为。