在我們開始學習CSS布局之前,先來了解一下文檔流的概念。文檔流即是HTML的布局機制,塊級元素占一行,
行內元素不占一行。將窗體自上而下分成一行行,并在每行中按從左往右的順序排放元素。
### 一,CSS定位和浮動概述
CSS定位屬性允許你對元素進行定位。CSS為定位和浮動提供了一些屬性,利用這些屬性,可以建立列式布局,將布局的一部分與另一部分重疊,還可以完成多年來通常需要使用多個表格才能完成的任務。定位的基本思想很簡單,它允許你定義元素框相對于其正常位置應該出現的位置,或者相對于父元素、另一個元素甚至瀏覽器窗口本身的位置。顯然,這個功能非常強大,也很讓人吃驚。浮動不完全是定位,不過,它當然也不是正常流布局。
(1)一切皆為框
div、h1或 p元素常常被稱為塊級元素。這意味著這些元素顯示為一塊內容,即“塊框”。與之相反,span和strong等元素稱為“行內元素”,這是因為它們的內容顯示在行中,即“行內框”。我們可以使用display屬性改變生成的框的類型。這意味著,通過將display屬性設置為block,可以讓行內元素(比如< a>元素)表現得像塊級元素一樣。可以通過把display設置為none,讓生成的元素根本沒有框。這樣的話,該框及其所有內容就不再顯示,不占用文檔中的空間。
但是在一種情況下,即使沒有進行顯式定義,也會創建塊級元素。這種情況發生在把一些文本添加到一個塊級元素(比如div)的開頭。即使沒有把這些文本定義為段落,它也會被當作段落對待:
~~~
<div>
some text
<p>Some more text.</p>
</div>
~~~
在這種情況下,這個框稱為無名塊框,因為它不與專門定義的元素相關聯。
塊級元素的文本行也會發生類似的情況。假設有一個包含三行文本的段落。每行文本形成一個無名框。無法直接對無名塊或行框應用樣式,因為沒有可以應用樣式的地方(注意,行框和行內框是兩個概念)。但是,這有助于理解在屏幕上看到的所有東西都形成某種框。
(2)CSS 定位機制
CSS有三種基本的定位機制:普通流、浮動和絕對定位。除非專門指定,否則所有框都在普通流中定位。也就是說,普通流中的元素的位置由元素在(X)HTML中的位置決定。
1,塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。
2,行內框在一行中水平布置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱為行框(Line?Box),行框的高度總是足以容納它包含的所有行內框。不過,設置行高可以增加這個框的高度。
(3)CSS定位屬性
通過使用position屬性,我們可以選擇4種不同類型的定位,這會影響元素框生成的方式。下面就是四種position屬性值的含義:
1,static:正常顯示(默認)
元素框正常生成。塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置于其父元素中。
2,relative:相對定位
設置元素會基于自己的最初位置偏移某個距離,仍然保留定位前的形狀,它原所占的空間仍然保留。沒有脫離文檔流。
元素框偏移某個距離。元素仍保持其未定位前的形狀,它原本所占的空間仍保留。相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對于它在普通流中的位置。
3,absolute:絕對定位
元素會基于其外層且有定位屬性的元素偏移某個距離,它原來所占的空間不保留,它對于其外層元素有定位屬性的元素來說相當于不存在。脫離文檔流。
元素框從文檔流完全刪除,并相對于其包含塊定位。包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關閉,就好像元素原來不存在一樣。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框。
4,fixed:固定定位?
元素會基于視窗(瀏覽器窗口)偏移某個距離,且固定不隨著網頁移動而移動。它原來所占的空間不保留。脫離文檔流。元素框的表現類似于將position設置為absolute,不過其包含塊是視窗本身。
(4)偏移距離
偏移距離:結合定位一起用。設置元素在水平方向(x)或豎直方向(y)的偏移距離。
常用屬性有四個:top,bottom,left,right。同一個方向,使用一個即可。
我們就來拿一個top屬性來簡單了解一下:
top:設置元素基于最初位置的頂部在豎直方向的偏移距離
可能的值:
xpx 正值表示向下移動,負值表示向上移動
xem ?同上
x% ?基于外層元素的高度的百分
看了這些我們可能不是很明白,我們具體有了實例,就會覺得這很簡單,下面講述具體的定位時,會有這些屬性值的出現,注意他們移動的方向和距離,加深自己對定位和偏移距離的理解。
(5)CSS定位屬性允許對元素進行定位的屬性:

