標籤:style blog http color 使用 os strong io
CSS 定位屬性
CSS 定位屬性允許你對元素進行定位。
| 屬性 |
描述 |
| position |
把元素放置到一個靜態、相對的、絕對的、或固定的位置中。 |
| top |
定義了一個定位元素的上外邊距邊界與其包含塊上邊界之間的位移。 |
| right |
定義了定位元素右外邊距邊界與其包含塊右邊界之間的位移。 |
| bottom |
定義了定位元素下外邊距邊界與其包含塊下邊界之間的位移。 |
| left |
定義了定位元素左外邊距邊界與其包含塊左邊界之間的位移。 |
| overflow |
設定當元素的內容溢出其地區時發生的事情。 |
| clip |
設定元素的形狀。元素被剪入這個形狀之中,然後顯示出來。 |
| vertical-align |
設定元素的垂直對齊。 |
| z-index |
設定元素的堆疊順序。 |
CSS 相對定位
相對定位是一個非常容易掌握的概念。如果對一個元素進行相對定位,它將出現在它所在的位置上。然後,可以通過設定垂直或水平位置,讓這個元素“相對於”它的【起點】(【原本應該在的位置】)進行移動。
如果將 top 設定為 20px,那麼框將在原位置頂部下面 20 像素的地方。如果 left 設定為 30 像素,那麼會在元素左邊建立 30 像素的空間,也就是將元素向右移動。
#box_relative { position: relative; left: 30px; top: 20px;}
如所示:
注意,在使用相對定位時,無論是否進行移動,元素仍然佔據原來的空間。因此,移動元素會導致它覆蓋其它框。
CSS 絕對位置
絕對位置【使元素的位置與文檔流無關,因此不佔據空間】。這一點與相對定位不同,相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對於它在普通流中的位置。
普通流中其它元素的布局就像絕對位置的元素不存在一樣:
#box_relative { position: absolute; left: 30px; top: 20px;}
如所示:
提示:絕對位置的元素的位置相對於最近的已定位祖先元素,如果元素沒有已定位的祖先元素,那麼它的位置相對於最初的包含塊。 因為絕對位置的框與文檔流無關,所以它們可以覆蓋頁面上的其它元素。可以通過設定 z-index 屬性來控制這些框的堆放次序。
CSS 浮動
浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框為止。
由於浮動框不在文檔的普通流中,所以文檔的普通流中的塊框表現得就像浮動框不存在一樣。
再請看,當框 1 向左浮動時,它脫離文檔流並且向左移動,直到它的左邊緣碰到包含框的左邊緣。因為它不再處於文檔流中,所以它不佔據空間,實際上覆蓋住了框 2,使框 2 從視圖中消失。
如果把所有三個框都向左移動,那麼框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。
如所示,如果包含框太窄,無法容納水平排列的三個浮動元素,那麼其它浮動塊向下移動,直到有足夠的空間。如果浮動元素的高度不同,那麼當它們向下移動時可能被其它浮動元素“卡住”:
行框和清理
浮動框旁邊的行框被縮短,從而給浮動框留出空間,行框圍繞浮動框。
因此,建立浮動框可以使文本圍繞映像:
要想阻止行框圍繞浮動框,需要對該框【行框】應用 clear 屬性。clear 屬性的值可以是 left、right、both 或 none,它表示框的哪些邊不應該挨著浮動框。
假設希望讓一個圖片浮動到文字區塊的左邊,並且希望這幅圖片和文本包含在另一個具有背景顏色和邊框的元素中。您可能編寫下面的代碼:
.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>
這種情況下,出現了一個問題。因為浮動元素脫離了文檔流,所以包圍圖片和文本的 div 不佔據空間。
如何讓包圍元素在視覺上包圍浮動元素呢?需要在這個元素中的某個地方應用 clear:
不幸的是出現了一個新的問題,由於沒有現有的元素可以應用清理,所以我們只能添加一個空元素並且清理它。
<div class="news">
<img src="news-pic.jpg" />
<p>some text</p>
<div class="clear"></div>
</div>
.clear {
clear: both;
}
這樣可以實現我們希望的效果,但是需要添加多餘的代碼。常常有元素可以應用 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>
這樣會得到我們希望的效果。
不幸的是,下一個元素會受到這個浮動元素的影響。為瞭解決這個問題,有些人選擇對布局中的所有東西進行浮動,然後使用適當的有意義的元素(常常是網站的頁尾)對這些浮動進行清理。這有助於減少或消除不必要的標記。