我希望有一个宽度为150px的侧边导航,其余内容则浮动在其旁边。我希望内容的宽度为100%减去150px的侧边导航宽度。这个可行吗?
我知道可以用Javascript实现,但我更想知道一个简单的CSS解决方案,类似于:
有这样的解决方案吗?
我知道可以用Javascript实现,但我更想知道一个简单的CSS解决方案,类似于:
width:100%-150px;
有这样的解决方案吗?
width: calc(100% - 150px);
注意:一定要在减号两侧留有空格。CSS解析器需要明确它正在解析一个减号,后面跟着一个正整数。
有许多不同的方法可以实现这一点,以下是其中的几种。
float
+ overflow
:注意,内容框不应设置任何浮动,并且 overflow:auto
可以防止换行文本进入侧边栏框下面。
.container:after {
content: "";
display: table;
clear: both;
}
.sidebar {
background: pink;
width: 150px;
float: left;
}
.content {
background: gold;
overflow: auto;
}
<div class="container">
<div class="sidebar">sidebar</div>
<div class="content">content</div>
</div>
float
+ calc
:请查看浏览器支持表格 - 基本支持IE9+。
.container:after {
content: "";
display: table;
clear: both;
}
.sidebar {
background: pink;
width: 150px;
float: left;
}
.content {
background: gold;
width: calc(100% - 150px);
float: left;
}
<div class="container">
<div class="sidebar">sidebar</div>
<div class="content">content</div>
</div>
display:inline-block
+ calc
:.container {
font-size: 0; /*remove white space*/
}
.sidebar, .content {
font-size: 16px; /*reset font size*/
display: inline-block;
}
.sidebar {
background: pink;
width: 150px;
}
.content {
background: gold;
width: calc(100% - 150px);
}
<div class="container">
<div class="sidebar">sidebar</div>
<div class="content">content</div>
</div>
.container {
display: table;
width: 100%;
}
.sidebar, .content {
display: table-cell;
}
.sidebar {
background: pink;
width: 150px;
}
.content {
background: gold;
}
<div class="container">
<div class="sidebar">sidebar</div>
<div class="content">content</div>
</div>
.container {
display: flex;
}
.sidebar {
background: pink;
flex: 0 0 150px;
}
.content {
background: gold;
flex: 1;
}
<div class="container">
<div class="sidebar">sidebar</div>
<div class="content">content</div>
</div>
一个选择是指定
.content {
left: 0;
position: absolute;
right: 150px;
}
.sidenav {
float: right;
margin-right: -150px;
}
针对内容,使用width: 100%
代替。注意:我假设父元素采用相对定位(包含内容和侧边导航)。
祝你好运!