CSS 定位效果

來源:互聯網
上載者:User

      今天因為做一個效果的時候需要CSS的定位效果來實現,於是我就根據自己原來對CSS的瞭解,用absolute和relative擺弄了好一陣子,總是無法實現滿意的效果。不會,咋辦呢?搜吧。這年代,啥問題還是得靠搜尋引擎。網上一瞭解才發現自己原來對定位的瞭解有誤,調整了代碼,實現了想要的效果,便於以後學習,把經驗留在這,嘿嘿。

      我想實現的效果很簡單,就是在一張圖片上加另一個圖片,說的有點亂,還是直接看好了。


   ()
     (原圖)

       相信看了圖,大家肯定覺得很眼熟,如果你對實現這種效果很熟悉,就不需要再看下去了哦。如果你感興趣的話, 就繼續往下看吧(不過你最好已經且有了簡單的CSS知識)~~

      說白了,實現這個效果還是用了position屬性的relative和absolut,但是這兩個值經常會讓人產生“自以為是”的感覺。大家一定要注意,這裡的relative和absolute都是有一個參照物的。

       在這之前,先來介紹一個概念“常規文檔流”,我們一般布局的元素“<h1>This is a header</h1><p>This is some text</p><p>And even more text</p>”都是按照其布局的次序一次排列。這就屬於常規文檔流。

      “position:absolute”是以body元素的左上方為起始點或以距擁有postion:absolute的DIV最近的那個擁有postion屬性父級DIV的左上方為起始點。通過left,top,right,bottom屬性來操作。並且該定位方法超出了常規文檔流,因此不會對其它元素產生影響(不會導致其它元素位置的改變、大小的改變

等)

      “postion:relative”是以body元素作為參照物或以其父級DIV作為參照物(不是超始點)。通過left,top,right,bottom屬性來操作。

        為了說明問題,我們舉幾個例子來看一下:

例子代碼
<html>
<head>
</head>
<body style="margin:0px 0px">

<div id="div0" style="width:100px;height:100px;border:1px solid #aaa">普通的div1
<div id="div1" style="position:absolute;left:100px;top:100px;border:1px solid #ccc;width:100px;height:100px;">
這裡用了absoulte
</div>
</div>
<div id="div0" style="width:100px;height:100px;border:1px solid #aaa">普通的div2
<div id="div2" style="position:relative;left:100px;top:100px;border:1px solid #ccc;width:100px;height:100px;">
這裡用了relative
</div>
</div>

</body>
</html>

 

       : 

      

      通過上面這個圖,我想大家應該看出什麼了吧?

      普通的div屬於常規文檔流,因此它們兩個是按照次序布局的。而使用了absolute之後,因為超出了常規文檔流,所以並沒有對普通div1產生任何影響,而且是以瀏覽器左上方的起始點進行精確定位。

      而用了relative之後,會發現它與absolute不一樣,它是以父級div作為參照對象,但不是以父級對象的起始點做為參考點。通過觀察大家應該可以看出普通div2的長度被拉長了,拉長的距離則恰好是“普通的div2”這幾個字的高度。這說明了什嗎?

      這說明relative首先是被當作常規文檔流進行處理,也就是說先按照次序進行布局,應該出現在“普通的div2”的下方。

     

      因此,由於使用了relative的那個div高度為100px,因此普通的div2被展開,這之後,使用了relative的那個div才按照absolute來處理。

      如果大家搞明白了,就可以開始運用這個postion屬性的兩個值來實現相應的效果了。

      要實現開頭的那個效果思路如下:

      我們可以選有一個div來做圖片的容器(並且加上position屬性,我設定為relative因為這樣可以運用於常規文檔流中,且可以相對於視窗的大小而相對靜止),然後在該容器中添加一個div(設定position屬性為absolute,因為我們希望該層覆蓋在原圖片上方,如果選用relative則會先根據常規文檔流處理,雖然可以通過left、top、bottom、right屬性達到覆蓋效果,可是同樣會影響原div大小),然後調節top,bottom則可實現效果。

      相應代碼如下:

效果代碼
<div style="position: relative;width: 86px; height: 110px; border: 1px solid; float: left; margin-right: 20px">
  <img width="86" height="110" src='1.jpg' alt="" />
  <div style="position:absolute;background:url(images/new.gif) no-repeat;width:37px;height:37px;top:0px;"></div>
  <div style="position:absolute;  top:88px; width: 86px; height: 22px;text-align: center; background: white; filter: alpha(opacity=50);">
  片名
  </div>
</div>
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.