CSS定位描述

CSS 定位機(jī)制

CSS 有三種基本的定位機(jī)制:普通流、浮動(dòng)和絕對(duì)定位。

一、普通流
  除非專(zhuān)門(mén)指定,否則所有框都在普通流中定位。普通流中元素框的位置由元素在(X)HTML中的位置決定。塊級(jí)元素從上到下依次排列,框之間的垂直距離由框的垂直margin計(jì)算得到。行內(nèi)元素在一行中水平布置。

二、定位

?。?、相對(duì)定位
  被看作普通流定位模型的一部分,定位元素的位置相對(duì)于它在普通流中的位置進(jìn)行移動(dòng)。使用相對(duì)定位的元素不管它是否進(jìn)行移動(dòng),元素仍要占據(jù)它原來(lái)的位置。移動(dòng)元素會(huì)導(dǎo)致它覆蓋其他的框。

<html>
<head>
<style type="text/css"> .box1{ background-color: red; width:100px; height:100px;
    } .box2{ background-color: yellow; width:100px; height:100px; position: relative; left: 20px;
    } .box3{ background-color: blue; width:100px; height:100px; position: relative; right: 20px;
    }
</style>
</head>

<body>
<div class="box1">box1</div>
<div class="box2">box2</div>
<div class="box3">box3</div>
</body>

</html>

效果如下圖所示:

?。?、絕對(duì)定位
  相對(duì)于已定位的最近的祖先元素,如果沒(méi)有已定位的最近的祖先元素,那么它的位置就相對(duì)于最初的包含塊(如body)。絕對(duì)定位的框可以從它的包含塊向上、右、下、左移動(dòng)。
  絕對(duì)定位的框脫離普通流,所以它可以覆蓋頁(yè)面上的其他元素,可以通過(guò)設(shè)置Z-Iindex屬性來(lái)控制這些框的堆放次序。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<style> 
*{
margin: 0;
padding: 0;
} 
#div1 { 
width: 200px; 
height: 200px; 
background: yellow;
} 
#div2 { 
width: 50%; 
height: 50%; 
background: red; 
top: 100px; 
left: 100px; 
position: absolute;
}
</style>
</head>
<body>
<div id="div1">
    <div id="div2"></div>
</div>
</body>
</html>

效果如下圖所示:

備注:相對(duì)于已相對(duì)定位的祖先元素對(duì)框進(jìn)行絕對(duì)定位,在大多數(shù)現(xiàn)代瀏覽器中都可以實(shí)現(xiàn)的很好。

?。场⒐潭ǘㄎ?/strong>
  相對(duì)于瀏覽器窗口,其余的特點(diǎn)類(lèi)似于絕對(duì)定位。

三、浮動(dòng)
  浮動(dòng)的框可以在左右移動(dòng),直到它的外邊框邊緣碰到包含框或另一個(gè)浮動(dòng)框的邊緣。浮動(dòng)的框脫離普通流。
  如果包含塊太窄,無(wú)法容納水平排列的浮動(dòng)元素,那么其他浮動(dòng)塊向下移動(dòng),直到有足夠多的空間。如果浮動(dòng)元素的高度不同,那么當(dāng)它們向下移動(dòng)時(shí)可能會(huì)被其他浮動(dòng)元素卡住。
  行內(nèi)元素會(huì)圍繞著浮動(dòng)框排列。

請(qǐng)看下圖,當(dāng)把框 1 向右浮動(dòng)時(shí),它脫離文檔流并且向右移動(dòng),直到它的右邊緣碰到包含框的右邊緣:

再請(qǐng)看下圖,當(dāng)框 1 向左浮動(dòng)時(shí),它脫離文檔流并且向左移動(dòng),直到它的左邊緣碰到包含框的左邊緣。因?yàn)樗辉偬幱谖臋n流中,所以它不占據(jù)空間,實(shí)際上覆蓋住了框 2,使框 2 從視圖中消失。

如果把所有三個(gè)框都向左移動(dòng),那么框 1 向左浮動(dòng)直到碰到包含框,另外兩個(gè)框向左浮動(dòng)直到碰到前一個(gè)浮動(dòng)框。

如下圖所示,如果包含框太窄,無(wú)法容納水平排列的三個(gè)浮動(dòng)元素,那么其它浮動(dòng)塊向下移動(dòng),直到有足夠的空間。如果浮動(dòng)元素的高度不同,那么當(dāng)它們向下移動(dòng)時(shí)可能被其它浮動(dòng)元素“卡住”:

清除浮動(dòng)

簡(jiǎn)單介紹下清除浮動(dòng)的2中方法。

方法一:結(jié)合:after選擇器清除浮動(dòng)。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style> .box1 { border: 1px solid red; background-color: yellow;
    } .clear:after { content: "." ; display: block; height: 0; visibility: hidden; clear: both;
    } .box2 { width: 50px; height: 50px; float: left; background-color: orange;
    } p { float: right;
    }
    </style>
</head>

<body>
    <div class="box1 clear">
        <div class="box2"> box2 </div>
        <p> lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦 </p>
    </div>
</body>

</html>

