在HTML表单中布局的最佳方式?

Ton*_*ony 33 html css forms layout

我想显示一个包含标记文本字段的HTML表单,如下所示:

      First Name:  [_____________]
       Last Name:  [_____________]
   Date of Birth:  [________]

我明显的方法是使用a <TABLE>并简单地将标签和文本字段放在其单元格中,但是有更好的方法,例如基于CSS的方法吗?

编辑:

  1. 我正在寻找一种方法来减少HTML文件中的冗长.
  2. 是的,我正在寻找标签的自动调整大小.查看有关包装标签相关问题

T.J*_*der 37

如果您需要这些字段左侧的标签,请继续使用表格.表格不仅会在较旧的浏览器上很好地降级,而且会将标签列自动调整为其中的文本大小(假设您white-space: no-wrap在包含标签的单元格上使用,和/或 - 这是真正的异端 - 可信赖的旧nowrap属性该th标签),他们处理正在取得相当狭窄的很好,他们很容易.使每个标签单元成为标题,每个字段单元为正常单元.这是一个痛苦,但要确保标签真的是labels并链接到他们的字段,因为可访问性很重要,即使(或许特别是如果)你在非语义上使用表.

我很想知道CSS解决方案可以自动调整标签列的大小,处理得很窄,并且不涉及18个黑客来处理浏览器之间的不一致.我很高兴见到他们.但每当我看到(那几个)时,它仍然是一个缺口.需要填充的间隙,IMV,所以我们可以在不穿运动衫的情况下停止这样做.

对于那些不需要左侧标签的人来说,请查看jball的答案,以获得一个好看的语义替代方案.

  • @TJ:这是一个原则问题.表格**不是**用于布局.****永远. (9认同)
  • @Josh:不要把它拖出来(特别是因为我最初认为这不是表的语义用法),但Goat和roufamatic有一个有趣的观点.如果我有一系列行,其中'th`包含(比如说)"名字:"和下面的`td`包含"Sam",下一行的'th`是"姓氏:",然后是`td `="Samson",这将是细胞数据.那么,如果"Sam"和"Samson"是字段,为什么不是表格数据呢?这是一个有趣的问题...... (5认同)
  • @Josh:你是对的,桌子不适合布局.除了使用表格表格是完全语义的,因为表格是表格数据.一般来说,"纯CSS"一词让我想把头发拉出来.根据定义,纯CSS网站是一个不存在的概念. (3认同)
  • +1给我.CSS推送的目的不是要摆脱所有`<table />`,而是停止使用`<table />`来渲染非表格布局.但是,如果你实际上正在渲染一个表...使用`<table />`!这是语义上正确的选择. (2认同)

jba*_*all 19

就可用性而言,如果垂直空间不是限制因素,则每个字段上方带有标签的字段列表是最快阅读和填写的,并且可以在美学上完成.有关更多信息,请参阅网络上的许多可用性研究,例如.http://www.lukew.com/resources/articles/web_forms.html

  • +1用于引用"可用性研究"的问题,我希望将焦点放在桌面布局圣战上 (4认同)

Bor*_*éry 14

我想使用定义列表(<dl>),它们往往在语义上是正确的.标签由用户输入定义.这对我有意义. <dl>比表更准确地表达语义内容.

<dl>
    <dt><label for="name>Name</label></dt>
    <dd><input type="text" id="name" /></dd>

    <dt><label for="email>Email</label></dt>
    <dd><input type="text" id="email" /></dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

这是一个例子

顺便说一句,它们在所有浏览器中优雅地降级,甚至基于文本.


Cat*_*ish 5

我认为这样的事情就是我所做的,但也不会自动调整到文本的长度,但在我看来它更干净

<form>
  <label for="firstName">First Name</label>
  <input type="textfield" name="firstName" />

  <label for="lastName">Last Name</label>
  <input type="textfield" name="lastName" />
</form>

label {
  float:left;
  width:30px;
}

input {
  float:left;
  margin-left:30px;
}
Run Code Online (Sandbox Code Playgroud)

  • 固定宽度表示您的演示取决于内容 (3认同)