css 相對定位 絕對定位 浮動 分析

CSS 相對定位
相對定位是一個非常容易掌握的概念。如果對一個元素進行相對定位,它將出現(xiàn)在它所在的位置上。然后,可以通過設置垂直或水平位置,讓這個元素“相對于”它的起點進行移動。
如果將 top 設置為 20px,那么框?qū)⒃谠恢庙敳肯旅?20 像素的地方。如果 left 設置為 30 像素,那么會在元素左邊創(chuàng)建 30 像素的空間,也就是將元素向右移動。
#box_relative { position: relative; left: 30px; top: 20px; }
如下圖所示:

注意,在使用相對定位時,無論是否進行移動,元素仍然占據(jù)原來的空間。因此,移動元素會導致它覆蓋其它框。
那么我們就會想了怎么讓框三把框二覆蓋呢,很自然的想到把框3的z-index設為一個優(yōu)先級高的值如100,但是這樣并不能得到我們想要的結(jié)果,必須把框2的z-index設為優(yōu)先級低的如-1,
我猜想是因為框2已經(jīng)脫離了文檔流,所以只設置框3的z-index對框2起不到作用,所以只能對框2操作了。大家也可以去試試代碼如下在ie7下通過:
<html>
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
span
{
background-color: Red;
width: 30px;
height: 30px;
}
#box_relative
{
position: relative;
left: 10px;
top: 10px; background-color: gray;z-index:-1;
}
</style>
</head>
<body>
<span></span><span id="box_relative"></span><span style="z-index:30"></span>
</body>
</html>
CSS 絕對定位
絕對定位使元素的位置與文檔流無關(guān),因此不占據(jù)空間。這一點與相對定位不同,相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對于它在普通流中的位置。
普通流中其它元素的布局就像絕對定位的元素不存在一樣:
#box_relative { position: absolute; left: 30px; top: 20px; }
如下圖所示:
絕對定位的元素的位置相對于最近的已定位祖先元素,如果元素沒有已定位的祖先元素,那么它的位置相對于最初的包含塊。
對于定位的主要問題是要記住每種定位的意義。所以,現(xiàn)在讓我們復習一下學過的知識吧:相對定位是“相對于”元素在文檔中的初始位置,而絕對定位是“相對于”最近的已定位祖先元素,如果不存在已定位的祖先元素,那么“相對于”最初的包含塊。
注釋:根據(jù)用戶代理的不同,最初的包含塊可能是畫布或 HTML 元素。
提示:因為絕對定位的框與文檔流無關(guān),所以它們可以覆蓋頁面上的其它元素??梢酝ㄟ^設置 z-index 屬性來控制這些框的堆放次序。
同樣的道路如果想讓框1,3在2之上的話也需要在框2上設置z-index,而且如果只在框1,3上設置的話無效。大家也可以去試試代碼如下在ie7下通過:
<html>
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
span
{
background-color: Red;
width: 30px;
height: 30px;
}
#box_relative
{
position: absolute;
left: 20px;
top: 20px; background-color: gray;
}
</style>
</head>
<body>
<span style="z-index:30"></span><span id="box_relative"></span><span style="z-index:30"></span>
</body>
</html>
CSS 浮動
請看下圖,當把框 1 向右浮動時,它脫離文檔流并且向右移動,直到它的右邊緣碰到包含框的右邊緣:

再請看下圖,當框 1 向左浮動時,它脫離文檔流并且向左移動,直到它的左邊緣碰到包含框的左邊緣。因為它不再處于文檔流中,所以它不占據(jù)空間,實際上覆蓋住了框 2,使框 2 從視圖中消失。
如果把所有三個框都向左移動,那么框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。

如下圖所示,如果包含框太窄,無法容納水平排列的三個浮動元素,那么其它浮動塊向下移動,直到有足夠的空間。如果浮動元素的高度不同,那么當它們向下移動時可能被其它浮動元素“卡住”:

CSS float 屬性
在 CSS 中,我們通過 float 屬性實現(xiàn)元素的浮動。
如需更多有關(guān) float 屬性的知識,請訪問參考手冊:CSS float 屬性。
行框和清理
浮動框旁邊的行框被縮短,從而給浮動框留出空間,行框圍繞浮動框。
因此,創(chuàng)建浮動框可以使文本圍繞圖像:

要想阻止行框圍繞浮動框,需要對該框應用 clear 屬性。clear 屬性的值可以是 left、right、both 或 none,它表示框的哪些邊不應該挨著浮動框。
為了實現(xiàn)這種效果,在被清理的元素的上外邊距上添加足夠的空間,使元素的頂邊緣垂直下降到浮動框下面:

