CSS 各類定位(position)方式的區別

定位(position)

position: relative/absolute/fixed/static/inheri

absolute :生成絕對定位的元素, 相對於最近一級的 定位不是 static 的父元素來進行定位。

fixed (老IE不支持)生成絕對定位的元素,一般相對於瀏覽器窗口或 frame 進行定位。

relative 生成相對定位的元素,相對於其在普通流中的位置進行定位。

static 默認值。沒有定位,元素出如今正常的流中

sticky 生成粘性定位的元素,容器的位置根據正常文檔流計算得出
  • static:靜態定位css


是position的默認值,元素框正常生成,也就是沒有定位時的正常顯示。html

  • relative:相對定位web

用法一:元素相對自身的原位置偏移某個距離,可是本來的空間依舊保留,表現爲空白
用法二:把一個元素設置爲position: relative; 可使該元素的子元素相對該元素絕對定位。瀏覽器

  • absolute:絕對定位佈局

元素從文檔流刪除,並相對於包含塊定位。元素在本來的空間關閉。元素定位後生成一個塊級框,不論它原來是行內元素仍是塊級元素。
包含塊:最近的position值不是static的祖先元素(塊級或行內),通常會指定一個元素做爲絕對定位元素的包含塊,將其position設置爲relative並且沒有偏移。測試

  • fixed:固定定位ui

元素從文檔流刪除,並相對於瀏覽器視窗定位,所以不隨文檔滾動而移動。元素在本來的空間關閉。元素定位後生成一個塊級框,不論它原來是行內元素仍是塊級元素。與絕對定位的區別僅僅是包含塊不一樣。
包含塊:瀏覽器視窗。code

  • sticky:CSS3新增屬性,FF和safari支持
    當定位內容在窗口中時,定位不起做用,相似於relative;可是當定位內容快要移出窗口時,相對窗口定位,相似於fixed;更詳細一點:當且僅當包含塊在水平位置超出窗口範圍時,left定位纔有意義;當且僅當包含塊在垂直位置超出窗口範圍時,top定位纔有意義;htm

在FF中的測試代碼:utf-8

<!DOCTYPE html>
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <style type="text/css">
      body{margin: 10px 10px 10px 10px;
        padding: 10px 10px 10px 10px;
        border: solid 2px blue;
        width:3000px;
        height: 3000px;
      }
      div.contain{
        position: relative;
        padding: 10px 10px 10px 10px;
        margin: 10px 10px 10px 10px;
        border: dotted 2px blue;
        height: 40px;
      }
      div.rela{
        position: relative;
        top:20%; left: 20%;
        border: solid 2px red; 
    height: 20px;  width: 200px;
      }
      div.abso{
        position:absolute;
        top:20%;left: 20%; 
        border: solid 2px red; 
    height: 20px;width: 200px;

      }
      div.fix{
        position: fixed;
        top:20%;left: 20%; 
        border: solid 2px red; 
    height: 20px;width: 200px;
      }
      div.stick{
        /*position: -webkit-sticky;*/
        position: sticky;
        top:20%;left: 20%; 
        border: solid 2px red; 
    height: 20px;width: 200px;

      }
    </style>
  </head>
  <body>
  <div class="contain">
      <div class="rela">
        relative
      </div>
       <div class ="abso">
        abso
      </div>
  </div>

      <div class ="fix">
        fix
      </div>

  <div class ="stick">
     stick
  </div>

  </body>
</html>

absolute/fixed和float對比

相似:元素都會從文檔流刪除,可是依舊會影響佈局;都會生成一個塊級框,不管原來是否是塊級元素。
區別:float的包含塊是最近塊級祖先元素。

偏移屬性:top/right/bottom/left,初始值是auto。

採用position定位以後必須採用偏移屬性定義偏移量,也就是相對包含塊的偏移。注意應用於position值不是static的元素。

有時也須要定義width和heigth,可是可能會和偏移屬性的定義衝突,由於四個偏移屬性實際上已經定義了元素的大小。此時,根據width和left屬性定義左右,根據top和height屬性定義上下。

CSS常見居中技巧

  1. 文本水平居中:

    text-align: center;
  2. div水平垂直居中:
    父級div設置爲positon: relative,須要居中的div元素設置如下樣式:

{position: absolute;
        width:400px;height:200px;
        left:50%;top:50%;
        margin-left:-200px;margin-top:-100px;
        border:1px solid #00F;
        }

解釋:設置元素爲position: absolute使元素相對父級元素定位,而後以百分比形式設置相對父級元素的偏移量,設置爲偏移50%並不是是徹底居中,還須要消除div自己的寬度和高度的影響,設置margin-left和margin-top爲一半寬度和高度的負值,此時徹底居中。

  1. div水平居中:

    margin: 0 auto;

若是還須要文本居中,設置

text-align: center;

內容溢出overflow: visible/ hidden/ scroll /auto/ inherit,初始值是visible。

一個元素的大小固定,可是其內容放不下,就會致使溢出。overflow控制溢出部分的可見(visible)、不可見(hidden)、滾動可見(scroll)。

元素可見性visibility: visible/ hidden/ collapse/ inherit,初始值是visible。

visibility:hidden和display:none的區別:visibility:hidden設置元素不可見,可是元素依舊會影響佈局,只是元素部分呈現爲空白;display:none元素不顯示而且從文檔流中刪除,對文檔佈局沒有任何影響。

相關文章
相關標籤/搜索