如何在HTML中对齐输入表单

yos*_*osh 107 html forms alignment

我是HTML的新手,我正在努力学习如何使用表单.

到目前为止,我遇到的最大问题是调整表格.以下是我当前HTML文件的示例:

<form>
 First Name:<input type="text" name="first"><br />
 Last Name:<input type="text" name="last"><br />
 Email:<input type="text" name="email"><br />
</form>
Run Code Online (Sandbox Code Playgroud)

问题是,"电子邮件"之后的字段框在间距方面与第一个和最后一个名称相比有很大差异.什么是"正确"的方式使它们"排列"基本上?

我正在努力练习良好的形式和语法...很多人可能会用CSS做这个我不确定,到目前为止我只学习了HTML的基础知识.

Clé*_*ent 122

接受的答案(以像素为单位设置显式宽度)使得很难进行更改,并在用户使用不同的字体大小时中断.另一方面,使用CSS表格效果很好:

form  { display: table;      }
p     { display: table-row;  }
label { display: table-cell; }
input { display: table-cell; }
Run Code Online (Sandbox Code Playgroud)
<form>
  <p>
    <label for="a">Short label:</label>
    <input id="a" type="text">
  </p>
  <p>
    <label for="b">Very very very long label:</label>
    <input id="b" type="text">
  </p>
</form>
Run Code Online (Sandbox Code Playgroud)

这是一个JSFiddle:http://jsfiddle.net/DaS39/1/

如果您需要右对齐的标签,只需添加text-align: right到标签:http://jsfiddle.net/DaS39/


编辑:还有一个快速说明:CSS表还允许您使用列:例如,如果您想使输入字段占用尽可能多的空间,您可以在表单中添加以下内容

<div style="display: table-column;"></div>
<div style="display: table-column; width:100%;"></div>
Run Code Online (Sandbox Code Playgroud)

你可能想要添加white-space: nowraplabels那种情况.

  • @MuhammadUmer因为表格会混淆屏幕阅读器和许多辅助设备,而CSS表格会将表示和内容分开.因此,您的表单仍然可以通过屏幕阅读器或阅读助手轻松解析,并且可以很好地显示. (8认同)
  • 我喜欢这个解决方案.这意味着我不必担心我的列不可避免地会随着页面在开发过程中的变化而改变宽度.+1 (4认同)
  • 好吧,td中的拟合标签表明它是有组织的表格数据的一部分,如图表; 这不是这里的情况.此外,使用HTML表格会使将来更改布局变得更加困难,或者使其适应各种屏幕尺寸(想想手机和平板电脑). (3认同)
  • 我一直强烈抵制CSS表结构与@MuhammadUmer所做的相同的论点,直到今天!我屈服了,决定尝试一下,最后看到切换的价值!此外,它的CSS,从长远来看,使事情变得更容易 (3认同)
  • 您如何使用此解决方案跨列?为了居中对齐提交按钮。 (2认同)

ser*_*alk 55

另一个例子,这使用CSS,我只是将表单放在带有容器类的div中.并指定其中包含的输入元素是容器宽度的100%,并且两侧都没有任何元素.

.container {
  width: 500px;
  clear: both;
}

.container input {
  width: 100%;
  clear: both;
}
Run Code Online (Sandbox Code Playgroud)
<html>

<head>
  <title>Example form</title>
</head>

<body>
  <div class="container">
    <form>
      <label>First Name</label>
      <input type="text" name="first"><br />
      <label>Last Name</label>
      <input type="text" name="last"><br />
      <label>Email</label>
      <input type="text" name="email"><br />
    </form>
  </div>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案似乎不起作用.输入元素不是左对齐的.下面的表解决方案有效. (3认同)
  • 完美,只是为我节省了很多麻烦. (2认同)

amo*_*ett 29

如果您不熟悉HTML,那么一个简单的解决方案就是使用表来排列所有内容.

<form>
  <table>
    <tr>
      <td align="right">First Name:</td>
      <td align="left"><input type="text" name="first" /></td>
    </tr>
    <tr>
      <td align="right">Last Name:</td>
      <td align="left"><input type="text" name="last" /></td>
    </tr>
    <tr>
      <td align="right">Email:</td>
      <td align="left"><input type="text" name="email" /></td>
    </tr>
  </table>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 快速简单的解决方案.离开宗教CSS辩论午休并完成工作. (40认同)
  • @EmmanuelBourg:这不正是CSS表的意思吗?在不混淆屏幕阅读器的情况下实现类似表格的布局?OP请求的布局实际上很容易使用CSS表格实现(参见[下]](http://stackoverflow.com/a/23741073/695591)) (6认同)
  • @ClarkeyBoy - 只要做好这份工作就关心他们. (3认同)
  • @ClarkeyBoy - 请阅读此答案,以及W3C的帖子:http://stackoverflow.com/a/4707368/40411 (2认同)

小智 16

我发现将标签的显示更改为内联块并设置宽度要容易得多

label {
    display: inline-block;
    width:100px;
    text-align: right;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

你应该使用一张桌子.作为逻辑结构的问题,数据是表格式的:这就是您希望它对齐的原因,因为您希望在二维结构中显示标签不仅与输入框相关,而且还与彼此相关.

[考虑如果要显示字符串或数值而不是输入框,您会怎么做.]

  • 我很欣赏你的方法。 (2认同)