CSS定位(Positioning)屬性 允許你對元素進行定位。
CSS定位和浮動
CSS為定位和浮動提供了一些屬性,利用這些屬性 可以建立列式佈局,將佈局的一部分與另一部分重疊。還可以完成多年來通常需要使用多個表格才能完成的任務。
定位的基本思想很簡單 它允許你定義元素框相對於其正常位置應該出現的位置,或者相對於父元素,另一個元素 設定瀏覽器視窗本身的位置。顯然這個功能非常強大。
另一方面,CSS1 中首次提出了浮動,它以 Netscape 在 Web 發展初期增加的一個功能為基礎。浮動不完全是定位,不過,它當然也不是正常流佈局。我們會在後面的章節中明確浮動的含義。
float 浮動會使元素脫離標準文件流
所以如果對一個行內元素 使用浮動定位的話 可以對這個行內元素設定寬高,因為已經脫離了標準文件流,不區分行內和塊了.不用在使用display進行轉換了
一旦一個元素浮動了 就可以並排了,也可以接受寬高,無論他的出身(行內和塊級)是什麼
浮動的元素互相貼靠:
float 有字圍效果 浮動的元素能擋住盒子但是擋不住盒子裡面的字 可以看出來 擋住了p盒子 但是擋不住字 float 脫標 貼靠 字圍
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style type="text/css">
div {
float: left;
width: 100px;
height: 100px;
background-color: aqua
}
</style>
</head>
<body>
<div></div>
<p>123文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字</p>
</body>
效果
使一個元素脫離標準文件流有三種方法:浮動,絕對定位 固定定位
一切皆為框
div h1 或 p元素通常被稱為塊級元素 它意味著這些元素顯示為一塊內容 即 “塊框” 與之相反,span 和 strong 等元素稱為“行內元素”,這是因為它們的內容顯示在行中,即“行內框”。
可以使用display屬性改變生成的框的型別 這意味著 通過將display設定為block 可以讓行內元素比如<a>標籤 表現的像塊級元素一樣 還可以通過把display屬性設定為none 讓生成的元素基本沒有框 這樣的話 該框及所有內容就不在顯示 不佔用文件中的空間。
但是另一種情況下 即使沒有進行顯示定義 也會建立塊級元素 這種情況發生在把一些文字新增到一個塊級元素(div)的開頭 即使沒有把這些文字定義為段落 他也會被當作段落對待
<div>
some text
<p>Some more text.</p>
</div>
在這種情況下 這個框被稱為無名塊框 因為他不語專門定義的元素相關聯。
塊級元素的文字行也會發生類似的情況。假設有一個包含三行文字的段落。每行文字形成一個無名框。無法直接對無名塊或行框應用樣式,因為沒有可以應用樣式的地方(注意,行框和行內框是兩個概念)。但是,這有助於理解在螢幕上看到的所有東西都形成某種框。
CSS定位機制
CSS有三種基本的定位機制:普通流 浮動 和 絕對定位
除非專門指定 否則所有框都在普通流中定位 也就是說 普通流中的元素的位置由元素在HTML 中的位置決定
塊級框從上到下一個接一個的排列 框之間的垂直距離是由框的垂直外邊距計算出來。
行內框在一行中水平佈置 可以使用水平內邊距 邊框 外邊距調整她們的間距 但是垂直內邊距 邊框和外邊距 不影響行內框的高度。由一行形成的水平框稱為行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設定行高可以增加這個框的高度
CSS position屬性
通過使用position屬性 我們可以選擇4中不同型別的定位
static
元素框正常生成 塊級元素生成一個矩形框 作為文件流的一部分 行內元素則會建立一個或多個行框 置於其父元素中。
relative:相對定位
元素框偏移某個距離 元素仍保持為定位前的狀況 他原本所佔的空間仍然保留。
absolute:絕對定位
元素框從文件流中完全刪除 並相對於某包含塊定位 包含塊啃呢個是文件中的另一個元素或者是初包含塊。元素原先在正常文件流中所佔的空間會關閉,就好像元素原來不存在一樣。元素定位後生成一個塊級框,而不論原來它在正常流中生成何種型別的框。
fixed:固定定位
元素框的表現類似於將 position 設定為 absolute,不過其包含塊是視窗本身。
提示:相對定位實際上被看作普通流定位模型的一部分,因為元素的位置相對於它在普通流中的位置。
例項:
1:相對定位
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
body {
margin-left: 30px;
}
h2.pos_left {
position: relative;
left: -30px;
}
h2.pos_right {
position: relative;
left: 30px;
}
</style>
</head>
<body>
<h2>這是位於正常位置的標題</h2>
<h2 class="pos_left">這個標題相對於正常位置向左移動</h2>
<h2 class="pos_right">這個標題相對於正常位置向右移動</h2>
<p>相對定位會按照元素的原始位置對該元素進行移動</p>
<p>樣式"left:-20"從元素原始左側位置減去 20畫素</p>
<p>樣式 "right 20"從元素的原始左側位置增加20畫素</p>
</body>
</html>
2:絕對定位
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
h2.pos_abs {
position: absolute;
top: 150px;
left: 100px;
}
</style>
</head>
<body>
<h2 class="pos_abs">這是帶有絕對定位的標題</h2>
<p>通過絕對定位 元素可以設定到頁面上的任何位置 下面的標題距離頁面左側 100px,距離頁面頂部 150px。</p>
</body>
</html>
固定定位
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
p.pOne {
position: fixed;
left: 5px;
top: 5px;
}
p.pTwo {
position: fixed;
right: 5px;
top: 30px;
}
</style>
</head>
<body>
<p class="pOne">一些文字</p>
<p class="pTwo">更多的文字</p>
</body>
</html>
使用固定定位設定影象的上邊線
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
img.normal {
position: absolute;
top: 0px;
}
</style>
</head>
<body>
<img class="normal" src="img/HBuilder.png" />
<p>一些文字 一些文字 一些文字 一些文字 一些文字 一些文字 一些文字 一些文字 一些文字</p> </body>
</html>
如果你能執行一下上面的程式碼 你會發現影象覆蓋了文字,這說明使用絕對定位的塊級框 已經脫離了文件流。
使用滾動條來顯示元素內溢位的內容
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
overflow: scroll;
} </style>
</head>
<body> <p>如果元素中的內容超出了給定的寬度和高度屬性,overflow 屬性可以確定是否顯示滾動條等行為。</p>
<div>
這個屬性定義溢位元素內容區的內容會如何處理。如果值為 scroll,不論是否需要,
使用者代理都會提供一種滾動機制。
因此,有可能即使元素框中可以放下所有內容也會出現滾動條。預設值是 visible。
</div> </body>
</html>
overflow 有三個值 scroll 允許溢位的部分滾動顯示 hidden 隱藏溢位的部分 不顯示 auto瀏覽器自己處理
設定元素的形狀
<html>
<head>
<meta charset="UTF-8">
<title>連結</title>
<style type="text/css">
img {
position: absolute;
clip: rect(0px 50px 50px 30px);
}
</style>
</head>
<body> <p>clip 屬性剪下了一副影象</p>
<p><img src="img/HBuilder.png" / width="50px" height="100px"></p>
</body>
</html>
垂直排列影象
<html> <head>
<style type="text/css">
img.top {vertical-align:text-top}
img.bottom {vertical-align:text-bottom}
</style>
</head> <body> <p>
這是一幅<img class="top" border="0" src="/i/eg_cute.gif" />位於段落中的影象。
</p> <p>
這是一幅<img class="bottom" border="0" src="/i/eg_cute.gif" />位於段落中的影象。
</p> </body> </html>