我觉得这可能已经在SO上得到了解答,但我找不到类似的问题。 一些更有经验的程序员告诉我,以下是不正确的语法:
<input type=...> Name </input>
以下是正确的语法:
<input type=..../>
我从来不知道这一点,我总是使用第一个片段,从未遇到任何我所知道的问题。有人可以解释为什么第一个是不正确的,为什么它仍然有效?它是由浏览器获救,还是只是一个样式问题?关于上述语法的任何解释都是可以接受的,因为下次我被要求编写HTML代码时,我不想冒险看起来像菜鸟。
答案 0 :(得分:6)
有人可以解释为什么第一个不正确
不允许输入元素具有子节点,输入的所有内容都由其属性描述。要将标签与输入use a <label>
element相关联。
为什么它仍然有效?
浏览器旨在应对不良输入。他们忽略了未打开的元素的结束标记。
答案 1 :(得分:2)
输入标记基本上称为 void elements ,即它们不会被设计为包含文本或其他元素,因此不需要结束标记。
实际上,有效性取决于您声明的 doctype 。
在此上下文中,/> is valid with HTML 5 and XHTML doctypes
对HTML 4.01 doctypes.
答案 2 :(得分:1)
浏览器非常宽容,但你的朋友是对的,语法错误。输入元素不应包含内容。有很多关于此的资源,其中之一是w3schools,其中说:
注意:
<input>
元素为空,它只包含属性。提示:使用
<label>
元素定义元素的标签。
您还可以在线找到验证工具,验证您的网页并向您报告任何问题:W3 validator。在发布页面之前验证页面是非常值得的。即使浏览器是宽容的并且会尝试尽可能好地显示页面,但像您这样的错误会使页面无效并增加页面呈现错误或理论上 - 根本不会 - 的风险。
在这种特殊情况下,浏览器可能会选择在输入之前或之后,输入内部(不太可能)显示文本,或者根本不显示。通过使HTML文档有效,可以降低意外惊喜的风险。
答案 3 :(得分:1)
HTML specification about the input
element说:
内容模型:
- 空。
和
在text / html中标记遗漏:
- 无结束标记
这意味着该元素没有任何内容,也没有任何结尾标记。
在HTML中,您可以像这样编写标记:
<input type= ... >
在XHTML中,标记遵循XML标准,因此没有内容的标记是自闭的:
<input type= ... />
在HTML5中,无论哪种写作方式都有效。
代码仍然有效的原因是浏览器试图充分利用无效代码。额外的</input>
代码不会阻止任何工作,浏览器会忽略它。浏览器无法理解它应该是什么,或者浏览器供应商预期该特定错误并且浏览器知道忽略它。