圣杯布局与双飞翼布局、Flex布局的经典案例
2019-07-28 本文已影响0人
前端驿站
面试时,经常会被问到关于各种布局的问题,今天抽空总结一下,直接上代码:
image.png要求:实现一个三栏布局--左右翼两侧width为定值,中间部分自适应,如下(以左侧width为200px,右侧为150px为例):
用圣杯布局实现
- html代码
<div id="header">Header</div>
<div id="container">
<div id="center" class="column">Center</div>
<div id="left" class="column">Left</div>
<div id="right" class="column">Right</div>
</div>
<div id="footer">Footer</div>
- CSS代码
body {
min-width: 550px;
}
#header{
width: 100%;
height: 80px;
line-height: 80px;
background: paleturquoise
}
#footer{
width: 100%;
height: 50px;
line-height: 50px;
background: paleturquoise
}
#container {
padding-left: 200px;
padding-right: 150px;
}
#container .column {
float: right;
}
#center, #footer, #header, #left, #right{text-align: center}
#center {
width: 100%;
height: 450px;
line-height: 450px;
background: palegreen
}
#left {
width: 200px;
height: 450px;
line-height: 450px;
background: blue;
margin-left: -200px;
}
#right {
width: 150px;
height: 450px;
line-height: 450px;
background: red;
margin-right: -100%;
position: relative;
left: 150px;
}
#footer {
clear: both;
}
特别注意:那就是页面的最小宽度:要想保证该布局效果正常显示,由于两侧都具有固定的宽度,所以需要给定页面一个最小的宽度,但这并不只是简单的200+150=350px。回想之前left使用了position: relative,所以就意味着在center开始的区域,还存在着一个left的宽度。所以页面的最小宽度应该设置为200+150+200=550px:
用双飞翼布局实现
- html代码
<div id="header">Header</div>
<div id="container" class="column">
<div id="center"></div>
</div>
<div id="left" class="column">Left</div>
<div id="right" class="column">Right</div>
<div id="footer">Footer</div>
- CSS代码
body {
min-width: 350px;
}
#header{
width: 100%;
height: 80px;
line-height: 80px;
background: paleturquoise
}
#footer{
width: 100%;
height: 50px;
line-height: 50px;
background: paleturquoise
}
#container {
width: 100%;
}
.column {
float: left;
}
#center, #footer, #header, #left, #right{text-align: center}
#center {
height: 450px;
line-height: 450px;
background: palegreen;
margin-left: 200px;
margin-right: 150px;
}
#left {
width: 200px;
height: 450px;
line-height: 450px;
background: blue;
margin-left: -100%;
}
#right {
width: 150px;
height: 450px;
line-height: 450px;
background: red;
margin-left: -150px;
}
#footer {
clear: both;
}
特别注意:
由于双飞翼布局没有用到position:relative进行定位,所以最小页面宽度应该为200+150=350px。但是当页面宽度缩小到350px附近时,会挤占中间栏的宽度,使得其内容被右侧栏覆盖
用Flex布局实现
- Html代码
<div id="header">Header</div>
<div id="container">
<div id="center">Center</div>
<div id="left">Left</div>
<div id="right">Right</div>
</div>
<div id="footer">Footer</div>
- Css代码
body {
min-width: 350px;
}
#header{
width: 100%;
height: 80px;
line-height: 80px;
background: paleturquoise
}
#footer{
width: 100%;
height: 50px;
line-height: 50px;
background: paleturquoise
}
#container{ display: flex;}
#center, #footer, #header, #left, #right{text-align: center}
#center {
height: 450px;
line-height: 450px;
background: palegreen;
flex: 1;
}
#left {
height: 450px;
line-height: 450px;
background: blue;
flex: 0 0 200px;
order: -1;
}
#right {
height: 450px;
line-height: 450px;
background: red;
flex: 0 0 150px;
}
#footer {
clear: both;
}