### 二,相對定位
? ? ? CSS相對定位:設置為相對定位的元素框會偏移某個距離。元素仍然保持其未定位前的形狀,它原本所占的空間
仍保留。相對定位是一個非常容易掌握的概念。如果對一個元素進行相對定位,它將出現在它所在的位置上。然后,
可以通過設置垂直或水平位置,讓這個元素“相對于”它的起點進行移動。
? ? ?我們看一張圖就能明白:

? ? ?實例:如果將top設置為20px,那么框將在原位置頂部下面20像素的地方。如果left設置為30像素,那么會在元素
左邊創建30像素的空間,也就是將元素向右移動。
~~~
<!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=gb2312" />
<title>CSS相對定位演示</title>
<style type="text/css">
body {
margin:0px;
}
div {
height:100px;
width:200px;
}
#test {
border:#FF00FF solid 1px;
width:700px;
height:400px;
}
#div_1 {
background-color:#0000FF;
}
#div_3 {
background-color:#FFFF00;
}
#box_relative {
background-color:#00FF00;
position: relative;
left: 30px;
top: 20px;
}
</style>
</head>
<body>
<div id="test">
<div id="div_1">區域1</div>
<div id="box_relative">區域2</div>
<div id="div_3">區域3</div>
</div>
</body>
</html>
~~~
運行的結果為:

注意:在使用相對定位時,無論是否進行移動,元素仍然占據原來的空間。因此,移動元素會導致它覆蓋其它
框。
### 三,絕對定位
CSS絕對定位:設置為絕對定位的元素框從文檔流完全刪除,并相對于其包含塊定位,包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會關閉,就好像該元素原來不存在一樣。元素定位后生成一個塊級框,而不論原來它在正常流中生成何種類型的框。絕對定位使元素的位置與文檔流無關,因此不占據空間。這一點與相對定位不同,相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對于它在普通流中的位置。
普通流中其它元素的布局就像絕對定位的元素不存在一樣,看下面的圖:

絕對定位的元素的位置相對于最近的已定位祖先元素,如果元素沒有已定位的祖先元素,那么它的位置相對于最初的包含塊。
實例:
~~~
<!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=gb2312" />
<title>CSS絕對定位演示</title>
<style type="text/css">
body {
margin:0px;
}
div {
height:100px;
width:200px;
}
#test {
border:#FF00FF 1px solid;
width:700px;
height:400px;
}
#div_1 {
background-color:#0000FF;
}
#div_3 {
background-color:#FFFF00;
}
#box_relative {
background-color:#00FF00;
position:absolute;
left:30px;
top:20px;
}
</style>
</head>
<body>
<div id="test">
<div id="div_1">區域1</div>
<div id="box_relative">區域2</div>
<div id="div_3">區域3</div>
</div>
</body>
</html>
~~~
運行的結果為:

對于定位的主要問題是要記住每種定位的意義。相對定位是“相對于”元素在文檔中的初始位置,而絕對定位是“相對于”最近的已定位祖先元素,如果不存在已定位的祖先元素,那么“相對于”最初的包含塊。
根據用戶代理的不同,最初的包含塊可能是畫布或HTML元素。因為絕對定位的框與文檔流無關,所以它們可以覆蓋頁面上的其它元素。可以通過設置z-index屬性來控制這些框的堆放次序。
### 三,固定定位
CSS固定定位:設置元素會基于視窗(瀏覽器窗口)偏移某個距離,且固定不隨著網頁移動而移動。它原來所占的空間不保留。脫離文檔流。元素框的表現類似于將position設置為absolute,不過其包含塊是視窗本身。
這個我們應該在瀏覽網頁的時候經常見,比如一些廣告并不會隨著我們向下看內容而消失,它們一直處于基于視窗的某個位置不動。我們打開新浪首頁可以看到:

實例:
~~~
<!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=gb2312" />
<title>CSS固定定位演示</title>
<style type="text/css">
body {
margin:0px;
}
#test {
height:1500px;
width:750px;
margin:auto;
background-color:#999999;
border:#FF00FF solid 1px;
}
#AD {
background-color:#FFFF00;
width:200px;
height:300px;
position:fixed;
right:0px;
top:100px;
}
</style>
</head>
<body>
<div id="test">
<div id="AD">這里我們可以放置一個廣告</div>
</div>
</body>
</html>
~~~
運行的結果為:

