为什么这会在W3c html验证中出错?我正在使用HTML 4.01 Strict doctype。
<form method="get" action="/search" id="search">
<input type="text" value="search" maxlength="80" class="textbox" >
</form>
这不是吗?
<form method="get" action="/search" id="search">
<div>
<input type="text" value="search" maxlength="80" class="textbox" >
</div>
</form>
这是错误
文档类型不允许元素 “INPUT”在这里;缺少一个“P”, “H1”,“H2”,“H3”,“H4”,“H5”,“H6”, “PRE”,“DIV”,“ADDRESS”开始标记
是否有必要将input
放入div
?
答案 0 :(得分:3)
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->
form可以包含block元素(另一种形式除外)或脚本元素。
输入不是块元素,但大多数块元素可能包含内联元素,包括输入。
答案 1 :(得分:3)
通过严格验证,您需要在输入字段周围添加块元素;
这里最好的选择是使用<fieldset>
。
答案 2 :(得分:1)
官方原因是在HTML4严格中,FORM元素只能包含块元素,但块元素又允许包含表单输入。因此,结构form->block element->form input
是必须使用的。
我找不到一个严肃的理由,为什么会这样。听起来HTML的作者不希望允许表单从一行开始,然后换行到下一行,然后在第三行的某个地方有一个提交按钮(通过重新定义{{1},您仍然可以实现如果需要,表单的属性。例如,this article on 24ways只是声明“它是Transitional和Strict标准之间的区别”。
Another comparison州(他们谈论的是xhtml vs html,但想法是一样的):
在XHTML中,需要对元素进行编码 以语义的方式。表格和表格 不能包含在段落中,但是 表单元素,作为内联元素,需要包含在语义中 块级元素,例如 段落或表格单元格。
这让我觉得FORM元素不足以包含其他元素。它通常不用于标记代码,它更像是一个技术元素,用于显示将数据发布到的位置。因此,它在技术上是一个BLOCK元素,但它需要更多的“语义”来包含实际的输入字段。