样式输入元素以填充其容器的剩余宽度

Joe*_*orn 184 html css

假设我有一个像这样的html片段:

<div style="width:300px;">
    <label for="MyInput">label text</label>
    <input type="text" id="MyInput" />
</div>
Run Code Online (Sandbox Code Playgroud)

这不是我的确切代码,但重要的是在固定宽度容器中的同一行上有标签和文本输入.如何设置输入样式以填充容器的剩余宽度而不包装并且不知道标签的大小?

dan*_*jar 147

这是一个简单而干净的解决方案,不使用JavaScript或表布局黑客.它与此答案类似:输入文本自动宽度填充100%,其他元素浮动

用输出字段包装输入字段很重要display:block.接下来的事情是按钮必须先来,然后是输入字段.

然后,您可以将按钮浮动到右侧,输入字段填充剩余空间.

HTML

form {
    width: 500px;
    overflow: hidden;
    background-color: yellow;
}
input {
    width: 100%;
}
span {
    display: block;
    overflow: hidden;
    padding-right:10px;
}
button {
    float: right;
}
Run Code Online (Sandbox Code Playgroud)

CSS

<form method="post">
     <button>Search</button>
     <span><input type="text" title="Search" /></span>
</form>
Run Code Online (Sandbox Code Playgroud)

一个简单的小提琴:http://jsfiddle.net/v7YTT/90/

更新1:如果您的网站仅针对现代浏览器,我建议使用灵活的方框.在这里你可以看到当前的支持.

更新2:这甚至适用于多个按钮或与输入字段共享的其他元素.这是一个例子.

  • 这非常有效.使用float:left而不是right来创建facebook样式标记器或类似的东西. (2认同)

cob*_*bal 127

尽管每个人都讨厌表格的布局,他们确实帮助这样的东西,使用显式表格标签或使用display:table-cell

<div style="width:300px; display:table">
    <label for="MyInput" style="display:table-cell; width:1px">label&nbsp;text</label>
    <input type="text" id="MyInput" style="display:table-cell; width:100%" />
</div>
Run Code Online (Sandbox Code Playgroud)

  • 关心分享乔尔? (38认同)
  • 同意,你应该与我们其他人分享你的*实际*解决方案,并将其标记为答案 - 因为这有点烦人. (8认同)

lei*_*man 51

我建议使用Flexbox:

请确保添加适当的供应商前缀!

form {
  width: 400px;
  border: 1px solid black;
  display: flex;
}

input {
  flex: 2;
}

input, label {
  margin: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<form method="post">
  <label for="myInput">Sample label</label>
  <input type="text" id="myInput" placeholder="Sample Input"/>
</form>
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用“ flex:2”而不是“ flex:1”? (2认同)

bas*_*rat 40

请使用flexbox.你有一个容器,可以将它的孩子变成一排.第一个孩子根据需要占据空间.第二个弯曲以占用所有剩余空间:

<div style="display:flex;flex-direction:row">
    <label for="MyInput">label&nbsp;text</label>
    <input type="text" id="MyInput" style="flex:1" />
</div>
Run Code Online (Sandbox Code Playgroud)


lla*_*nge 17

实现这一目标的最简单方法是:

CSS:

label{ float: left; }

span
{
    display: block;
    overflow: hidden;
    padding-right: 5px;
    padding-left: 10px;
}

span > input{ width: 100%; }
Run Code Online (Sandbox Code Playgroud)

HTML:

<fieldset>
    <label>label</label><span><input type="text" /></span>
    <label>longer label</label><span><input type="text" /></span>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

看起来像: http ://jsfiddle.net/JwfRX/


Who*_*ome 5

非常简单的技巧是使用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>
Run Code Online (Sandbox Code Playgroud)

  • 这假设您知道标签的确切宽度或愿意接受额外的空间。 (4认同)