参考链接
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;}
