學習CSS定位(布局)

來源:互聯網
上載者:User
文檔流:將表單自上而下分成一行行, 並在每行中按從左至右的順序排放元素,即為文檔流。

自上而下被分成一行行的元素就是指區塊層級元素,而在每行中按照自左至右的順序排放的元素稱為行內元素(有很多種叫法,這裡只取一種):

常見的區塊層級元素 常見的行內元素
address - 地址
 blockquote - 區塊引述
 center - 舉中對齊塊
 dir - 目錄列表

div - 常用塊級容易,也是css layout的主要標籤

dl - 定義列表
 fieldset - form控制組
 form - 互動表單
 h1 - 大標題
 h2 - 副標題
 h3 - 3級標題
 h4 - 4級標題
 h5 - 5級標題

h6 - 6級標題

hr - 水平分隔線
 isindex - input prompt
menu - 菜單列表
 noframes - frames可選內容(對於不支援frame的瀏覽器顯示此區塊內容)

noscript - 可選指令碼內容(對於不支援script的瀏覽器顯示此內容)
 ol - 排序列表
 p - 段落
 pre - 格式化文本
 table - 表格

ul - 非排序列表
a - 錨點
 abbr - 縮寫
 acronym - 首字
 b - 粗體(不推薦)
 bdo - bidi override
big - 大字型
 br - 換行
 cite - 引用
 code - 電腦代碼(在引用源碼的時候需要)

dfn - 定義欄位
 em - 強調

font - 字型設定(不推薦)
 i - 斜體
 img - 圖片

input - 輸入框

kbd - 定義鍵盤文本
 label - 表格標籤
 q - 短引用

s - 中劃線(不推薦)

samp - 定義範例電腦代碼

select - 項目選擇

small - 小字型文本

span - 常用內聯容器,定義文本內區塊

strike - 中劃線

strong - 粗體強調
 sub - 下標

sup - 上標

textarea - 多行文本輸入框

tt - 電傳文本
 u - 底線

var - 定義變數

我們可以使用display屬性改變元素的類型,設定dispaly為block使得行內表現的像區塊層級元素一樣,設定display為inline使得區塊層級元素表象的和行內元素一樣;還可以通過把 display 設定為 none,讓產生的元素根本沒有框。這樣的話,該框及其所有內容就不再顯示,不佔用文檔中的空間。

Position屬性規定元素的定位類型;

描述
absolute

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

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

fixed

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

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

relative

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

因此,"left:20" 會向元素的 LEFT 位置添加 20 像素。

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

幾種定位:

1、普通流定位:除非專門指定,否則所有框都在普通流中定位。也就是說,普通流中的元素的位置由元素在 (X)HTML 中的位置決定。塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。行內框在一行中水平布置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱為行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設定行高可以增加這個框的高度。

2、浮動定位:浮動元素可以向左或者向右,知道它的外邊緣碰到包含框或者另一個浮動框的邊框為止;浮動元素不佔任何正常文檔流空間,而浮動元素的定位還是基於正常的文檔流,然後從文檔流中抽出並儘可能遠的移動至左側或者右側。文字內容會圍繞在浮動元素周圍。當一個元素從正常文檔流中抽出後,仍然在文檔流中的其他元素將忽略該元素並填補他原先的空間(即不保留原佔位),clear 屬性規定元素的哪一側不允許其他浮動元素。浮動元素會產生一個塊級框,而不論它本身是何種元素;且要指明一個寬度,否則它會儘可能地窄;另外當可供浮動的空間小於浮動元素時,它會跑到下一行,直到擁有足夠放下它的空間。。

3、相對定位: 即相對於元素在文檔流中位置進行位移。 但保留原佔位,在使用相對定位時,無論是否進行移動,元素仍然佔據原來的空間。因此,移動元素會導致它覆蓋其它框;

4、絕對位置:即完全脫離文檔流, 相對於position屬性非static值(即已經定位)的最近父級元素進行位移,可以覆蓋頁面上的其他元素;

5、固定定位:它可以讓HTML元素脫離文檔流固定在瀏覽器的某個位置。

6、Z-index:控制元素的擺放順序,如果設定其值為-1,可被用於將在一個元素放置於另一元素之後;

小結:1:相對定位是“相對於”元素在文檔中的初始位置,而絕對位置是“相對於”最近的已定位祖先元素,如果不存在已定位的祖先元素,那麼“相對於”最初的包含塊。父容器使用相對定位,子項目使用絕對位置後,這樣子項目的位置不再相對於瀏覽器左上方,而是相對於父視窗左上方,相對定位和絕對位置需要配合top、right、bottom、left使用來定位具體位置,這四個屬性只有在該元素使用定位後才生效,其它情況下無效。另外這四個屬性同時只能使用相鄰的兩個,不能即使用上又使用下,或即使用左,又使用右;2:實現高度可變的布局;

在布局的時候經常遇到的一個問題就是高度可變,尤其是中間內容部分需要可變:如下面

<!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>    <title></title></head><body>  <div id="header"></div>  <div id="content" style="border:solid 1px blue;background-color:green;">    <div  id="left" style="float:left;border:solid 1px red;margin-left:3px;">     左側   </div>    <div  id="middle" style="float:left;border:solid 1px blue;margin-left:3px;">    中間   </div>    <div  id="right" style="float:left;border:solid 1px green;margin-left:3px;">     右側   </div>  </div><div id="footer"></div></body></html>

顯示效果:

 ,ID為content的層縮成了一條藍色的線(不是大家想象的被子項目給沖開),而他的子選元素則正常的飄向左側,如何使content層被沖開呢,就是把它的背景色展開呢,只要把也設定為浮動就可以了,設定為浮動之後該元素就會儘可能的窄,按照自己的需要制定寬度:為content設定浮動之後的如下:

這樣以來只要其內部的浮動的子項目高度變化就會影響到content的高度,從而實現高度可變的布局

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.