我需要创建水平表单,其中每个字段出现在其标签下,并基本上形成列格式,其中标签和字段出现在一列中。 我尝试使用表格格式,但它与动态表单不相符,我不知道将在表单中出现的字段和标签的数量。
我搜索并找到了 HTML columns or rows for form layout? 第一种方法使用水平布局,但字段和标签不会以列格式显示。
.field-row {
overflow: hidden;
}
.field-row span {
display: block;
width: 30%;
float: left;
}
.field-row .field-container {
width: 70%;
float: left;
}
<div class="field-row">
<span>Field 1</span>
<span>Field 2</span>
<span>Field 3</span>
<div class="field-container">
<input type="text"/>
<input type="text"/>
<input type="text"/>
</div>
jsFiddle以上代码。
甚至有可能实现这个只是div或table是唯一的方法吗?
[编辑] 很抱歉,在原始问题中遗漏了此内容。
标签行需要在其周围有一个边框,以使其显示为单行。 这就是我将所有标签保存在一个div中的原因,以便这种风格可以应用于div。 更新了jsFiddle以获得预期的输出
答案 0 :(得分:0)
你想要这样的东西吗?
.field {
float: left;
}
您的HTML代码不尊重HTML文档的浮动和逻辑:您应该重新组合相同信息单元的元素(此处:标签及其输入)。
答案 1 :(得分:0)
这是html代码。
<div class="field-row">
<div class="field-container">
<span>Field 1</span>
<input type="text"/>
</div>
<div class="field-container">
<span>Field 2</span>
<input type="text"/>
</div>
<div class="field-container">
<span>Field 3</span>
<input type="text"/>
</div>
</div>
这是css
.field-row {
overflow: hidden;
}
.field-row span {
display: block;
width: 30%;
float: left;
}
.field-row .field-container {
width: 30%;
float: left;
}
.field-container span {
border: 1px solid #ccc;
display: block;
width: 93%;
}
请参阅Demo链接。
请参阅我更新的Demo
答案 2 :(得分:0)
使用css列可能是最简单的方法。
请参阅小提琴: http://jsfiddle.net/aBeF8/8/
.field-row {
-moz-column-width: 128px;
-webkit-column-width: 128px;
-column-width: 128px;
-webkit-column-gap: 0px;
column-gap: 0px;
}
label { display: block; border-bottom: 1px solid gray; }
input {
width: 90%;
display:inline-block;
}
确保容器的宽度不会太小或太大。否则,您可能需要相应地调整宽度。
另一种变体(根据您对边框的评论): http://jsfiddle.net/aBeF8/10/
并且,这个使用column-rule
给它一个表格外观: http://jsfiddle.net/aBeF8/11/
除了:您应该将label
与for
而不是span
用于标签。
答案 3 :(得分:0)
好的,所以我添加了一个新答案,而不是修改现有答案,因为您的要求已经改变或澄清,因为:
请看两者的答案: http://jsfiddle.net/aBeF8/13/
棘手的部分是您需要同时设置标签和输入的宽度,但文本输入默认为1px边框,包括宽度。 为了解决这个问题,我还在标签上添加了隐藏边框。
.field-row span{
border:1px solid #fff;
}