一是越、兩種布局使用分析
- float布局(定寬布局)
-
flex布局(彈性布局)
image
二、原則
- 不到萬不得已碌上,不要寫死 width 和 height
- 盡量用高級語法倚评,如 calc、flex
- 如果是 IE绍赛,就全部寫死
三蔓纠、布局套路口訣(上) ??PC端布局
1、導航條布局——float布局(適用于ie5)
a.兒子全加 float: left (right) b.老子加 .clearfix
代碼如下:Float布局
<style>
.parent{
border:1px solid green;
}
.child{
/* border:1px solid red; */
}
.child:nth-child(1){
width:30%;
background-color:red;
}
.child:nth-child(2){
width:69%;
background-color:yellow;
}
.clearfix::after{
content:'';
display:block;
clear:both;
}
.content{
border:1px solid black;
margin-right:10px;
}
</style>
<div class="parent clearfix" >
<div class="child" style="float:left;">兒子1</div>
<div class="child" style="float:left;">兒子2</div>
</div>
如圖:該頁面展示上其實是彈性布局
定死寬度吗蚌,水平居中則在老子這邊動手腿倚,添加以下代碼:
.parent{
border:1px solid green;
width:1000px
margin-left:auto
margin-right:auto
}
.child:nth-child(1){
width:30%;
background-color:red;
}
.child:nth-child(2){
width:69%;
background-color:yellow;
}
如圖:定寬之后,頁面寬度仍有剩余
優(yōu)化之后的導航條蚯妇,代碼如下:
<style>
.parent{
margin-left:auto;
margin-right:auto;
background: #ddd;
/*定死寬度則不會影響頁面 */
min-width:600px;
}
.child{
}
.child:nth-child(1){
width:100px;
background-color:#333;
color: white;
text-align:center;
line-height:36px;
height:36px;
}
.child:nth-child(2){
}
/* 清除浮動 */
.clearfix::after{
content:'';
display:block;
clear:both;
}
.clearfix{
zoom: 1;
}/*IE6*/
.content{
border:1px solid black;
margin-right:10px;
}
.nav{
line-height:24px;
padding:6px 0;
}
.navItem{
margin-left:20px;
}
</style>
<div class="parent clearfix" >
<div class="child" style="float:left;">logo</div>
<div class="child" style="float:right;">
<div class="nav clearfix">
<div style="float:left" class="navItem">導航1</div>
<div style="float:left" class="navItem">導航2</div>
<div style="float:left" class="navItem">導航3</div>
<div style="float:left" class="navItem">導航4</div>
<div style="float:left" class="navItem">導航5</div>
</div>
</div>
</div>
2敷燎、圖片位布局——flex布局
a.給老子加 display: flex
b.給老子加** justify-content: space-between;**
先看看第1種場景:
實現(xiàn)方式:先不用flex布局,用浮動元素+margin+clearfix清除浮動
<style>
/* 圖片主要部分 */
.banner{
width:800px;
height:300px;
background:#888;
margin-left:auto;
margin-right:auto;
margin-top:10px;
}
.pictures{
width:800px;
margin:0 auto;/*不能刪1:居中*/
/* background: black;最底層的顏色 */
}
.picture{
width:194px;
height:194px;
background:#ddd;
margin:4px;
float:left;
}
.pictures >.xxx{ /*為什么不能只用兩層div*/
/* background: rgba(255,0,0,0.8);倒數(shù)第二層顏色 */
margin-left:-4px;
margin-right:-4px;/*不能刪2:擴大范圍*/
}
/* .picture:nth-child(1){
margin-left: 0;
}
.picture:nth-child(4){
margin-right: 0;
} */
<style>
<div class="banner"></div>
<div class="pictures">
<div class="xxx clearfix">
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
</div>
</div>
如圖:
這種方式可以兼容IE6箩言,且即使減少一個板塊也不會影響其它板塊硬贯,
如圖:
再看第2種場景:
實現(xiàn)方式:flex布局
<style>
.banner{
width:800px;
height:300px;
background:#888;
margin-left:auto;
margin-right:auto;
margin-top:10px;
}
.pictures{
width: 800px; /* 定寬不夠彈性 */
margin: 0 auto;
display: flex; /* 彈性布局 */
flex-wrap: wrap; /* 換行*/
justify-content: space-between;/* 多余空間放在空間或水平居中 */
/* align-items: center; 垂直居中 */
}
.picture{
width: 194px;
height: 194px;
background: #ddd;
margin-top: 4px;
margin-bottom: 4px;
}
</style>
<div class="banner"></div>
<div class="pictures">
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
</div>
不過如果不是等份的圖片板塊,就會出現(xiàn)下方bug:
如何解決陨收,代碼如下:flex布局至bug修復
<style>
*{box-sizing: border-box;}
.banner{
width:800px;
height:300px;
background:#888;
margin-left:auto;
margin-right:auto;
margin-top:10px;
}
.pictures{
width: 800px; /* 定寬不夠彈性 */
margin: 0 auto;
}
.pictures > .xxx{
display: flex; /* 彈性布局 */
flex-wrap: wrap; /* 換行 */
margin: 0 -4px;
}
.picture{
width: 194px;
height: 194px;
/* 或者 width: calc(25% - 8px);
height: 194px; */
background: #ddd;
/* 邊框可去掉
border: 1px solid red; */
margin: 4px;
}
</style>
<div class="banner"></div>
<div class="pictures">
<div class="xxx">
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
<div class="picture"></div>
</div>
</div>
如圖:
3饭豹、廣告位布局——浮動+margin+clearfix清除浮動
代碼如下:
<style>
.art{
background: #ddd;
width:800px;
margin:0 auto;
}
.art > .sider{
float:left;
border: 1px solid black;
width:33.333333%;
height:300px
}
.art > .main{
float:left;
border: 1px solid black;
width:66.333333%;
height:300px
}
</style>
<div class="art clearfix">
<div class="sider">
<div>廣告1</div>
</div>
<div class="main">
<div>廣告2</div>
</div>
</div>
如圖:
廣告位之間的間距如何處理:
方法1:采用內嵌一個div鸵赖,定寬,float+margin-right進行間隙(這種方法似乎要兼容啊拄衰,做了很久弄不出它褪,不弄了)
方法2:calc計算法+margin
<style>
.art{
background: #ddd;
width:800px;
margin:0 auto;
}
.art > .sider{
float:left;
width:calc( 33.333333% - 20px);/* calc計算法,此時右側多出20px */
border: 1px solid black;
height: 300px;
margin-right: 20px; /* 用多出的20px翘悉,彌補上那塊間隙 */
}
.art > .main{
float:left;
border: 1px solid black;
width:66.666666%;
height:300px
}
</style>
<div class="art clearfix">
<div class="sider">
<div>廣告1</div>
</div>
<div class="main">
<div>廣告2</div>
</div>
</div>
``
如圖:

