我有这个标题栏。
<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;
}
答案 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。
答案 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%;
}
样本
答案 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)
在看了很多可能的解决方案后,我做了一个快速的实验。这就是我最终的结果: