css中的絕對定位和 相對定位

2021-02-13 郭朋濤

點擊上方藍字「郭朋濤網頁設計」可直接關注


很多學習布局的同學,都卡在定位這塊,難就難在相對定位與絕對定位的配合上,不知道他們兩個之間具體有什麼區別。

這節課雖然文字性的內容比較多,但是基本上每一句話都很重要,如果想學好,那就耐下心來仔細看,對教程中的每個假設都要自己驗證,自己總結規律,如果自己懶的證明,那就記住本節最後的話就行了。

提問:如果頁面內某個元素沒有設定position屬性,那麼他是否具有position屬性?

回答:具有position屬性,並且屬性值是static。原因在於網頁裡任一元素的默認position屬性值均是static(靜態)。

上面這個問題主要是給大家補充一個知識點,很多Web前端開發工程師都不知道這點,所以在這節開頭給大家補補課。

這節課主要講講absolute(絕對定位)和 relative(相對定位)。

【position:absolute】

意思是絕對定位,他默認參照瀏覽器的左上角,配合TOP、RIGHT、BOTTOM、LEFT(下面簡稱TRBL)進行定位。

為了讓大家更容易理解這句話,我們舉個例子

例子

製作一寬度為200px,高度為200px,背景色為紅色(#900)的方塊,距離瀏覽器左側220px,距離瀏覽器頂部為100px,效果:

分析:如果想實現這個效果,我們用外邊距也是可以實現的,但是我們這節學的是定位,那麼我們就要用定位的知識來實現。

要知道,當一個元素具有了定位屬性(特指絕對定位和相對定位)後,想把它精確定位於某一個位置,只需要設置TRBL中的任意相鄰的兩個就可以,針對上面的例子我們用left和top

HTML代碼

CSS代碼:



絕對定位具有以下屬性:(下面的這些屬性大家自己證明,對於下面說的「父級」,就是在原有的盒子外面,在套一層寬度和高度大於原有盒子尺寸的盒子)

如果沒有TRBL,以父級的左上角,在沒有父級的時候,他是參照瀏覽器左上角,如果在沒有父級元素的情況下,存在文本,則以它前面的最後一個文字的右上角為原點進行定位但是不斷開文字,覆蓋於上方。

如果設定TRBL,並且父級沒有設定position屬性,那麼當前的absolute則以瀏覽器左上角為原始點進行定位,位置將由TRBL決定。

如果設定TRBL,並且父級設定position屬性(無論是absolute還是relative),則以父級的左上角為原點進行定位,位置由TRBL決定。即使父級有Padding屬性,對其也不起作用,說簡單點就是:它只堅持一點,就以父級左上角為原點進行定位,父級的padding對其根本沒有影響。

以上三點可以總結出,若想把一個定位屬性為absolute的元素定位於其父級元素內,必須滿足兩個條件:

設定TRBL

父級設定Position屬性

上面的這個總結非常重要,可以保證各位在用absolute布局頁面的時候,不會錯位,並且隨著瀏覽器的大小或者顯示器解析度的大小,而不發生改變。

只要有一點不滿足,元素就會以瀏覽器左上角為原點,這就是初學者容易犯錯的一點,已經定位好的版塊,當瀏覽器的大小改變,父級元素會隨之改變,但是設定Position屬性為absolute的板塊和父級元素的位置發生改變,錯位了,這就是因為此時元素以瀏覽器的右上角為原點的原因。

【position:relative】

意思是相對定位,他是默認參照父級的原始點為原始點,配合TRBL進行定位,當父級內有padding等CSS屬性時,當前級的原始點則參照父級內容區的原始點進行定位。

為了幫助大家理解上面的那句話,還是拿個例子來說明

例子:

製作一寬度為400px,高度為300px,背景色為灰色(#ccc)的方塊,水平居中於瀏覽器,id為div1,在div1內,製作一寬度為100px,高度為100px,背景色為綠色(#090)的方塊。效果:



HTML代碼



CSS代碼



從上面代碼是不是可以看出,相對定位的元素div2是以父級div1的左上角為原始點的,如果需要將div2定位於div1的某處的話,肯定需要TRBL中的任意相鄰兩個,現在將div2定位於div1內(80px,60px)處,也就是div2距離div1的左邊為80px,頂部為60px,效果如下:

為了達到這個效果,只需要給div2一個left和top的值就可以了

如果現在我們再給div1一個內邊距padding:50px,那麼div2以哪裡為原點呢?html代碼沒變和上面一樣,下面只列出CSS代碼

效果如下:(斜線部分為內邊距區域,在實際效果中是不沒有的)

現在知道div2以哪裡為原點了吧~

相對定位有以下屬性:(同樣大家在下面自己證明)

如果沒有TRBL,以父級的左上角,在沒有父級的時候,他是參照瀏覽器左上角(到這裡和absolute第一條一樣),如果在沒有父級元素的情況下,存在文本,則以文本的底部為原始點進行定位並將文字斷開(和absolute不同)。

如果設定TRBL,並且父級沒有設定position屬性,仍舊以父級的左上角為原點進行定位(和absolute不同)

如果設定TRBL,並且父級設定position屬性(無論是absolute還是relative),則以父級的左上角為原點進行定位,位置由TRBL決定(前半段和absolute一樣)。如果父級有Padding屬性,那麼就以內容區域的左上角為原點,進行定位(後半段和absolute不同)。

以上三點可以總結出,無論父級存在不存在,無論有沒有TRBL,均是以父級的左上角進行定位,但是父級的Padding屬性會對其影響。

綜合上面對relative的敘述,我們就可以將position屬性為relative的div視成可以用TRBL進行定位的普通div,或者說只要將我們平時布局頁面的div的CSS屬性中加上position:relative後,就不只是用float布局頁面了,還可以用TRBL進行布局頁面了,再或者說加上position:relative的div也可以像普通的div進行布局頁面了,只不過還可以用TRBL進行布局頁面。

但是,position屬性為absolute不可以用來布局頁面,因為如果用來布局的話,所有的DIV都相對於瀏覽器的左上角定位了,所以只能用於將某個元素定位於屬性為absolute的元素的內部某個位置,這樣我們就可以總結比較重要的結論

屬性為relative的元素可以用來布局頁面,屬性為absolute的元素用來定位某元素在父級中的位置,既然屬性為absolute的元素用來定位某元素在父級中位置,就少不了TRBL,這時候根據一開始講的absolute的第三條,如果父級元素沒有position屬性那麼absolute元素就會脫離父級元素,但是如果是布局頁面,父級元素position的屬性又不能為absolute,不然就會以瀏覽器左上角為原點了,所以父級元素的position屬性只能為relative!

=============================

總結:如果用定位來布局頁面,父級元素的position屬性必須為relative,而定位於父級內部某個位置的元素,最好用absolute,因為它不受父級元素的padding的屬性影響,當然你也可以用relative,計算的時候不要忘記計算padding的值。



郭朋濤 (個人微信:mrguopengtao)

郭朋濤,掘土峰創始人,從事網頁設計行業8年,網頁教學4年。致力於培養有思想的網頁設計師。喜歡請點擊右上角分享,謝謝。作者QQ:363708180

▲回復「m」,查看更多精彩文章

▲掘土峰:www.juetufeng.com

❤感謝轉載分享

相關焦點

  • HTML+CSS:css定位詳解之相對定位、絕對定位和固定定位
    本篇文章我們主要給大家說一下css的定位。css的定位是我們以後網頁製作中比較常用的屬性,也是很重要的知識點。了解各個定位的作用以及層級關係對以後的頁面布局至關重要。css定位主要有四種,靜態定位、相對定位、絕對定位和固定定位。其中靜態定位這個是元素的默認定位方式,不能使用top,bottom,left,right和z-index屬性,其它三種定位可以使用以上幾個屬性。我們這裡主要介紹後邊的這三個定位。
  • div+css定位技術之相對定位和絕對定位
    1.relative:相對定位說明:定位元素相對原來的自己進行定位的方式,脫離普通的文檔流,依然佔用原來空間<!Author"content=""><metaname="Keywords"content=""><metaname="Description"content=""><title>Document</title><styletype="text/css
  • 相對定位、絕對定位、固定定位(position)
    相對定位css相對定位效果 absolute:絕對定位,相對於它上一個已經定位的祖先元素進行定位,如果所有祖先元素都沒有定位就以當前屏幕進行定位。如果子元素想在父元素上定位而父元素不想挪動位置,那麼就為父元素設置相對定位且父元素的top和left為0。(自絕父相)
  • CSS中固定定位、相對定位、絕對定位以及flex布局高效定位
    6.接下來只要把left和right分別移動到這兩個留白就可以了。可以使用相對定位移動 left和right部分。  雙飛翼布局比聖杯布局多使用了1個div,少用大致4個css屬性(聖杯布局container的 padding-left和padding-right這2個屬性,加上左右兩個div用相對布局position: relative
  • CSS+DIV相對定位和絕對定位的區別和聯繫
    你對CSS+DIV定位的概念是否熟悉,這裡和大家分享一下,主要包括CSS+DIV相對定位和絕對定位兩大部分內容,如果理清了定位的原理,那定位會讓網頁實現的更加完美,相信本文介紹一定會讓你有所收穫。而下方是一塊默認定位的黑色區塊。我們看到這個處在文本流的區塊被上面的CSS+DIV相對定位擋住了一部分,這說明:「當元素被設置CSS+DIV相對定位或是CSS+DIV絕對定位後,將自動產生層疊,他們的層疊級別自然的高於文本流」。除非設置其z-index值為負值,但是在Firefox等瀏覽器中z-index為負值時將不會顯示。
  • CSS 絕對定位屬性absolute用法初探
    ,這裡和大家分享一下CSS 絕對定位的屬性absolute,希望對你的學習有所幫助。CSS absolute屬性設置為絕對定位的元素框從文檔流完全刪除,並相對於其包含塊定位,包含塊可能是文檔中的另一個元素或者是初始包含塊。元素原先在正常文檔流中所佔的空間會關閉,就好像該元素原來不存在一樣。元素定位後生成一個塊級框,而不論原來它在正常流中生成何種類型的框。
  • CSS之定位一(position屬性)
    relative表示相對定位,在文檔流中仍然佔有空間,其參考對象是離該元素最近的父元素。圖1表示父元素的position值變化時,子元素(position=relative)與父元素的相對位置,由圖可以看出其相對位置不隨父元素的position值變化而變化。
  • 20-CSS 絕對定位 absolute
    該元素原來在文檔流的位置將消失,元素定位後生成一個塊級元素框。例子:#div2{    position: absolute;    top: 20px;    left: 30px;}圖示如下:絕對定位圖示請比較和相對定位的不同,絕對定位後,框2原來的位置消失,框1和框3挨在了一起。
  • css中的定位
    相對定位是將元素相對於它在標準流中的位置進行定位,當position屬性的取值為relative時,可以將元素定位於相對位置。        對元素設置相對定位後,可以通過邊偏移屬性改變元素的位置,但是它在文檔流中的位置仍然保留。 注意:相對定位最重要的一點是,它可以通過邊偏移移動位置,但是原來的所佔的位置,繼續佔有。就是說,相對定位的盒子仍在標準流中,它後面的盒子仍以標準流方式對待它。
  • 剖析CSS relative相對定位用法
    剖析CSS relative相對定位用法 上節介紹了CSS絕對定位的概念,這裡和大家分享一下CSS relative相對定位的用法,設置為相對定位的元素框會偏移某個距離。
  • 深入學習CSS DIV相對定位語法
    深入學習CSS DIV相對定位語法 CSS DIV相對定位指你所定位的要素的位置相對於在文件中所分配的位置,絕對定位使你能精確地定位要素在頁面的獨立位置,而不考慮頁面其它要素的定位設置。
  • CSS+DIV常見的三種元素定位方式,你知道幾個?
    css中元素的定位複雜的網頁布局都是通過各種網頁元素靈活定位實現的,網頁中的各種元素定位都有自己的特點。今天為大家聊一下css中常用的三種定位方法。這裡說的定位不是table排版的,而是通過DIV+CSS的方法對頁面中的塊元素的定位。float定位float定位是css排版非常重要的手段,新手一定要多多練習熟練掌握。float定位屬性值有三種left、right和默認值none。
  • CSS:定位(position)
    相對定位relative(自戀型)小笑話: 剛剛看到一個超級超級帥的帥哥,看得我都忍不住想和他搞基了。世間怎會有如此之完美的男人。我和他就這樣一動不動的對視著,就仿佛一見鍾情。時間也在這一瞬間停止了。直到我的手麻了。才戀戀不捨的放下鏡子。。。。
  • CSS固定定位{position:fixed}
    這就是通過CSS的定位屬性{position:fixed}來實現的,通過它可以讓HTML元素脫離文檔流固定在瀏覽器的某個位置。IE7、Firefox、Opera,都支持CSS的{position:fixed},所以很容易實現(《詳解定位與定位應用》) IE6不支持該屬性,但是在使用!
  • CSS分欄布局的方法:絕對定位和浮動
    第一種方法是使用四種CSS定位選項(absolute 、static、relative和fixed)中的絕對定位(absolute positioning),它可以將文檔中的某個元素從其原本位置上移除,並重新定位在期望的任何地點之上。第二種則是使用CSS中的浮動(float)概念。絕對定位或浮動都能夠用來實現分欄效果。二者可以獨立使用,也可以結合在一起,相輔相成。
  • CSS(四)——定位(position)
    定位模式(position)在CSS中,通過position屬性定義元素的定位模式,語法如下:定位模式是有不同分類的,在不同情況下,我們用到不同的定位模式。相對定位(relative) 相對定位是元素相對於它原來在標準流中的位置來說的。(自戀型)
  • CSS之定位二(偏移屬性)
    本文我們接著之前的定位話題來展開討論偏移屬性。偏移屬性理解起來其實很簡單,就是負責告訴瀏覽器元素相對於父元素的偏移位置。這裡要說明兩點:1、偏移屬性只對定位元素(即position值不是static的元素)有效;2、這裡的父元素是之前《css之定位一(position屬性)》中談論的父元素。偏移屬性有top、bottom、left、right四個屬性,其屬性值各自對應length、percentage、auto、inherit四種(即長度值、百分比、自動、繼承)。
  • HTML & CSS頁面布局之定位
    定位流分為四種:a) static 靜態定位,實際上所有元素默認都是靜態定位的,即處於標準流中。b) relative 相對定位,元素保留在標準流中所佔用的位置,但實際是邊框及以內的部分將顯示在偏移之後的位置。即雖然元素已經不再原來的位置了,但之前所佔用的空間並不會被釋放給其他標準流中的元素。
  • CSS中position屬性的用法和作用
    CSS中position屬性的用法和作用 本文向大家介紹一下CSS中Position屬性的用法和作用,Position屬性有四個可選值,它們分別是:static、absolute、fixed、relative。
  • XPATH元素定位詳解
    path,Css元素通用定位問題通常情況下,元素定位使用id、name、class、text可以滿足日常大部分定位需求。但是隨著自動化測試的深入,和不同框架要求,會發現上面的定位方式無法解決一些元素定位。