方法二,在容器最后添加一個(gè)空元素并且清理它。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style> .box1 { border: 1px solid red; background-color: yellow;
    } .empty{ clear: both;
    } .box2 { width: 50px; height: 50px; float: left; background-color: orange;
    } p { float: right;
    }
    </style>
</head>

<body>
    <div class="box1 clear">
        <div class="box2"> box2 </div>

        <p> lallalalalalal啦啦啦
 lallalalalalal啦啦啦
 lallalalalalal啦啦啦
lallalalalalal啦啦啦
 lallalalalalal啦啦啦 
lallalalalalal啦啦啦 
lallalalalalal啦啦啦
 lallalalalalal啦啦啦 
lallalalalalal啦啦啦
 lallalalalalal啦啦啦
 lallalalalalal啦啦啦
 lallalalalalal啦啦啦 </p>
        <br class="empty" />
    </div>
</body>

</html>

效果均如下所示:

附錄:

CSS position 屬性總結(jié):

所有主流瀏覽器都支持 position 屬性。position屬性規(guī)定元素的定位類(lèi)型,影響元素框生成的方式。

可能的值

absolute

生成絕對(duì)定位的元素,相對(duì)于 static 定位以外的第一個(gè)父元素進(jìn)行定位,如果不存在這樣的父元素,則依據(jù)最初的包含快。根據(jù)用戶(hù)代理的不同,最初的包含塊可能是畫(huà)布或 HTML 元素。

元素的位置通過(guò) "left", "top", "right" 以及 "bottom" 屬性進(jìn)行規(guī)定,也可以通過(guò)z-index進(jìn)行層次分級(jí)。

(元素框從文檔流完全刪除,并相對(duì)于其包含塊定位。包含塊可能是文檔中的另一個(gè)元素或者是初始包含塊。元素原先在正常文檔流中所占的空間會(huì)關(guān)閉,就好像元素原來(lái)不存在一樣。元素定位后生成一個(gè)塊級(jí)框,而不論原來(lái)它在正常流中生成何種類(lèi)型的框。)

fixed

生成固定/絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位。

元素的位置通過(guò) "left", "top", "right" 以及 "bottom" 屬性進(jìn)行規(guī)定。

(元素框的表現(xiàn)類(lèi)似于將 position 設(shè)置為 absolute,不過(guò)其包含塊是視窗本身。)

relative

生成相對(duì)定位的元素,相對(duì)于其正常位置進(jìn)行定位。

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

(相對(duì)定位實(shí)際上被看作普通流定位模型的一部分,因?yàn)樵氐奈恢孟鄬?duì)于它在普通流中的位置。元素框偏移某個(gè)距離。元素仍保持其未定位前的形狀,仍保留原本所占的空間。 )

static

默認(rèn)值。沒(méi)有定位,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明,即上述聲明無(wú)效)。

(元素框正常生成。塊級(jí)元素生成一個(gè)矩形框,作為文檔流的一部分,行內(nèi)元素則會(huì)創(chuàng)建一個(gè)或多個(gè)行框,置于其父元素中。)

inherit :規(guī)定應(yīng)該從父元素繼承 position 屬性的值。

CSS 定位屬性

CSS 定位屬性允許你對(duì)元素進(jìn)行定位。

屬性 描述
position 把元素放置到一個(gè)靜態(tài)的、相對(duì)的、絕對(duì)的、或固定的位置中。
top 定義了一個(gè)定位元素的上外邊距邊界與其包含塊上邊界之間的偏移。
right 定義了定位元素右外邊距邊界與其包含塊右邊界之間的偏移。
bottom 定義了定位元素下外邊距邊界與其包含塊下邊界之間的偏移。
left 定義了定位元素左外邊距邊界與其包含塊左邊界之間的偏移。
overflow 設(shè)置當(dāng)元素的內(nèi)容溢出其區(qū)域時(shí)發(fā)生的事情。
clip 設(shè)置元素的形狀。元素被剪入這個(gè)形狀之中,然后顯示出來(lái)。
vertical-align 設(shè)置元素的垂直對(duì)齊方式。
z-index 設(shè)置元素的堆疊順序。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 簡(jiǎn)要描述CSS 中的定位機(jī)制 CSS中,除了默認(rèn)的流定位方式以外,還有如下幾種定位機(jī)制:浮動(dòng)定位、相對(duì)定位、絕...
    駭客與畫(huà)家閱讀 699評(píng)論 0 0
  • CSS 定位 (Positioning) 屬性允許你對(duì)元素進(jìn)行定位。 CSS 定位和浮動(dòng) CSS 為定位和浮動(dòng)提供...
    LorenSLJ閱讀 1,089評(píng)論 0 1
  • 一,浮動(dòng)元素有什么特征?對(duì)父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型,浮動(dòng)...
    DeeJay_Y閱讀 999評(píng)論 0 4
  • 1.浮動(dòng)元素有什么特征?對(duì)父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響? 何謂浮動(dòng)元素?有什么特征?所謂浮動(dòng)...
    草鞋弟閱讀 928評(píng)論 0 1
  • CSS 定位 CSS有三種基本的定位機(jī)制:普通流,浮動(dòng),絕對(duì)定位(absolute, fixed):普通流是默認(rèn)定...
    _空空閱讀 5,961評(píng)論 0 15

友情鏈接更多精彩內(nèi)容