我已经看过几个开发人员如何使用表格,div和列表构建表单的示例;所有这些都不是非常语义的。构建HTML文档的最佳方法是什么,因此它打破了每个标签和输入组到下一行并且可以轻松阅读 - 不使用CSS ?
(我觉得ol和ul只是tr和td的替代品。在我看来,表格不是内容或定义列表)
我几乎觉得div是最好的格式,因为div是一个清晰的“分区”或项目分组,但我不确定。
示例HTML
<form>
<fieldset>
<legend>Your Favorites</legend>
<label for="color">Color</label>
<input id="color" name="color" type="text" />
<label for="food">Food</label>
<input id="food" name="food" type="text" />
<button type="submit">Submit</button>
</fieldset>
</form>
答案 0 :(得分:7)
注意不要让语义和结构混淆。存在HTML元素,主要用于表达结构。语义学就是赋予结构意义。虽然某些 HTML标记中存在某些语义含义,但它具有非常通用的含义。所以我的答案就是这样做的:
<强>语义强>
为什么通过表单表达语义是很重要的?标记应该由标准浏览器以外的客户端使用吗?这是一个特殊的用例吗?
如果您需要为表单元素注入语义含义,请使用适当的类和ID来装饰结构标记 - 无论哪种元素类型,您都不会从表单中的HTML元素中获得任何语义含义您用来分组/分隔您的输入。
<强>结构强>
<br />
标记。<div>
,<ul>
,<ol>
或<dl>
- 所有这些标记都可以同等地实现此目标以及其他人。<div>
元素。列表元素表示不同的子项是一组,并且像@bookcasey在他的评论中所说,在大多数情况下,表单是输入列表,它们在逻辑上属于一起。那是我的2c。
对于它的价值而言,如果不能使用CSS,我会在这种情况下使用<ul>
(如果订单很重要,则使用<ol>
)。当我有CSS时,我使用<dl>
,这给了我更多的样式控制。
<强>更新强>
在回应Alohci的论点时,我正在改变我对不使用<div>
元素的立场。通过将它们包装在form
或fieldset
中,它们在逻辑上已经组合在一起 - 这与使用适当的类(即Alohci在评论中建议的<div class="field">
)一起将提供结构和适当的语义。
答案 1 :(得分:1)
我个人使用以下内容:
<form>
<fieldset>
<legend>Legend</legend>
<label for="element-id1"><span class="label">Label</span><input type="text" id="element-id1" /></label>
<label for="element-id2"><span class="label">Label</span><input type="text" id="element-id2" /></label>
</fieldset>
</form>
...并将标签设置为display: block
。 .label
我也设置为display: block
设置宽度。
我确信有人会说span
是不必要的标记,但这取决于你如何看待它。我认为这是必要的,因为它允许我很好地构建表单元素的标签,从而有助于实现。
- 编辑 -
编辑完成后,我会推荐以下内容:
<form>
<fieldset>
<legend>Legend</legend>
<ul>
<li><label for="element-id1">Label</label><input type="text" id="element-id1" /></li>
<li><label for="element-id2">Label</label><input type="text" id="element-id2" /></li>
</ul>
</fieldset>
</form>