CSS position:absolute全面了解

一、絕對定位的特征
絕對定位有著與浮動一樣的特性,即包裹性和破壞性。
就破壞性而言,浮動僅僅破壞了元素的高度,保留了元素的寬度;而絕對定位的元素高度和寬度都沒有了。
請看下面代碼:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>絕對定位的特征</title>
- <style>
- .box1,.box2,.box3 {
- background-color: orange;
- margin-bottom: 30px;
- }
- .absolute {
- position: absolute;
- }
- .wraper {
- display:inline-block;
- margin-left: 300px;
- }
- .float {
- float: left;
- }
- .box3 {
- position: absolute;
- }
- </style>
- </head>
- <body>
- <div class="box1">
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
- <p>這是普通流中的兩幅圖像。</p>
- </div>
- <div class="box2">
- <img class="absolute" src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
- <div class="wraper">
- <img class="float" src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
- </div>
- <p>左圖,將第一幅圖像絕對定位,其完全脫離文檔流,并且覆蓋在第二幅圖像之上;由此看出,絕對定位的破壞性不僅讓元素沒有了高度,甚至沒有了寬度。</p>
- <p>右圖,將第一幅圖像左浮動,其雖然脫離了文檔流,但是并沒有覆蓋在其他元素之上;浮動的破壞性僅僅破壞了元素的高度,而保留了元素的寬度。</p>
- </div>
- <div class="box3">
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- <img src="http://pic1.win4000.com/wallpaper/c/537b28b60619b.jpg" alt="A picture" style="width:240px;height:180px" />
- <p>將容器絕對定位,體現(xiàn)其包裹性。</p>
- </div>
- </body>
- </html>
二、絕對定位的一般規(guī)則:
元素絕對定位時,會完全脫離文檔流,并相對于其包含塊定位。
絕對定位的包含塊,是其最近的已定位的祖先元素。
如果這個祖先元素是塊級元素,包含塊則為該祖先元素的內(nèi)邊距邊界,即邊框。
如果這個祖先元素是行內(nèi)元素,包含塊則為該祖先元素的內(nèi)容邊界,即內(nèi)容區(qū)。
如果沒有已定位的祖先元素,元素的包含塊定義為初始包含塊。
偏移屬性:top、right、bottom、left。
如果絕對定位的元素沒有設置偏移屬性,雖然脫離文檔流,但是它的位置是原地不動的。
偏移屬性可以為負值,將元素定位到包含塊之外。
代碼在這里:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>絕對定位的一般規(guī)則</title>
- <style>
- body {
- background-color: #ccc;
- }
- .container {
- width:500px;
- background-color: orange;
- margin:20px auto 50px auto;
- padding:20px;
- border:2px solid red;
- }
- .box2 img,.box3 img,
- .box4 img,.box5 img {
- position: absolute;
- }
- .box3 img,.box4 img {
- left:0;
- bottom:0;
- }
- .box5 img {
- left: -30px;
- bottom: -50px;
- }
- .block {
- position :relative;
- height: 200px;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <div class="box1">
- <p>元素絕對定位時,會完全脫離文檔流,并相對于其包含塊定位。絕對定位的包含塊,是其最近的已定位的祖先元素。</p>
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- <ul>
- <li>如果這個祖先元素是塊級元素,包含塊則為該祖先元素的內(nèi)邊距邊界,即邊框。</li>
- <li>如果這個祖先元素是行內(nèi)元素,包含塊則為該祖先元素的內(nèi)容邊界,即內(nèi)容區(qū)。</li>
- <li>如果沒有已定位的祖先元素,元素的包含塊定義為初始包含塊(一個視窗大小的矩形)。</li>
- </ul>
- </div><!--關(guān)閉box1-->
- </div><!--關(guān)閉container-->
- <div class="container">
- <div class="box2">
- <p>不管有沒有已經(jīng)定位的祖先元素,只要沒有偏移量,絕對定位之后,原地不動,脫離文檔流。</p>
- <p>下面這個已經(jīng)絕對定位的圖像原地沒動,但是已經(jīng)脫離了文檔流。</p>
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- </div><!--關(guān)閉box2-->
- </div><!--關(guān)閉container-->
- <div class="container">
- <div class="box3">
- <p>沒有已經(jīng)定位的祖先元素,有偏移量,絕對定位之后,以初始包含塊(一個視窗大小的矩形)為基準進行偏移。</p>
- <p>當偏移量為left:0; buttom:0時,圖像水平偏移到了初始包含塊左下角(打開網(wǎng)頁最開始的那一個視窗的左下角)。</p>
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- </div><!--關(guān)閉box3-->
- </div><!--關(guān)閉container-->
- <div class="container block">
- <div class="box4">
- <p>有已經(jīng)定位的祖先元素,有偏移量,絕對定位之后,以已經(jīng)定位的祖先元素為基準進行偏移。</p>
- <p>此處已經(jīng)定位的祖先元素為這個圖像的容器div元素,偏移量為left:0; bottom:0時,圖像到了這個容器的左下角(以邊框為界)。</p>
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- </div><!--關(guān)閉box4-->
- </div><!--關(guān)閉container-->
- <div class="container block">
- <div class="box5">
- <p>有已經(jīng)定位的祖先元素,有偏移量,絕對定位之后,以已經(jīng)定位的祖先元素為基準進行偏移。</p>
- <p>此處已經(jīng)定位的祖先元素為這個圖像的容器div元素,偏移量為left:-30px; bottom:-50px時,圖像到了這個容器之外(以邊框為界)。</p>
- <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="width:175px;height:100px" />
- </div><!--關(guān)閉box5-->
- </div><!--關(guān)閉container-->
- </body>
- </html>
三、用margin調(diào)整絕對定位元素的位置
絕對定位的元素,除了可以使用top、right、bottom、left進行偏移之外,還能夠通過margin值進行精確定位,而且自適應性更好。
示例:
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>用margin調(diào)整絕對定位元素的位置</title>
- <style>
- .box1,.box2,.box3 {
- display: inline-block;
- margin-right: 150px;
- border:1px solid blue;
- }
- span {
- background-color: red;
- }
- .box2 span,.box3 span {
- position: absolute;
- }
- .meng {
- margin-left: -3em;
- }
- .box4 {
- border:1px solid red;
- width: 500px;
- margin: 50px auto 0 auto;
- padding:20px;
- }
- li {
- margin-bottom: 20px;
- }
- </style>
- </head>
- <body>
- <div class="box1">
- <span>卡哇伊</span>
- <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
- <span>萌萌噠</span>
- </div>
- <div class="box2">
- <span>卡哇伊</span>
- <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
- <span>萌萌噠</span>
- </div>
- <div class="box3">
- <span>卡哇伊</span>
- <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" style="width:200px;height:300px" />
- <span class="meng">萌萌噠</span>
- </div>
- <div class="box4">
- <ol>
- <li>第一幅圖,最開始的樣子。</li>
- <li>第二幅圖,兩個標簽絕對定位,但是不指定任何偏移量。</li>
- <li>第三幅圖,用margin負值調(diào)整“萌萌噠”的位置,完成。</li>
- </ol>
- </div>
- </body>
- </html>
放棄偏移屬性而改用margin來調(diào)整絕對定位元素,其原理在于:
絕對定位的元素,在不設置偏移量的時候,它雖然完全脫離了文檔流,但它還在原來的位置。
利用偏移屬性進行精確定位,其具體位置是取決于絕對定位元素的包含塊,不同的包含塊將會有完全不一樣的定位結(jié)果。
而利用margin進行精確定位,不依賴于任何其他東西,更加可控。
四、絕對定位與整體布局
如何用絕對定位來對頁面進行整體布局?
簡單粗暴,不學就浪費啦?。。?/p>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>絕對定位與整體頁面布局</title>
- <style>
- * {
- margin: 0;
- }/*重置所有margin為0,這一步極其重要,否則布局必亂。*/
- html,body,.page {
- width: 100%;
- height: 100%;
- overflow: hidden;
- }
- .page {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- background-color: #ccc;
- }
- .header {
- position: absolute;
- height: 50px;
- left: 0;
- right: 0;
- background-color: purple;
- padding: 0 5px;
- z-index: 1;
- }
- .header>h1 {
- line-height: 50px;
- text-align: center;
- }
- .aside {
- position: absolute;
- top: 50px;
- bottom: 50px;
- left: 0;
- width: 100px;
- background-color: orange;
- }
- .footer {
- position: absolute;
- right: 0;
- bottom: 0;
- left: 0;
- height: 50px;
- background-color: purple;
- }
- .footer>h1 {
- text-align: center;
- line-height: 50px;
- }
- .content {
- position: absolute;
- top: 50px;
- right: 0;
- bottom: 50px;
- left: 100px;
- background-color: cyan;
- overflow: auto;
- }
- .content h1 {
- margin-top: 100px;
- margin-left: 50px;
- }
- .content li {
- margin-left: 100px;
- margin-top: 80px;
- font-size: 24px;
- line-height: 1.5;
- }
- ol {
- margin-bottom: 80px;
- }
- </style>
- </head>
- <body>
- <div class="page">
- <div class="header">
- <h1>Header</h1>
- </div>
- <div class="aside">
- <h1>Aside</h1>
- </div>
- <div class="content">
- <h1>實現(xiàn)原理</h1>
- <ol>
- <li>創(chuàng)建一個div.page,絕對定位,鋪滿全屏。</li>
- <li>創(chuàng)建一個div.header,絕對定位,設定高度。</li>
- <li>創(chuàng)建一個div.aside,絕對定位,設定寬度。</li>
- <li>創(chuàng)建一個div.footer,絕對定位,設定高度。</li>
- <li>創(chuàng)建一個div.content,絕對定位,根據(jù)周圍div的寬高設定它的寬高;<br />
- 以div.content元素取代原body元素,所有的頁面內(nèi)容都放在這里面。</li>
- </ol>
- </div>
- <div class="footer">
- <h1>Footer</h1>
- </div>
- </div>
- </body>
- </html>
以上這篇CSS position:absolute全面了解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
原文地址:http://www.cnblogs.com/cc156676/archive/2016/07/19/5685300.html
相關(guān)文章
淺談CSS中display/float/position屬性值的相互影響
下面小編就為大家?guī)硪黄獪\談CSS中display/float/position屬性值的相互影響。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-17css(display,float,position)深入理解
下面小編就為大家?guī)硪黄猚ss(display,float,position)深入理解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-17- 下面小編就為大家?guī)硪黄猚ss position 設置元素的定位方式詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-05
- 下面小編就為大家?guī)硪黄狢SS 定位之position全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-08
使用CSS3的ruby-position固定注音位置的用法示例
ruby-position能在樣式上定制文字周圍的注音位置,頁面編碼設置好以后可以用來制作各種語言之間的加注翻譯效果,下面我們來看一下使用CSS3的ruby-position固定注音位置的用法2016-07-05總結(jié)CSS的position定位屬性在使用的一些重點
這篇文章主要總結(jié)了CSS的position定位屬性在使用的一些重點,包括對絕對定位和相對定位等的強調(diào),需要的朋友可以參考下2016-05-31css關(guān)于position屬性的用法詳解(絕對定位和相對定位的混淆)
下面小編就為大家?guī)硪黄猚ss關(guān)于position屬性的用法詳解(絕對定位和相對定位的混淆)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-08