這是一個有用的工具,它讓周圍的元素為浮動元素留出空間。
讓我們更詳細地看看浮動和清理。假設希望讓一個圖片浮動到文本塊的左邊,并且希望這幅圖片和文本包含在另一個具有背景顏色和邊框的元素中。您可能編寫下面的代碼:
.news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; } <div class="news"> <img src="news-pic.jpg" /> <p>some text</p> </div>
這種情況下,出現(xiàn)了一個問題。因為浮動元素脫離了文檔流,所以包圍圖片和文本的 div 不占據(jù)空間。
如何讓包圍元素在視覺上包圍浮動元素呢?需要在這個元素中的某個地方應用 clear:

不幸的是出現(xiàn)了一個新的問題,由于沒有現(xiàn)有的元素可以應用清理,所以我們只能添加一個空元素并且清理它。
.news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; }.clear { clear: both; }
<div class="news"> <img src="news-pic.jpg" /> <p>some text</p><div class="clear"></div>
</div>
這樣可以實現(xiàn)我們希望的效果,但是需要添加多余的代碼。常常有元素可以應用 clear,但是有時候不得不為了進行布局而添加無意義的標記。
不過我們還有另一種辦法,那就是對容器 div 進行浮動:
.news {
background-color: gray;
border: solid 1px black;
float: left;
}
.news img {
float: left;
}
.news p {
float: right;
}
<div class="news">
<img src="news-pic.jpg" />
<p>some text</p>
</div>
這樣會得到我們希望的效果。不幸的是,下一個元素會受到這個浮動元素的影響。為了解決這個問題,有些人選擇對布局中的所有東西進行浮動,然后使用適當?shù)挠幸饬x的元素(常常是站點的頁腳)對這些浮動進行清理。這有助于減少或消除不必要的標記。
事實上,W3School 站點上的所有頁面都采用了這種技術(shù),如果您打開我們使用 CSS 文件,您會看到我們對頁腳的 div 進行了清理,而頁腳上面的三個 div 都向左浮動。
相關(guān)文章
- 這篇文章主要為大家詳細介紹了CSS3定位和浮動的概念,以及實例代碼講解CSS3定位和浮動的使用方法,感興趣的小伙伴們可以參考一下2016-05-10
css的核心內(nèi)容 標準流、盒子模型、浮動、定位等分析
css的核心內(nèi)容:標準流、盒子模型、浮動、定位(可以說不理解這些概念絕做不出合適的網(wǎng)頁)2009-12-21純CSS定位的固定垂直居中浮動層代碼,附經(jīng)典解說 《詳解定位與定位應用
關(guān)于在html中浮動層是眾多網(wǎng)頁愛好者剛開始的難點,主要在于定位。如果你對CSS定位還不夠了解 可以接著往下看,運行里面的內(nèi)容即可。 【需求】: 將一個網(wǎng)頁分成頭、身2009-07-01CSS實現(xiàn)網(wǎng)頁分欄布局的方法:絕對定位和浮動
網(wǎng)頁制作Webjx文章簡介:在CSS中,實現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(absolute 、static、relative和fixed)中的絕對定位(absolute positioning2009-04-02- 我們接著上節(jié)課,繼續(xù)學習,我把頁面整體效果發(fā)出來,方便大家學習2010-01-07
- 前四節(jié)的大練習大家做的怎么樣?有沒有難度,如果你覺著有難度沒有關(guān)系,這節(jié)課,我?guī)е蠹易鲆幌逻@個練習!2010-01-07
- DIV+CSS網(wǎng)頁布局常用到浮動方案,但浮動并不像表格那樣好用,很多時候會出問題。同時設計不夠良好的浮動布局,在不同的瀏覽器下會有不同的表現(xiàn),可能設計時照著常用的瀏覽2009-10-28
- 在CSS中,實現(xiàn)分欄布局有兩種方法。第一種方法是使用四種CSS定位選項(absolute 、static、relative和fixed)中的絕對定位(absolute positioning),它可以將文檔中的某個元素2009-07-01
網(wǎng)頁布局 CSS簡單實現(xiàn)垂直居中-CSS教程-網(wǎng)頁制作-網(wǎng)頁教學網(wǎng)
英文原文: http://www.search-this.com/2008/05/15/easy-vertical-centering-with-css/ 中文譯文: http://www.12sui.cn/blog/71.html 本人英語還沒過四級,所以不2008-10-17