CSS定位屬性詳解

最近學(xué)習(xí)CSS相關(guān)知識(shí)李丰,定位是其中的一個(gè)難點(diǎn)鹦肿。不了解其中細(xì)節(jié),有時(shí)候在使用的時(shí)候會(huì)弄得一團(tuán)糟玫镐。本篇文章整理下關(guān)于定位屬性的具體理解與應(yīng)用倒戏。

一、簡(jiǎn)介

1.文檔流

在介紹postion之前恐似,有必要先了解下文檔流杜跷。

簡(jiǎn)單說就是元素按照其在 HTML 中的位置順序決定排布的過程。HTML的布局機(jī)制就是用文檔流模型的,即塊元素(block)獨(dú)占一行葛闷,內(nèi)聯(lián)元素(inline)憋槐,不獨(dú)占一行。

一般使用margin是用來隔開元素與元素的間距淑趾;padding是用來隔開元素與內(nèi)容的間隔阳仔。margin用于布局分開元素使元素與元素互不相干;padding用于元素與內(nèi)容之間的間隔扣泊,讓內(nèi)容(文字)與(包裹)元素之間有一段“距離”近范。

只要不是float和絕對(duì)定位方式布局的,都在文檔流里面延蟹。

表現(xiàn)如下:

    <div style="border:1px solid black">div1</div>
    <div style="border:1px solid red">div2</div>
    這是一張圖片
    <img src="test.png">

2.position屬性介紹

  • static评矩,默認(rèn)值。位置設(shè)置為static的元素阱飘,它始終會(huì)處于文檔流給予的位置斥杜。
  • inherit,規(guī)定應(yīng)該從父元素繼承 position 屬性的值俯萌。但是任何的版本的 Internet Explorer (包括 IE8)都不支持屬性值 “inherit”果录。
  • fixed,生成絕對(duì)定位的元素咐熙。默認(rèn)情況下弱恒,可定位于相對(duì)于瀏覽器窗口的指定坐標(biāo)。元素的位置通過 “l(fā)eft”, “top”, “right” 以及 “bottom” 屬性進(jìn)行規(guī)定棋恼。不論窗口滾動(dòng)與否返弹,元素都會(huì)留在那個(gè)位置。但當(dāng)祖先元素具有transform屬性且不為none時(shí)爪飘,就會(huì)相對(duì)于祖先元素指定坐標(biāo)义起,而不是瀏覽器窗口。
  • absolute师崎,生成絕對(duì)定位的元素默终,相對(duì)于距該元素最近的已定位的祖先元素進(jìn)行定位。此元素的位置可通過 “l(fā)eft”犁罩、”top”齐蔽、”right” 以及 “bottom” 屬性來規(guī)定。
  • relative床估,生成相對(duì)定位的元素含滴,相對(duì)于該元素在文檔中的初始位置進(jìn)行定位。通過 “l(fā)eft”丐巫、”top”谈况、”right” 以及 “bottom” 屬性來設(shè)置此元素相對(duì)于自身位置的偏移勺美。

不管是哪種定位,都必須有一個(gè)參照物碑韵。找對(duì)了參照物赡茸,就成功了一半。

二泼诱、相對(duì)定位

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

相對(duì)定位完成的過程如下:

  • 按默認(rèn)方式(static)生成一個(gè)元素(并且元素像層一樣浮動(dòng)了起來)治筒。
  • 相對(duì)于以前的位置移動(dòng)屉栓,移動(dòng)的方向和幅度由 left、right耸袜、top友多、bottom 屬性確定,偏移前的位置保留不動(dòng)堤框。

實(shí)例

<style type="text/css">
        #box1 {
            margin: 20px;
            width: 200px;
            height: 200px;
            background-color: yellow;
        }
        #box2 {
            margin: 20px;
            width: 200px;
            height: 200px;
            background-color: red;
            /*position: relative;
            left: 100px;
            top: 100px;*/
        }
    </style>

    <div id="box1"></div>
    <div id="box2"></div>

其中box2中的注釋代碼未生效前域滥,是按照文檔流進(jìn)行排序呈現(xiàn)。


但是蜈抓,當(dāng)注釋代碼取消注釋生效后启绰,就會(huì)相對(duì)文檔流中應(yīng)當(dāng)呈現(xiàn)的位置進(jìn)行移動(dòng)。

所以沟使,相對(duì)定位的參照物是它本身委可。

三、絕對(duì)定位

絕對(duì)定位與相對(duì)定位的一大不同之處就是腊嗡,當(dāng)我們把一個(gè)元素設(shè)置成絕對(duì)定位着倾,那么這個(gè)元素將會(huì)脫離文檔流,其他元素就會(huì)認(rèn)為這個(gè)元素不存在于文檔流中而填充它原來的位置燕少。絕對(duì)定位元素根據(jù)它的參照物移動(dòng)自己的位置卡者,而參照物則需要根據(jù)它祖先元素的定位設(shè)置來確定。

所謂根據(jù)它祖先元素的定位設(shè)置來確定簡(jiǎn)單理解為:相對(duì)于該元素最近的已定位的祖先元素客们,如果沒有一個(gè)祖先元素設(shè)置定位崇决,那么參照物是body層。

實(shí)例

