天天看點

基本的布局問題

1、div絕對居中

就是固定大小的div在浏覽器中垂直、水準都居中,适合用到浮動彈出框、頁面居中的登陸框等你想得到的地方。以前我也曾使用window.onload和window.onresize來控制高度自适應,寬度好說,相容IE和其他主流浏覽器的,直接文本居中,内部“margin:0

auto;”。

下面是現在的純css解決方法。

以寬高為400px*300px的div居中為例,body内隻有div,是以簡寫css如下:

div { width:400px; height:300px; position:absolute; left:50%; top:50%;

margin-left:-200px; margin-top:-150px; background:#f90;}

完整html源碼如下:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html

xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<meta

http-equiv=”Content-Type” content=”text/html; charset=utf-8″

/>

<title>test</title>

<style>

div { width:400px;

height:300px; position:absolute; left:50%; top:50%; margin-left:-200px;

margin-top:-150px;

background:#f90;}

</style>

</head>

<body>

<div></div>

</body>

</html>

這樣就完美實作了絕對居中,另外,如果設計中最外邊框添加了border,div設定了padding等,一定要注意margin值要排除border寬或者padding值。

2、寬高自适應

很多情況下,我們希望頁面的寬高可以自适應,寬度自适應很簡單,當然,這裡所說的自适應不是自适應内容,而是自适應浏覽器,在同一行級隻有一個層的情況下,寬度自适應直接使用width:100%;就可以了,但是高度自适應就有些不遂人意了,很多時候設定height:100%;完全不起效,其實,這時完全是因為div所在位置的上級元素沒有指定高度。

同樣以一個div為例,css如下:

html,body { height:100%; width:100%; margin:0; padding:0;}

div {

height:100%; width:100%; background:#f90;}

<!DOCTYPE html

PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

html,body {

height:100%; width:100%; margin:0; padding:0;}

div { height:100%; width:100%;

為什麼設定body的height為100%的同時還要設定html呢?其實是為了解決firefox的相容性,firefox預設body占用的不是100%;,這裡有一個設計思想就是,如果某個層要用到100%或者其他值的百分比,上一級必須指定高度,當然,這同樣應用到div下的div。

3、多欄寬度自适應

前面第二部分已經将過完全的自适應寬高,但其中的寬度自适應隻是在一個div獨占一行的情況下,如果出現多個div,如常見的主題部分左右、左中右布局的網站頁面,兩邊固定寬,中間自适應,改怎麼寫呢?其實隻要在中間部分的div下再套一層div即可,示例css如下:

html,body { height:100px; width:100%; margin:0; padding:0;}

.left {

height:100px; width:100px; background:#CC3; float:left;}

.middle { margin:0

50px 0 100px;}

.middle .content { height:100px; width:100%; background:#F60;

float:left;}

.right { height:100px; width:50px; background:#09F;

height:100px; width:100%; margin:0; padding:0;}

.left { height:100px;

width:100px; background:#CC3; float:left;}

.middle { margin:0 50px 0

100px;}

<div

class=”left”></div>

<div class=”middle”>

class=”content”></div>

</div>

class=”right”></div>

4、高度占滿全屏

解決方案:在CSS樣式中定義

body{height:100%;}

此定義是為了讓本身body就具有height為100%

即:要定義一個DIV的高100%縱向滿屏,那麼請先将其上級的DIV的高定義為100%,上級有多少個DIV,都要定義它們的高為100%。

這樣才能達到包含在裡面的DIV的高為浏覽器高100%的縱向滿屏效果。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"

<title>CSS 100% Height</title>

html {

min-height:

100%;

_height:100%;

}

body {

margin:

0;

padding: 0;

#content {

background: #EEE;

margin: auto;

width: 960px;

<div id="content">

5、清除浮動

為什麼浮動這麼難?

因為浮動會使目前标簽産生向上浮的效果,同時會影響到前後标簽、父級标簽的位置及 width height

屬性。

而且同樣的代碼,在各種浏覽器中顯示效果也有可能不相同,這樣讓清除浮動更難了。

解決浮動引起的問題有多種方法,但有些方法在浏覽器相容性方面還有問題。

我根據自己的經驗總結8種清除浮動的方法(測試已認證 ie

chrome firefox opera,後面三種方法隻做了解就可以了):

1,父級div定義 height

<style

type="text/css">

.div1{background:#000080;border:1px solid

red;/*解決代碼*/height:200px;}

.div2{background:#800080;border:1px solid

red;height:100px;margin-top:10px}

.left{float:left;width:20%;height:200px;background:#DDD}

.right{float:right;width:30%;height:80px;background:#DDD}

<div class="div1">

class="left">Left</div>

class="right">Right</div>

class="div2">

div2

原理:父級div手動定義height,就解決了父級div無法自動擷取到高度的問題。

優點:簡單,代碼少,容易掌握

缺點:隻适合高度固定的布局,要給出精确的高度,如果高度和父級div不一樣時,會産生問題

建議:不推薦使用,隻建議高度固定的布局時使用

評分:★★☆☆☆

2,結尾處加空div标簽 clear:both

<style type="text/css">

red}

/*清除浮動代碼*/

.clearfloat{clear:both}

class="div1">

<div class="left">Left</div>

<div class="right">Right</div>

class="clearfloat"></div>

原理:添加一個空div,利用css提高的clear:both清除浮動,讓父級div能自動擷取到高度

優點:簡單,代碼少,浏覽器支援好,不容易出現怪問題

缺點:不少初學者不了解原理;如果頁面浮動布局多,就要增加很多空div,讓人感覺很不爽

建議:不推薦使用,但此方法是以前主要使用的一種清除浮動方法

評分:★★★☆☆

3,父級div定義 僞類:after 和 zoom

red;}

.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}

.clearfloat{zoom:1}

或者

.clear:after{content:‘\0020‘;display:block;height:0;clear:both}

.clear{*zoom:1}

<div class="div1 clearfloat">

原理:IE8以上和非IE浏覽器才支援:after,原理和方法2有點類似,zoom(IE轉有屬性)可解決ie6,ie7浮動問題

優點:浏覽器支援好,不容易出現怪問題(目前:大型網站都有使用,如:騰迅,網易,新浪等等)

缺點:代碼多,不少初學者不了解原理,要兩句代碼結合使用,才能讓主流浏覽器都支援。

建議:推薦使用,建議定義公共類,以減少CSS代碼。

評分:★★★★☆

4,父級div定義 overflow:hidden

red;/*解決代碼*/width:98%;overflow:hidden}

.div2{background:#800080;border:1px

solid red;height:100px;margin-top:10px;width:98%}

原理:必須定義width或zoom:1,同時不能定義height,使用overflow:hidden時,浏覽器會自動檢查浮動區域的高度

優點:簡單,代碼少,浏覽器支援好

缺點:不能和position配合使用,因為超出的尺寸的會被隐藏。

建議:隻推薦沒有使用position或對overflow:hidden了解比較深的朋友使用。

5,父級div定義 overflow:auto

red;/*解決代碼*/width:98%;overflow:auto}

原理:必須定義width或zoom:1,同時不能定義height,使用overflow:auto時,浏覽器會自動檢查浮動區域的高度

缺點:内部寬高超過父級div時,會出現滾動條。

建議:不推薦使用,如果你需要出現滾動條或者確定你的代碼不會出現滾動條就使用吧。

6,父級div 也一起浮動

red;/*解決代碼*/width:98%;margin-bottom:10px;float:left}

solid red;height:100px;width:98%;/*解決代碼*/clear:both}

原理:所有代碼一起浮動,就變成了一個整體

優點:沒有優點

缺點:會産生新的浮動問題。

建議:不推薦使用,隻作了解。

評分:★☆☆☆☆

7,父級div定義 display:table

red;/*解決代碼*/width:98%;display:table;margin-bottom:10px;}

solid red;height:100px;width:98%;}

原理:将div屬性變成表格

缺點:會産生新的未知問題。

8,結尾處加 br标簽 clear:both

red;margin-bottom:10px;zoom:1}

red;height:100px}

<br class="clearfloat"

原理:父級div定義zoom:1來解決IE浮動問題,結尾處加 br标簽

clear:both