CSS填充剩余宽度

时间:2013-09-23 14:29:33

标签: css

我有这个标题栏。

<div id="header">
        <div class="container">
            <img src="img/logo.png"/>
            <div id="searchBar">
                <input type="text" />
            </div>
            <div class="buttonsHolder">
                <div class="button orange inline" id="myAccount">
                    My Account
                </div>
                <div class="button red inline" id="basket">
                    Basket (2)
                </div>
            </div>

        </div>
    </div>

我需要搜索栏来填补div中剩余的差距。我该怎么做?

这是我的CSS

#header { 
    background-color: #323C3E;
    width:100%;
}

.button {
    padding:22px;
}


.orange {
    background-color: #FF5A0B;
}

.red {
    background-color: #FF0000;
}

.inline { 
    display:inline;
}

#searchBar {
    background-color: #FFF2BC;
}

6 个答案:

答案 0 :(得分:55)

使用calc

https://jsbin.com/wehixalome/edit?html,css,output

HTML:

<div class="left">
  100 px wide!
  </div><!-- Notice there isn't a space between the divs! *see edit for alternative* --><div class="right">
    Fills width!
  </div>

CSS:

.left {
  display: inline-block;
  width: 100px;

  background: red;
  color: white;
}
.right {
  display: inline-block;
  width: calc(100% - 100px);

  background: blue;
  color: white;
}

更新:作为在div之间没有空格的替代方法,您可以在外部元素上设置font-size: 0

答案 1 :(得分:51)

您可以使用CSS table-cells实现此布局。

稍微修改您的HTML,如下所示:

<div id="header">
    <div class="container">
        <div class="logoBar">
            <img src="http://placehold.it/50x40" />
        </div>
        <div id="searchBar">
            <input type="text" />
        </div>
        <div class="button orange" id="myAccount">My Account</div>
        <div class="button red" id="basket">Basket (2)</div>
    </div>
</div>

只需删除两个.button元素周围的包装元素。

应用以下CSS:

#header {
    background-color: #323C3E;
    width:100%;
}
.container {
    display: table;
    width: 100%;
}
.logoBar, #searchBar, .button {
    display: table-cell;
    vertical-align: middle;
    width: auto;
}
.logoBar img {
    display: block;
}
#searchBar {
    background-color: #FFF2BC;
    width: 90%;
    padding: 0 50px 0 10px;
}

#searchBar input {
    width: 100%;
}

.button {
    white-space: nowrap;
    padding:22px;
}

display: table应用于.container,并将其宽度设为100%。

对于.logoBar#searchBar.button,请应用display: table-cell

对于#searchBar,将宽度设置为90%,这会强制所有其他元素计算缩小到适合的宽度,搜索栏将展开以填充剩余的空间。

根据需要在表格单元格中使用text-align和vertical-align。

请参阅演示:http://jsfiddle.net/audetwebdesign/zWXQt/

答案 2 :(得分:1)

将您的图片包含在searchBar div中,它将为您完成任务

<div id="searchBar">
    <img src="img/logo.png" />                
    <input type="text" />
</div>

答案 3 :(得分:1)

我可能会按照

的方式做点什么
<div id='search-logo-bar'><input type='text'/></div>

用css

div#search-logo-bar {
    padding-left:10%;
    background:#333 url(logo.png) no-repeat left center;
    background-size:10%;
}
input[type='text'] {
    display:block;
    width:100%;
}

样本

http://jsfiddle.net/5MHnt/

答案 4 :(得分:0)

我知道回答这个问题还为时已晚,但我想它将对未来的所有人有所帮助。

使用 CSS3 FlexBox 。可以实现。 将标题设为display:flex,并将其整个宽度分为3部分。在第一部分中,我放置了徽标,在第二部分中放置了搜索栏,在最后一部分中放置了按钮容器。 将justify-content: between应用于标题容器,并将flex-grow:1应用于搜索栏。 而已。示例代码如下。

#header {
  background-color: #323C3E;
  justify-content: space-between;
  display: flex;
}

#searchBar, img{
  align-self: center;
}

#searchBar{
  flex-grow:1;
  background-color: orange;
  padding: 10px;
}

#searchBar input {
  width: 100%;
}

.button {
  padding: 22px;
}

.buttonsHolder{
  display:flex;
}
<div id="header" class="d-flex justify-content-between">
    <img src="img/logo.png" />
    <div id="searchBar">
      <input type="text" />
    </div>
    <div class="buttonsHolder">
      <div class="button orange inline" id="myAccount">
        My Account
      </div>
      <div class="button red inline" id="basket">
        Basket (2)
      </div>
    </div>
</div>

答案 5 :(得分:-2)

在看了很多可能的解决方案后,我做了一个快速的实验。这就是我最终的结果:

http://jsbin.com/hapelawake