我正在尝试使用div创建一个组合控件,其中包含:
- 标签
- 文本框
HTML
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.form-control {
background-color: yellow;
margin: 0;
padding: 0;
}
.form-control[data-layoutOrder=horizontal] div[data-section=title] {
display: inline-block;
background-color: red;
width: 50%;
margin: 0;
padding: 0;
}
.form-control div[data-section=data] {
background-color: green;
display: inline-block;
width: 50%;
margin: 0;
padding: 0;
}
<div class="form-control" data-layoutOrder="horizontal">
<div data-section="title">
<label for="firstName">First Name</label>
</div>
<div data-section="data">
<input type="text" placeholder="First Name" id="firstName">
</div>
</div>
我尝试将 padding、margin 等设置为 0,但都没有起作用。是什么原因导致文本框 div 浮动到了下一行呢?当我将其中一个 div 的宽度改为 49% 时,两个 div 就可以在同一行上对齐了。我不明白为什么会这样,是否真的需要使用 float 呢?或者我遗漏了些什么。
注意:我可以使用 float 属性让它们相邻 - 对于标签 div 使用 "float:left" & 对于文本框 div 使用 "float:right" 属性。但是我想知道为什么未使用 float 将宽度设置为 50% 不起作用。我真的需要使用 float 吗?还是我遗漏了什么。
编辑 1: 我发现另一个解决方案是使用 "white-space" 属性。
.form-control {
background-color: yellow;
margin:0;
padding:0;
white-space:nowrap;
}
.form-control div[data-section=data] {
background-color : green;
display: inline-block;
width: 50%;
margin:0;
padding:0;
white-space:normal;
}
EDIT 2: 使用
flex
样式也有预期效果。在搜索更多内容时,我还发现可以使用 flex
样式实现相同的效果。请注意,它不支持 IE 10 及以下版本。请参考 caniuse。.form-control {
background-color: yellow;
margin: 0;
padding: 0;
display: flex;
display: -webkit-flex;
}
.form-control[data-layoutOrder=horizontal] div[data-section=title] {
display: inline-block;
background-color: red;
width: 50%;
margin: 0;
padding: 0;
flex:1;
}
.form-control div[data-section=data] {
background-color: green;
display: inline-block;
width: 50%;
margin: 0;
padding: 0;
flex:1;
}