Answers:
尽管每个人都讨厌表的布局,但他们使用显式表标记或display:table-cell确实对此类事情有所帮助
<div style="width:300px; display:table">
<label for="MyInput" style="display:table-cell; width:1px">label text</label>
<input type="text" id="MyInput" style="display:table-cell; width:100%" />
</div>
这是一个简单干净的解决方案,无需使用JavaScript或表布局技巧。类似于此答案:输入文本自动宽度填充,其他元素浮动100%
重要的是,输入字段的跨度为display:block
。接下来的事情是必须首先按下按钮,然后是输入字段。
然后,您可以将按钮浮动到右侧,输入字段将填充剩余的空间。
form {
width: 500px;
overflow: hidden;
background-color: yellow;
}
input {
width: 100%;
}
span {
display: block;
overflow: hidden;
padding-right:10px;
}
button {
float: right;
}
<form method="post">
<button>Search</button>
<span><input type="text" title="Search" /></span>
</form>
一个简单的小提琴:http : //jsfiddle.net/v7YTT/90/
更新1:如果您的网站仅针对现代浏览器,则建议使用灵活框。在这里,您可以看到当前的支持。
更新2:这甚至适用于与输入字段共享全部内容的多个按钮或其他元素。这是一个例子。
我建议使用Flexbox:
不过,请务必添加正确的供应商前缀!
form {
width: 400px;
border: 1px solid black;
display: flex;
}
input {
flex: 2;
}
input, label {
margin: 5px;
}
<form method="post">
<label for="myInput">Sample label</label>
<input type="text" id="myInput" placeholder="Sample Input"/>
</form>
label
?我将特别感兴趣如何使用border-box
...来
flex: 2
不flex: 1
呢?
请为此使用flexbox。您有一个容器,它将子容器弯曲成一排。第一个孩子根据需要占用其空间。第二个可以弯曲以占用所有剩余空间:
<div style="display:flex;flex-direction:row">
<label for="MyInput">label text</label>
<input type="text" id="MyInput" style="flex:1" />
</div>
row
默认情况下,flex-direction已经存在,您不必指定它。
实现此目的的最简单方法是:
CSS:
label{ float: left; }
span
{
display: block;
overflow: hidden;
padding-right: 5px;
padding-left: 10px;
}
span > input{ width: 100%; }
HTML:
<fieldset>
<label>label</label><span><input type="text" /></span>
<label>longer label</label><span><input type="text" /></span>
</fieldset>
看起来像: http : //jsfiddle.net/JwfRX/
非常简单的技巧是使用CSS calc
公式。所有现代浏览器,IE9,各种移动浏览器都应支持此功能。
<div style='white-space:nowrap'>
<span style='display:inline-block;width:80px;font-weight:bold'>
<label for='field1'>Field1</label>
</span>
<input id='field1' name='field1' type='text' value='Some text' size='30' style='width:calc(100% - 80px)' />
</div>
你可以试试这个:
div#panel {
border:solid;
width:500px;
height:300px;
}
div#content {
height:90%;
background-color:#1ea8d1; /*light blue*/
}
div#panel input {
width:100%;
height:10%;
/*make input doesnt overflow inside div*/
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
/*make input doesnt overflow inside div*/
}
<div id="panel">
<div id="content"></div>
<input type="text" placeholder="write here..."/>
</div>
如果您使用的是Bootstrap 4:
<form class="d-flex">
<label for="myInput" class="align-items-center">Sample label</label>
<input type="text" id="myInput" placeholder="Sample Input" class="flex-grow-1"/>
</form>
更好的是,使用Bootstrap内置的功能:
<form>
<div class="input-group">
<div class="input-group-prepend">
<label for="myInput" class="input-group-text">Default</label>
</div>
<input type="text" class="form-control" id="myInput">
</div>
</form>