以上面的圖形來展示絕對(duì)定位的特性底挫∷宰可以看出最里層是兩個(gè)盒子,外面嵌套了兩層祖先元素凄敢。

1.祖先元素沒定位

在祖先元素沒定位的情況下,使用absolute湿痢。

#box1 {
            width: 150px;
            height: 150px;
            margin-left: 20px;
            margin-bottom: 20px;
            background-color: yellow;
            position: absolute;
            top: 30px;
            left: 30px;
        }


在這種情況下涝缝,參考物就是body扑庞。

2.祖先元素有定位

祖先元素只要設(shè)置了值不為position:static之外的值,都視為有定位拒逮,并且最近的祖先元素會(huì)被設(shè)置為絕對(duì)定位元素的參照物罐氨。

#orange {
            width: 400px;
            height: 400px;
            background-color: orange;
            position: absolute;

            
        }
        #box1 {
            width: 150px;
            height: 150px;
            margin-left: 20px;
            margin-bottom: 20px;
            background-color: yellow;
            position: absolute;
            top: 30px;
            left: 220px;
        }


在這種情況下,參考物就是最近的祖先元素滩援。

除了上述兩種情況外栅隐,在用戶沒給absolute元素設(shè)置left/right、top/bottom的情況下玩徊,所對(duì)應(yīng)的參考物會(huì)有變化租悄。

3.未設(shè)置left/right、top/bottom

在沒設(shè)置left/right恩袱、top/bottom的情況下泣棋,absolute元素的位置就是該元素在文檔流里的位置

#box1 {
            width: 150px;
            height: 150px;
            margin-left: 20px;
            margin-bottom: 20px;
            background-color: yellow;
            position: absolute;
        }

上圖可以看出兩個(gè)盒子重疊了,這是因?yàn)椋篴bsolute元素由于沒有設(shè)置left/right畔塔、top/bottom就按照其應(yīng)該在文檔流中出現(xiàn)的位置進(jìn)行定位潭辈,而absolute元素脫離文檔流,紅色的盒子元素并不知道absolute元素的存在澈吨,就繼續(xù)放置在該位置把敢,并且absolute元素會(huì)覆蓋正常文檔流中的元素。

四谅辣、總結(jié)

主要介紹了相對(duì)定位和絕對(duì)定位修赞,其他定位方式比較簡(jiǎn)單,試一試就知道了屈藐。另外榔组,相對(duì)定位和絕對(duì)定位的應(yīng)用也比較靈活,適用于多種場(chǎng)景联逻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搓扯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子包归,更是在濱河造成了極大的恐慌锨推,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件公壤,死亡現(xiàn)場(chǎng)離奇詭異换可,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)厦幅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門沾鳄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人确憨,你說我怎么就攤上這事译荞∪康模” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵吞歼,是天一觀的道長(zhǎng)圈膏。 經(jīng)常有香客問我,道長(zhǎng)篙骡,這世上最難降的妖魔是什么稽坤? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮糯俗,結(jié)果婚禮上尿褪,老公的妹妹穿的比我還像新娘。我一直安慰自己叶骨,他們只是感情好茫多,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忽刽,像睡著了一般天揖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跪帝,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天今膊,我揣著相機(jī)與錄音,去河邊找鬼伞剑。 笑死斑唬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的黎泣。 我是一名探鬼主播恕刘,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抒倚!你這毒婦竟也來了褐着?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤托呕,失蹤者是張志新(化名)和其女友劉穎含蓉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體项郊,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馅扣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了着降。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片差油。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖任洞,靈堂內(nèi)的尸體忽然破棺而出厌殉,到底是詐尸還是另有隱情食绿,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布公罕,位于F島的核電站,受9級(jí)特大地震影響耀销,放射性物質(zhì)發(fā)生泄漏楼眷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一熊尉、第九天 我趴在偏房一處隱蔽的房頂上張望罐柳。 院中可真熱鬧,春花似錦狰住、人聲如沸张吉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肮蛹。三九已至,卻和暖如春创南,著一層夾襖步出監(jiān)牢的瞬間伦忠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工稿辙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昆码,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓邻储,卻偏偏與公主長(zhǎng)得像赋咽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吨娜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案脓匿? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,758評(píng)論 1 92
  • 當(dāng)在這一個(gè)頁面上實(shí)現(xiàn)布局和定位有幾種不同的技術(shù)。使用哪種技術(shù)萌壳,很大程序上取決于內(nèi)容和目標(biāo)頁面亦镶,因?yàn)橛泻芏嗉夹g(shù)比別人...
    lulu_c閱讀 1,067評(píng)論 0 5
  • 之前介紹過CSS浮動(dòng)float詳解,本篇介紹的絕對(duì)定位absolute和浮動(dòng)float有部分相似性袱瓮。如果能理解浮動(dòng)...
    張歆琳閱讀 96,645評(píng)論 39 192
  • 我們先來看看CSS3 Api中對(duì)position屬性的相關(guān)定義:static:無特殊定位缤骨,對(duì)象遵循正常文檔流。to...
    JasonStack閱讀 666評(píng)論 0 3
  • 我坐在明亮的服裝店里尺借,看著小強(qiáng)換了一套又一套的新衣裳绊起。讓我疑惑的是:這些衣服穿在塑料的模特身上,都是很好看的燎斩,而且...
    半朽閱讀 436評(píng)論 4 20