css 布局
2018-10-03 本文已影响0人
阿龙哟
一左右布局
1.利用float,注意父级元素要清除浮动clearfix
<div class="box clearfix">
<div class="box1"></div>
<div class="box2"></div>
</div>
.box{border:1px solid blue;}
.box1{width:50%;height:200px;background:red;float:left;}
.box2{width:50%;height:200px;background:black;float:left;}
.clearfix::after{content:'';display:block;clear:both;}
image.png
2.利用内联块元素,注意内联元素排在一起会有4px的间隙,在父级元素上使用font-size=0可以解决,另外当元素display:inline-block时需要使用vertical-align:top来解决有行高排列问题
image.png.box{border:1px solid blue;font-size:0;}
.box1{width:50%;height:200px;background:red;display:inline-block;}
.box2{width:50%;height:200px;background:black;display:inline-block;}
3.利用绝对定位布局
.box{border:1px solid blue;position:relative;}
.box1{width:50%;height:200px;background:red; position:absolute; left:0;top:0;}
.box2{width:50%;height:200px;background:black;position:absolute; right:0;top:0;}
4.flex布局
.box{ border:1px solid blue;display:flex;}
.box1{width:50%;height:200px;background:red;}
.box2{width:50%;height:200px;background:black;}
image.png
二、左中右布局(三列布局)
1.三列水平布局,如果列的宽度都是固定的,实现方式与上面两列布局相似,使用浮动即可达到效果。
<div class="container">
<div class="leftbox">左侧列</div>
<div class="midbox">中间列</div>
<div class="rightbox">右侧列</div>
</div>
.container{
width:150px;
height:150px;
border:1px solid }
.leftbox {width: 50px;height:100%;float: left;background:red ;}
.midbox {width: 50px;float: left;height:100%;background:blue;}
.rightbox {width: 50px;float: right;height:100%;background:green;}
image.png
leftbox和midbox设置左浮动,rightbox设置右浮动。但关键的是,三个子元素的总宽度不能大于或者等于父元素的宽度。
2 float+margin 方法
<style>
*{padding:0;margin:0;border: 0;}
.box{width:600px;overflow: hidden;}
.div1{width:80px;height:300px;background-color: red;float: left;}
.div2{height:300px;background-color: yellow;margin: 0px 100px; }
.div3{width:80px;height:300px;background-color: black;float: right;}
</style>
<div class="box">
<div class="div1"></div>
<div class="div3"></div>
<div class="div2"></div>
</div>
千万要注意!!!当非float的元素和float的元素在一起的时候,如果非float元素在先,那么float的元素将被排斥,所以div3和div2应该换个位置
3.flex布局
<style>
.box{display: flex;width:400px;height:300px;}
.div1{width:100px;height:300px;background-color: red;}
.div2{flex: 1;height:300px;background-color: yellow}
.div3{width:50px;height:300px;background-color: black}
</style>
4.绝对定位
<style>
*{padding:0;margin:0;}
.box{position: relative;width:400px;height:300px;}
.div1,.div2{position: absolute;width:50px;height:300px;}
.div1{left:0px;background-color: red;}
.div2{right:0px;background: black;}
.div3{height:300px;background-color: yellow;}
</style>
5.圣杯布局
<section class="layout grail">
<h1>圣杯布局</h1>
<article class="left-center-right">
<div class="center">
1.这是三栏布局的圣杯布局解决方案;
2.这是三栏布局的圣杯布局解决方案;
3.这是三栏布局的圣杯布局解决方案;
4.这是三栏布局的圣杯布局解决方案;
5.这是三栏布局的圣杯布局解决方案;
6.这是三栏布局的圣杯布局解决方案;
7.这是三栏布局的圣杯布局解决方案;
8.这是三栏布局的圣杯布局解决方案;
9.这是三栏布局的圣杯布局解决方案;
</div>
<div class="left"></div>
<div class="right"></div>
</article>
</section>
<style>
.layout.grail .left-center-right {
padding: 0 300px;
min-width: 304px;
}
.layout.grail .left-center-right>div {
float: left;
min-height: 100px;
}
.layout.grail .center {
background: yellow;
}
.layout.grail .left {
margin-left: -100%;
width: 300px;
background: red;
position: relative;
left: -300px;
}
.layout.grail .right {
margin-left: -300px;
width: 300px;
background: blue;
position: relative;
right: -300px;
}
</style>
image.png
6.双飞翼布局
<section class="layout ued">
<h1>双飞翼布局</h1>
<article class="left-center-right">
<div class="wrap">
<div class="center">
1.这是三栏布局的双飞翼布局解决方案;
2.这是三栏布局的双飞翼布局解决方案;
3.这是三栏布局的双飞翼布局解决方案;
4.这是三栏布局的双飞翼布局解决方案;
5.这是三栏布局的双飞翼布局解决方案;
6.这是三栏布局的双飞翼布局解决方案;
7.这是三栏布局的双飞翼布局解决方案;
8.这是三栏布局的双飞翼布局解决方案;
9.这是三栏布局的双飞翼布局解决方案;
</div>
</div>
<div class="left"></div>
<div class="right"></div>
</article>
</section>
<style>
.layout.ued .left-center-right>div {
float: left;
}
.layout.ued .wrap {
margin-left: 300px;
margin-right: 300px;
}
.layout.ued .center {
background: yellow;
}
.layout.ued .left {
background: red;
min-height: 100px;
width: 300px;
margin-left: -100%;
}
.layout.ued .right {
background: blue;
min-height: 100px;
width: 300px;
margin-left: -300px;
}
</style>
image.png
圣杯布局和双飞翼布局解决问题的方案在前一半是相同的,也就是三栏全部float浮动,但左右两栏加上负margin让其跟中间栏div并排,以形成三栏布局:
不同在于解决”中间栏div内容不被遮挡“问题的思路不一样:圣杯布局为了中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div;而双飞翼布局为了中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该子div里用margin-left和margin-right为左右两栏div留出位置。