首頁>技術>

CSS 定位 (Positioning) 屬性允許你對元素進行定位。

CSS 定位和浮動

CSS 為定位和浮動提供了一些屬性,利用這些屬性,可以建立列式佈局,將佈局的一部分與另一部分重疊,還可以完成多年來通常需要使用多個表格才能完成的任務。

定位的基本思想很簡單,它允許你定義元素框相對於其正常位置應該出現的位置,或者相對於父元素、另一個元素甚至瀏覽器視窗本身的位置。顯然,這個功能非常強大,也很讓人吃驚。要知道,使用者代理對 CSS2 中定位的支援遠勝於對其它方面的支援,對此不應感到奇怪。

另一方面,CSS1 中首次提出了浮動,它以 Netscape 在 Web 發展初期增加的一個功能為基礎。浮動不完全是定位,不過,它當然也不是正常流佈局。我們會在後面的章節中明確浮動的含義。

一切皆為框

div、h1 或 p 元素常常被稱為塊級元素。這意味著這些元素顯示為一塊內容,即“塊框”。與之相反,span 和 strong 等元素稱為“行內元素”,這是因為它們的內容顯示在行中,即“行內框”。

您可以使用 display 屬性改變生成的框的型別。這意味著,透過將 display 屬性設定為 block,可以讓行內元素(比如 <a> 元素)表現得像塊級元素一樣。還可以透過把 display 設定為 none,讓生成的元素根本沒有框。這樣的話,該框及其所有內容就不再顯示,不佔用文件中的空間。

但是在一種情況下,即使沒有進行顯式定義,也會建立塊級元素。這種情況發生在把一些文字新增到一個塊級元素(比如 div)的開頭。即使沒有把這些文字定義為段落,它也會被當作段落對待:

<div>some text<p>Some more text.</p></div>

在這種情況下,這個框稱為無名塊框,因為它不與專門定義的元素相關聯。

塊級元素的文字行也會發生類似的情況。假設有一個包含三行文字的段落。每行文字形成一個無名框。無法直接對無名塊或行框應用樣式,因為沒有可以應用樣式的地方(注意,行框和行內框是兩個概念)。但是,這有助於理解在螢幕上看到的所有東西都形成某種框。

CSS 定位機制

CSS 有三種基本的定位機制:普通流、浮動和絕對定位。

除非專門指定,否則所有框都在普通流中定位。也就是說,普通流中的元素的位置由元素在 (X)HTML 中的位置決定。

塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。

行內框在一行中水平佈置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱為行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設定行高可以增加這個框的高度。

在下面的章節,我們會為您詳細講解相對定位、絕對定位和浮動。

CSS position 屬性

透過使用 position 屬性,我們可以選擇 4 種不同型別的定位,這會影響元素框生成的方式。

position 屬性值的含義:

static元素框正常生成。塊級元素生成一個矩形框,作為文件流的一部分,行內元素則會建立一個或多個行框,置於其父元素中。relative元素框偏移某個距離。元素仍保持其未定位前的形狀,它原本所佔的空間仍保留。absolute元素框從文件流完全刪除,並相對於其包含塊定位。包含塊可能是文件中的另一個元素或者是初始包含塊。元素原先在正常文件流中所佔的空間會關閉,就好像元素原來不存在一樣。元素定位後生成一個塊級框,而不論原來它在正常流中生成何種型別的框。fixed元素框的表現類似於將 position 設定為 absolute,不過其包含塊是視窗本身。

提示:相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對於它在普通流中的位置。

例項

定位 h2 元素:

程式碼如下:

<html><head><style type="text/css">h2.pos_abs{position:absolute;left:100px;top:150px}</style></head><body><h2 class="pos_abs">這是帶有絕對定位的標題</h2><p>透過絕對定位,元素可以放置到頁面上的任何位置。下面的標題距離頁面左側 100px,距離頁面頂部 150px。</p></body></html>

效果圖如下:

瀏覽器支援

所有主流瀏覽器都支援 position 屬性。

註釋:任何的版本的 Internet Explorer (包括 IE8)都不支援屬性值 "inherit"。

定義和用法

position 屬性規定元素的定位型別。

說明

這個屬性定義建立元素佈局所用的定位機制。任何元素都可以定位,不過絕對或固定元素會生成一個塊級框,而不論該元素本身是什麼型別。相對定位元素會相對於它在正常流中的預設位置偏移。

預設值:

static

繼承性:

no

版本:

CSS2

JavaScript 語法:

object.style.position="absolute"

可能的值

描述

absolute

生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。

元素的位置透過 "left", "top", "right" 以及 "bottom" 屬性進行規定。

fixed

生成絕對定位的元素,相對於瀏覽器視窗進行定位。

元素的位置透過 "left", "top", "right" 以及 "bottom" 屬性進行規定。

relative

生成相對定位的元素,相對於其正常位置進行定位。

因此,"left:20" 會向元素的 LEFT 位置新增 20 畫素。

static

預設值。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z-index 宣告)。

inherit

規定應該從父元素繼承 position 屬性的值。

5
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 揭開Service Mesh的神秘面紗