總結一下:?
1,相對定位不會失去文檔流中的位置,而絕對定位和固定定位都會失去原來在文檔流中的位置而被下面的替代;?
2,無論是相對、絕對還是固定定位,當偏移量超出上面、左邊瀏覽器窗體(或者說超出可視區域)的時候,超出的內容都會被隱藏;而超出下面和右邊的時候,相對定位和固定定位會隱藏超出的部分內容,而絕對定位會出現滾動條。?
3,相對、絕對和固定定位都會浮在正常文檔流的上面,如果遮蓋了正常顯示的文檔流,可以設置z-index來消除。?
- 前言
- HTML學習1:Dreamweaver8的安裝
- HTML學習2:初識HTML
- HTML學習3:常用標簽之文本標簽
- HTML學習4:常用標簽之列表標簽
- HTML學習5:常用標簽之圖像標簽
- HTML學習6:常用標簽之超鏈接標簽
- HTML學習7:常用標簽之表格標簽
- HTML學習8:常用標簽之框架標簽
- HTML學習9:常用標簽之表單標簽
- HTML學習10:表單格式化
- HTML學習11:HTTP 方法
- HTML學習12:其他常見標簽之頭標簽
- HTML學習13:其他常見標簽之體標簽
- 輕松學習JavaScript一:為什么學習JavaScript
- 輕松學習JavaScript二:JavaScript語言的基本語法要求
- 輕松學習JavaScript三:JavaScript與HTML的結合
- 輕松學習JavaScript四:JS點擊燈泡來點亮或熄滅這盞燈的網頁特效映射出JS在HTML中作用
- 輕松學習JavaScript五:JavaScript的變量和數據類型
- 輕松學習JavaScript六:JavaScript的表達式與運算符
- 輕松學習JavaScript七:JavaScript的流程控制語句
- 輕松學習JavaScript八:JavaScript函數
- 輕松學習JavaScript九:JavaScript對象和數組
- 輕松學習JavaScript十:JavaScript的Date對象制作一個簡易鐘表
- 輕松學習JavaScript十一:JavaScript基本類型(包含類型轉換)和引用類型
- 輕松學習JavaScript十二:JavaScript基于面向對象之創建對象(一)
- 輕松學習JavaScript十二:JavaScript基于面向對象之創建對象(二)
- 輕松學習JavaScript十三:JavaScript基于面向對象之繼承(包含面向對象繼承機制)
- 輕松學習JavaScript十四:JavaScript的RegExp對象(正則表達式)
- 輕松學習JavaScript十五:JavaScript之BOM簡介
- 輕松學習JavaScript十六:JavaScript的BOM學習(一)
- 輕松學習JavaScript十七:JavaScript的BOM學習(二)
- 輕松學習JavaScript二十九:JavaScript中的this詳解
- CSS基礎學習一:CSS概述
- CSS基礎學習二:如何創建 CSS
- CSS基礎學習三:CSS語法
- CSS基礎學習四:元素選擇器
- CSS基礎學習五:類選擇器
- CSS基礎學習六:id選擇器
- CSS基礎學習七:屬性選擇器
- CSS基礎學習八:派生選擇器
- CSS基礎學習九:偽類
- CSS基礎學習十:偽元素
- CSS基礎學習十一:選擇器的優先級
- CSS基礎學習十二:CSS樣式
- CSS基礎學習十三:盒子模型
- CSS基礎學習十四:盒子模型補充之display屬性設置
- CSS基礎學習十五:盒子模型補充之外邊距合并
- CSS基礎學習十六:CSS盒子模型補充之border-radius屬性
- CSS基礎學習十七:CSS布局之定位
- CSS基礎學習十八:CSS布局之浮動
- CSS基礎學習十九:CSS布局之圖文混排,圖像簽名,多圖拼接和圖片特效
- DIV+CSS實操一:經管系網頁總體模塊布局
- DIV+CSS實操二:經管系網頁添加導航欄和友情鏈接欄
- DIV+CSS實操三:經管系網頁內容模塊添加標題欄和版權信息模塊
- DIV+CSS實操四:經管系網頁內容模塊內容添加(一)
- DIV+CSS實操五:經管系網頁內容模塊內容添加(二)
- DIV+CSS實操六:經管系網頁添加導航欄下拉菜單
- DIV+CSS實操七:中文系內容模塊控制文本不換行和超出指定寬度后用省略號代替
- JS中實現字符串和數組的相互轉化