**方法3:**flex布局(IE不支持)
> a.父元素:**display:flex+justify-content:space-between**
> b.父元素+子元素:**display:flex+margin-right:auto**
<style>
.art{
background: #ddd;
width:800px;
margin:0 auto;
display: flex; /* flex直接左右布局 /
justify-content: space-between;/ 第2種方法:將空隙放中間 /
}
.art > .sider{
width:calc( 33.333333% - 20px);
/ calc計算法茫打,此時右側多出20px /
border: 1px solid black;
height: 300px;
/ margin-right:auto; 第1種方法 */
}
.art > .main{
border: 1px solid black;
width:66.666666%;
height:300px
}
</style>
如圖也是:

#三、布局套路口訣(下) ??移動端布局
* 添加:meta:vp (tab鍵):
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
* 收起pc端導航:
刪除定寬+*{margin:0; padding:0;}
* 導航 PC和手機適配的問題
/* 導航PC和手機適配的問題 */
.parent .nav2{
display:none;
}
@media (max-width:420px){
.parent .nav2{
display:block;
}
.parent .nav{
display:none;
}
}
* banner適配移動端
/banner適配移動端/
.banner{
width:800px; /萬惡的定寬 PC端必備/
height:300px;
background: #888;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
}
@media (max-width:420px){
.banner{width:auto;}
}
* 圖片板塊適配移動端
/圖片板塊適配移動端/
.pictures{
width: 800px; /* 萬惡的定寬PC端必備;定寬布局不夠彈性 /
margin: 0 auto; /不能刪1:居中/
overflow:hidden; / 避免溢出 */
}
@media (max-width:420px){
.pictures{width:auto;}
}
.pictures > .xxx{
display: flex; /* 彈性布局 /
flex-wrap: wrap; / 換行*/
margin: 0 -4px;
}
/圖片板塊適配移動端2/
.picture{
width: calc(25% - 8px);
height: 194px;
background: #ddd;
margin: 4px;
}
@media (max-width:420px){
.picture{
width: calc(50% - 8px);
}
}
* 廣告位適配移動端
/廣告位適配移動端/
.art{
background: #ddd;
width:800px; /萬惡的定寬 PC端必備/
margin:0 auto;
display: flex; /* flex直接左右布局 /
justify-content: space-between;/ 第2種方法:將空隙放中間 */
}
@media (max-width:420px){
.art{
width: auto;
flex-direction:column;
}
}
.art > .sider{
width:calc( 33.333333% - 20px); /* calc計算法妖混,此時右側多出20px /
border: 1px solid black;
height: 300px;
/ margin-right:auto; 第1種方法 */
}
@media (max-width:420px){
.art > .sider{
width: auto;
height: auto;
}
}
.art > .main{
border: 1px solid black;
width:66.666666%;
height:300px
}
@media (max-width:420px){
.art > .main{
width: auto;
height: auto;
}
}
* 關于圖片添加:(注:變形問題減少使用img)
background:transparent url(https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=292576901,2272109431&fm=27&gp=0.jpg) no-repeat center;
background-size: cover; /盡量全地顯示圖片/
**注:**
> 代碼總鏈接:[布局套路](http://js.jirengu.com/jufoz/4/edit?html,css) 固定比例div:圖片1:1顯示或者2:1顯示 CSS漸變方法:解決背景樣式漸變問題