Html 不遵守输入字段的大小属性

Html 不遵守输入字段的大小属性,html,css,standards,stylesheet,Html,Css,Standards,Stylesheet,采取: 定义和用法“大小”属性指定一个图形的宽度 输入字段 对于和,尺寸 属性定义应可见的字符数。对于 在所有其他输入类型中,大小定义输入字段的宽度 像素 所以 如果这是真的,为什么我的字段宽度足够显示5个大写MMM?问题是size=x属性不是以像素为单位的。。。相反,它表示元素必须是用来容纳x字符的非常近似的大小。因此,例如,应该显示一个可以容纳2个字符的输入框 不幸的是,这因字体而异(尤其是可变宽度字体),因此您可能会注意到,将size属性设置为2实际上会呈现大小为5或类似的输入框。但是,如

采取:

定义和用法“大小”属性指定一个图形的宽度 输入字段

对于
,尺寸 属性定义应可见的字符数。对于 在所有其他输入类型中,大小定义输入字段的宽度 像素

所以
如果这是真的,为什么我的字段
宽度足够显示5个大写MMM?

问题是
size=x
属性不是以像素为单位的。。。相反,它表示
元素必须是用来容纳
x
字符的非常近似的大小。因此,例如,
应该显示一个可以容纳2个字符的输入框

不幸的是,这因字体而异(尤其是可变宽度字体),因此您可能会注意到,将size属性设置为2实际上会呈现大小为5或类似的输入框。但是,如果使用单空格字体,
size=2
应该呈现一个正好可以容纳2个字符的文本字段。。。或者至少靠近一点

但是,要以像素、ems等为单位设置
元素的宽度,请尝试使用
宽度
CSS属性:

<input type="text" style="width:20px" />


上述示例将使输入宽度精确为20像素宽,不包括边框和/或填充。

答案是,除非使用固定宽度字体,否则浏览器无法准确确定两个字符的宽度。我认为您的两个字符字段可能会并排容纳两个“m”

就W3C的正确性而言,以下内容来自W3C:

大小=cdata[CN] 此属性告诉用户代理控件的初始宽度。宽度以像素为单位,但类型属性为 值“text”或“password”。在这种情况下,其值引用 (整数)字符数


你不能从字面上理解这一点,因为这是不可能的

元素的宽度基于
size
属性和所使用的字体大小,但它不能精确地匹配该数量的字符,因为这是不可能的

并非所有字符都具有相同的宽度,因此字符
llll
将很容易适应
size=“4”
的输入,但字符
mmmm
不会

此外,还添加了一些额外的空间,因此使用
size=“2”
的输入宽度不会是使用
size=“1”
的输入宽度的两倍

用作平均字符宽度的内容可能取决于浏览器。我在Firefox中进行了测试,没有发现任何字符完全匹配,但是字符
*
与平均宽度非常匹配。

相同的“错误”信息在HTML4规范、HTML5规范、Sitepoint、Mozilla开发者网络和Microsoft的MSDN库中都有指定。所以这不仅仅是学校的错

无论如何,虽然规范中说size属性应该是可见字符的数量,但大多数web浏览器已经决定使用em单位的数量,也就是大写字母M的字符宽度

要以像素或您选择的任何单位精确指定宽度,请使用CSS width属性

回答您更新的问题:它是CSS样式应用于文本框的默认字体大小中大写字母M的宽度,但文本框内文本的字体大小通常较小


要使一组字符适合该框吗?你必须换成固定宽度的字体。

人们非常讨厌W3学校。我认为它们是“坏”的,但不是“坏”的。我用的是5个大写字母,这是我真正的挫折。@Doug Chamberlain:我打赌,如果你能用6个大写字母,它仍然合适!:D可能重复伟大的答案。我的问题是开玩笑的。我写了大约一个月的新应用程序,我一直在与之斗争,这个问题把我推向了边缘。我不敢相信没有一个HTML规范能够逻辑地实现这一点。输入字段应该以字符为中心,而不是以像素为中心!!!!一些html验证器现在抛出
错误:此时元素“input”上不允许使用属性“size”
Doug Chamberlain:是的,有一些特定的实现具有确切的规则,但它们因浏览器而异。因此,对这些内容的总体描述不可能准确,也不能从字面上理解。Chrome将其划掉,称其为非法值。px或em。