在输入上方或附近放置标签的主题是一个单独的讨论(我建议阅读 Luke Wroblewski 关于该主题的书:http://www.lukew.com/resources/articles/web_forms.html)
样式化 Web 表单非常简单。首先,您要确保以语义适当的方式标记表单。这是您现在使用 CSS 进行布局而不是表格的主要优势之一。有关这方面的更多信息,请参阅关于该主题的优秀 List Apart 文章:http://www.alistapart.com/articles/prettyaccessibleforms/
现在在上述文章中,作者使用了一个名为 inline-block 的显示属性。这是实现效果的一种相当简单的方法。只需申请:
label {
display: inline-block;
width: 120px; /* Specify the width that works for your design */
}
并且您的标签将具有固定长度,并且输入与它们相邻。但是,如果您不指定宽度而只使用:
label, input {
display: inline-block;
}
然后,您的标签和输入将按照您所说的“自动”内联排列。这里的问题不是技术问题,而是设计问题。如果您输入的内容不垂直排列,那么用户填写表单会更加困难。这是您应该记住的另一个考虑因素,因为以这种方式定位标签和输入比适应固定宽度更容易。
另一个问题是 inline-block 在某些浏览器中不能正常工作。 Inline-block 在旧版本的 Firefox 或 IE 中不可靠。所以我倾向于使用另一种方法。假设您使用列表以语义适当的方式标记表单。那么在这种情况下,你可以有类似的东西:
<form>
<fieldset>
<legend>Health information:</legend>
<ul>
<li><label>Height</label> <input type="text" size="3" /></li>
<li><label>Weight</label> <input type="text" size="3" /></li>
</ul>
</fieldset>
</form>
在这种情况下,我们可以使用固定宽度和绝对定位来相邻排列我们的元素:
form li {
display: block;
padding: 2px;
position: relative;
}
/* The top and left position of 2px simulate
padding since we are using absolute positioning. */
form label {
display: block;
left: 2px;
position: absolute;
top: 2px;
width: 120px;
}
form input {
display: block;
margin-left: 125px;
}
标签相对于列表项定位,输入被推到左边距的一侧。但是这种方法有一个问题。此方法仅适用于硬编码宽度。更重要的是,多行标签无法正确清除。所以在这种情况下,我们可以采取类似的方法,但使用浮动和溢出。所以我们可以在我之前展示的同一个 html 标记上使用这个替代 CSS:
form li {
display: block;
overflow: hidden; /* This clears the floating element. */
padding: 2px;
}
form label {
display: block;
float: left;
padding-right: 5px;
}
form input {
display: block;
}
现在使用此方法,标签浮动到输入的左侧。如果您不指定宽度,则标签将与其中的内容一样宽(直到 HTML 文档中它的父节点的宽度)。通过在父对象上将溢出设置为隐藏,无需清除元素。此技术适用于硬编码宽度或继承的默认宽度:自动。
最后但并非最不重要的一点是,如果您想使用最有效的表单方法(输入顶部的标签),这已被证明是用户可以最快完成的表单样式,是您唯一需要的 CSS完成这个是:
label, input {
display: block;
}
另一个注意事项 - 像这样标记 HTML 时,您可能想知道所有这些列表元素会创建项目符号等。您应该选择在文档中包含 CSS 重置以确保浏览器之间的一致性。我推荐 Eric Meyer 的:
http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/