参考链接
CSS 常见布局
两列自适应布局
HTML
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
float + overflow: hidden
.parent {
overflow: hidden;
}
.left {
float: left;
margin-right: 20px;
}
.right {
overflow: hidden;
}
flex
.parent {
display:flex;
}
.right {
margin-left:20px;
flex:1;
}
grid
.parent {
display:grid;
grid-template-columns:auto 1fr;
grid-gap:20px
}
三栏布局
左右两栏固定宽度,中间部分自适应的三栏布局。
圣杯布局
HTML
<main class="container">
<div class="column center">center</div><!--先渲染,第一行-->
<div class="column left">left</div>
<div class="column right">right</div>
</main>
CSS
.container {
min-width: 200px;
padding-left: 200px; /*留出左空间*/
padding-right: 200px; /*留出右空间*/
}
.column{
float: left; /*同一行*/
}
.center{
width: 100%; /*中间自适应 左右挤到下一行*/
height: 300px;
background: greenyellow;
}
.left,.right{
width: 200px;
height: 200px;
background: yellow;
}
.left {
margin-left: -100%; /*同一行的开头*/
position: relative;
left: -200px; /*左移 避免覆盖中间*/
}
.right {
margin-left: -200px; /*同一行的末尾*/
position: relative;
right: -200px; /*右移 避免覆盖结尾*/
}
/*等高布局*/
.center,
.left,
.right {
padding-bottom: 10000px; /*扩展background*/
margin-bottom: -10000px; /*收缩边界*/
}
.container {
overflow: hidden; /*切割多余部分 且生成内部BFC*/
}
双飞翼布局
HTML
<main class="container">
<div class="column center">
<div class="inner">center</div> <!--先渲染,第一行-->
</div>
<div class="column left">left</div>
<div class="column right">right</div>
</main>
CSS
.container {
min-width: 600px;
}
.column{
float: left; /*同一行*/
}
.center{
width: 100%; /*中间自适应 左右挤到下一行*/
height: 300px;
background: greenyellow;
}
.left,.right{
width: 200px;
height: 200px;
background: yellow;
}
.center .inner {
margin: 0 200px; /*左右留出空间, 挤压内部空间*/
}
.left {
margin-left: -100%; /*移动到同一行左边*/
}
.right {
margin-left: -200px; /*移动到同一行右边*/
}
/*等高布局*/
.center,
.left,
.right {
padding-bottom: 10000px; /*扩展background*/
margin-bottom: -10000px; /*收缩边界*/
}
.container {
overflow: hidden; /*切割多余部分 且生成内部BFC*/
}
利用 flex
HTML
<div class="HolyGrail">
<header>header</header>
<div class="HolyGrail-body">
<div class="HolyGrail-middle">middle</div>
<div class="HolyGrail-left">left</div>
<div class="HolyGrail-right">right</div>
</div>
<footer>footer</footer>
</div>
CSS
.HolyGrail {
width: 1000px;
height: 500px;
display: flex;
flex-direction: column;
}
header, footer {
height: 100px;
background-color: dimgrey;
}
.HolyGrail-body {
display: flex;
min-height: calc(100% - 200px);
}
.HolyGrail-left {
order: -1;
width: 100px;
word-break: break-word;
background-color: dodgerblue;
}
.HolyGrail-right {
width: 100px;
word-break: break-word;
background-color: lightseagreen;
}
.HolyGrail-middle {
flex: 1;
background-color: orangered;
}
利用 Grid
HTML
<div class="HolyGrail">
<header>header</header>
<div class="HolyGrail-body">
<div class="HolyGrail-middle">middle</div>
<div class="HolyGrail-left">left</div>
<div class="HolyGrail-right">right</div>
</div>
<footer>footer</footer>
</div>
CSS
.HolyGrail {
height: 500px;
display: grid;
grid-template-rows: auto 1fr auto;
}
header, footer {
height: 100px;
background-color: dimgrey;
}
.HolyGrail-body {
display: grid;
grid-template-columns: 100px auto 100px;
}
.HolyGrail-left {
grid-column: 1;
grid-row: 1;
background-color: dodgerblue;
}
.HolyGrail-right {
background-color: lightseagreen;
}
.HolyGrail-middle {
background-color: orangered;
}