【发布时间】:2015-01-25 18:32:18
【问题描述】:
我想根据它们应该能够在每一行中容纳的 等宽 个字符的最大数量来指定文本区域的宽度既没有多余的剩余空间也没有溢出 .
有一些类似的问题,但一致的答案,即使用cols 属性,显然不起作用,如this jsFiddle 所示。它的 HTML 是这样的:
<textarea cols="1" rows="2">1</textarea><br/>
<textarea cols="10" rows="2">1234567890</textarea><br/>
<textarea cols="20" rows="2">12345678901234567890</textarea><br/>
<textarea cols="40" rows="2">1234567890123456789012345678901234567890</textarea><br/>
<textarea cols="80" rows="2">12345678901234567890123456789012345678901234567890123456789012345678901234567890</textarea><br/>
实际宽度总是大大大于必要宽度。 (在 Safari 中,无论cols 的指定值如何,至少超出部分似乎保持不变;但是对于 Chrome,超出部分会随着 cols 值的增长而增长。)
我还尝试将 CSS width 属性与 em 和 ex 单位一起使用。后者导致字段比所需的字符窄几个字符,而前者导致比cols 属性产生的宽度更大。
最后,我研究了将宽度设置为 ex 单位,作为通过将字符数乘以一些软糖因子获得的数字。这不仅令人作呕(我们不应该做浏览器的工作),而且也不是跨浏览器:我发现 Chrome 和 Safari(例如)的软糖因素有很大不同(1.333 与 1.415)。
有没有专业的1方法可以做到这一点?
1即跨浏览器、无需猜测、无需破解、记录在案、经过深思熟虑等。
【问题讨论】:
-
虽然这不是一个独立的答案,但我想指出
contenteditable属性。也许有人可以想到使用它的解决方案.. jsfiddle.net/c230v4kx -
覆盖
<textarea>元素的字体为固定宽度,然后将元素宽度设置为em或ex单位 -
@StephenThomas:我已经按照你的建议做了,正如我原来的帖子中所描述的那样;我还详细解释了此解决方案失败的原因。
-
你必须使用固定宽度的字体
-
@StephenThomas:我发布的 jsFiddle 使用了固定宽度的字体。