這篇文章主要介紹了CSS實現頁面一列佈局,兩列佈局與三列佈局的方法示例,包括寬度與高度的自適應的示例,需要的朋友可以參考下:
1.一列佈局(又叫單列佈局)
一列佈局需要掌握3個知識點:標準文件流,其中又包含了區塊級元素和行級元素,還有margin屬性,可以說實現一列佈局的關鍵程式碼就是由margin屬性實現的,透過設定margin:0 auto;來實現水平居中,auto就是它會根據瀏覽器的寬度自動設定兩邊的外邊距。要設定margin,你首先得有一個盒子模型,例如這裡的div,然後設定它的長寬,有一個固定的大小,才可以實現居中。
<style type="text/css">
body{margin:0;padding:0;}
.head{heigth:200px;background:blue;}
.main{height:500px;width:800p;margin:0 auto;}
.footer{background:blue;height:200px;width:800px;margin:0 auto;}
</style>
<div class="head"> This is head !</div>
<div class="main"> This is main !</div>
<div class="footer"> This is footer !</div>2.二列佈局(兩列自適應)
浮動:
塊級元素都是一行一行這樣排列的,需要把兩個塊級元素並排時,就需要用到CSS中的浮動佈局float,float有三個屬性值,
left-左浮動,right-右浮動,none-不浮動,一旦設定了float屬性,元素就會對應的向左移,或向右移,直到碰到容器邊緣,
當元素沒有內容但是設定了浮動屬性時,元素的寬度會隨內容的變化而變化。
清除浮動的常用方法是:clear:both;(為需要清楚浮動的元素設定)如果你清楚的知道設定了那種浮動,也可以clear:right/left,一般都用both,保障浮動被清除;還有另一種清除浮動的方法,width:100%;overflow:hidden;
<style type="text/css">
body{margin:0;padding:0;}
.main{width:800px;margin:0 auto;}
.left{width:20%;height:500px;background:blue;float:left;}
.right{width:80%;background:red;height:500px;float:right;}
</style>
<div class="main">
<div class="left"> This is left !</div>
<div class="right"> This is right !</div>
</div>添加了父級div後,right和left塊就被限制在父級塊中,父級塊寬度是固定的,則左右兩塊的寬度也隨之固定,但是如果父級塊的寬度改變,則左右兩塊也會隨之改變,且比例還是2:8,這個是固定不變的。
3.三列佈局
position可設定4個屬性值,分別為:static(靜態定位),relative(相對定位),absolute(絕對定位),fixed(固定定位)
三列佈局自適應,將上述兩列佈局中的比例更改為33.33%即可,那麼以此類推,四列佈局自適應也可以用一樣的方法,調整比例分配,從而實現自己想要的佈局方式。
<style type="text/css">
body{margin:0;padding:0;}
.main{width:800px;margin:0 auto;}
.left{width:33.33%;height:500px;background:blue;float:left;}
.middle{width:33.33%;height:500px;background:black;float:left;}
.right{width:33.33%;background:red;height:500px;float:right;}
</style>
<div class="main">
<div class="left"> This is left !</div>
<div class="middle"> This is middle !</div>
<div class="right"> This is right !</div>
</div>另外一種情況是,左右兩塊的寬度都是固定的分別為200px,300px,而中間是自適應的。這種情況就不能透過float來實現了,此時我們需要對左右兩塊進行絕對定位,然後設定中間塊的margin,則可以實現要求。如果你想讓中間和左右兩塊不要緊密貼合,則可以在設定margin(上,右,下,左)時,把像素適當的提高。實作方式如下:
注意left:0;top:0;right:0;top:0; 這些設定是必須的,不加就會出問題,親測
<style type="text/css">
body{margin:0;padding:0;}
.main{width:800px;margin:0 auto;}
.left{width:200px;height:500px;background:blue;position:absolute;left:0;top:0;}
.middle{height:500px;background:black;margin:0 300px 0 200px;}
.right{width:300px;background:red;height:500px;position:absolute;right:0;top:0;}
</style>
<div class="main">
<div class="left"> This is left !</div>
<div class="middle"> This is middle !</div>
<div class="right"> This is right !</div>
</div>在網頁設計中,我們更多的是將上述佈局方式進行混合,例如在一列佈局的main區塊中插入二列或三列佈局,程式碼和上基本上一致
使用BFC的原理實作
BFC的規則之一,就是BFC區域,不會與float box重疊,因此我們可以利用這一點來實現3列佈局。
css程式碼如下
.left {
float: left;
margin-right: 10px;
width: 100px;
height: 100px;
background-color: orange;
}
.rightright {
float: rightright;
margin-left: 10px;
width: 100px;
height: 100px;
background-color: orange;
}
.main {
height: 100px;
background-color: green;
overflow: hidden;
}html程式碼如下
<div class="left"></div> <div class="right"></div> <div class="main"></div>
雙飛翼佈局
這種佈局方案最早由淘寶提出,主要為了主列能夠被最先載入。
實作原理:
(1)讓主列外面增加一個wrap,主列wrap,以及2子列都左浮動。
(2)設定主列wrap寬度為100%,將子列的margin-left設定為負值,讓子列能夠排列在左右兩側。
(3)這是主列的margin-left與margin-right比左右兩列的寬度大一點,則可以設定出來主列與子列之間的間隙。
css程式碼如下
.wrap {
width: 100%;
}
.wrap::after {
display: block;
content: '';
font-size: 0;
height: 0;
clear: both;
zoom: 1;
}
.main-content {
float: left;
width: 100%;
}
.main {
height: 100px;
background-color: green;
margin-left: 110px;
margin-right: 110px;
}
.left {
float: left;
width: 100px;
height: 100px;
background-color: orange;
margin-left: -100%;
}
.rightright {
float: left;
width: 100px;
height: 100px;
background-color: orange;
margin-left: -100px;
}html程式碼如下
<div class="wrap">
<div class="main-content">
<div class="main"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</div>聖杯佈局
聖杯佈局在結構上要簡單一點,也能夠讓主列優先載入。
實作原理:
(1)增加一個包裹框,設定padding-leftpadding-right值,比子列寬度大一個空隙的寬度。
(2)主列,子列都設定為float: left 左子列margin-left設定為-100%,並且設定為position:relative; left: -110px將左子列放置到左側。右子列同理。
(3)主列只需設定寬度為100%即可。包裹框的寬度不要設定為100%,自適應即可。
css程式碼如下
.wrapper {
padding-left: 110px;
padding-right: 110px;
overflow: hidden;
}
.main {
float: left;
width: 100%;
height: 100px;
background-color: #ccc;
}
.left {
float: left;
width: 100px;
height: 100px;
margin-left: -100%;
position: relative;
left: -110px;
_left: 0;
background-color: orange;
}
.rightright {
float: left;
width: 100px;
height: 100px;
background-color: orange;
margin-left: -100px;
position: relative;
rightright: -110px;
}html程式碼如下
<div class="wrapper"> <div class="main"></div> <div class="left"></div> <div class="right"></div> </div>