深入理解absolute

該文章總結(jié)自張鑫旭慕課,以及自己的使用經(jīng)驗和建議。

絕對定位absolute使用建議

建議無依賴相對定位relative來使用,需要用到偏移的時候用到margin值來實現(xiàn),同時,沒有依賴的絕對定位偏移的基礎(chǔ)是<u>原來的包含塊</u>。

<u>無依賴絕對定位</u>的特性:

位置跟隨(此時絕對定位的元素是不占據(jù)任何空間的,注意在ie6&ie7下絕對定位會把元素inline-block化)

使用注意:

  • 絕對定位中``````可以消去空格,保證完美的貼合
  • 由于絕對定位脫離文檔流的屬性,動畫盡量作用在絕對定位的元素上。

無依賴絕對定位的應(yīng)用:

  • 利用margin來進(jìn)行圖片偏移,更適合自適應(yīng)布局
  • 下拉框定位最佳實踐(無依賴)
  • 對齊居中或邊緣
    • 居中(并不是最佳實踐)
      使用text-align:centerposition: absolute;margin-left: -xxpx;來實現(xiàn)
      <div style="text-align: center;">
           //重點就是在這里
          <img style="width: 200px;position: absolute;margin-left: -100px;">
      <div>
      
    • 邊緣跟隨最佳實踐
      與上面的例子相似,只不過用text-align:right;,然后把邊緣的那個div設(shè)置為inline(注意fixabsolute的區(qū)別,fix其實算是絕對定位,只是它是根據(jù)于瀏覽器視窗口)
    • 溢出不換行(注冊頁面的tip提示)

絕對定位z-index無依賴

誤區(qū):絕對定位元素都需要z-index控制層級,確定其顯示的垂直位置

  • 如果只有一個絕對定位元素,自然不需要z-index,自動覆蓋普通元素
  • 如果兩個絕對定位元素,控制DOM流的前后順序達(dá)到需要的效果,依然無z-index
  • 如果多個絕對定位交錯,非常非常少見,z-index: 1;控制
  • 如果非彈框類的絕對定位元素z-index>2,便是冗余

absolute與height、width的應(yīng)用

注意:top,bottom,left,right百分比是依賴于父元素的寬高的(如果沒有限制的父元素就是整個文檔)

  • 全屏自適應(yīng)黑色半透明遮罩層

    html.body {
        height: 100%;
    }
    .overlay {
        position: absolute;
        width: 100%;
        height: 100%;
        left: 0;
        top: 0;
    }
    

    或者(沒有寬高也能實現(xiàn))

    .overlay {
        position: absolute;
        left: 0;top: 0;right: 0;bottom: 0;
        ...
    }
    

    可見,如果絕對定位方向是對立的,結(jié)果是相互拉伸而不是瞬間位移。所以下面其實是等價的(拉伸和width/height相互代替)ie7+

    position: absolute; left: 0;top: 0;bottom: 0;width: 50%;
    ===
    position: absolute; left: 0;top: 0;bottom: 0;right: 50%;
    

    其他的情況也是類似的。

  • 如果想要制作一個遮罩層距離右邊200px,可以這樣實現(xiàn)

    .overlay {
        background-color: #000;
        position: absolute;
        right: 200px;
        top: 0;
        left: 0;
        bottom: 0;
    }
    

    如果使用width,就必須用到css3,這在兼容性上就大打折扣。

    .overlay {
        background-color: #000;
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        width: calc(100% - 200px);//存在兼容性問題
    }
    

    所以,這種拉伸的效果代替寬度有兩個優(yōu)點:

    • 容器無需固定widthheight,內(nèi)部也可以拉伸
    • 容器拉伸,內(nèi)部元素支持百分比width/height
  • 如果拉伸屬性和width/height同時存在,width/height設(shè)置的尺寸會大于拉伸屬性設(shè)置的尺寸
    如:下面的寬度是50%而不是100%

    position: absolute;top: 0;left: 0;right: 0;bottom: 0;width: 50%;
    

    相互合作性:

    position: absolute;left: 0;right: 0;width: 50%;
    

    此時,假設(shè)上面的代碼給它加一句margin: auto,就能實現(xiàn)水平居中了。(ie8+)

  • 絕對定位居中

    position: absolute;left: 0;right: 0;bottom: 0;top: 0;height: xxx;margin: auto;//必須有高度
    

    可見,top/bottomheight結(jié)合可以實現(xiàn)垂直居中,left/rightwidth結(jié)合可以實現(xiàn)水平居中

利用絕對定位實現(xiàn)WEB整體布局效果(總結(jié))

  • 做遮罩層
html,body {
    height: 100%;
}//這里可以不需要
.overlay {
    position: absolute/fixed;//覆蓋整個document用fixed
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
  • 各個模塊各居其位(適合用于移動端開發(fā),頭尾固定中間顯示信息,解決iosfixed兼容性問題)

    • 頭尾
    header,footer {
        position: absulote;
        //水平拉伸
        left: 0;
        right: 0;
    }
    header {
        height: 48px;
        top: 0;
    }
    footer {
        height: 52px;
        bottom: 0;
    }
    
    • 側(cè)邊欄
    aside {
        width: 250px;
        position: absolute;
        left: 0;
        //高度百分之百拉伸
        top: 0;
        bottom: 0;
    }
    
    • 內(nèi)容區(qū)域想象成body
    content {
        position: absolute;
        top: 48px;//頭部高度去除
        bottom: 52px;//尾部高度去除
        left: 250px;//如果有側(cè)邊欄的話
        overflow: auto;
    }
    
    • 全屏覆蓋要與整個大容器平級(不是content而是整個大div
    <!--全屏拉伸.overlay的css代碼-->
    <div class="page"></div>
    <div class="overlay"></div>
    
  • 水平垂直居中定位(略)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,090評論 1 92
  • 各種純css圖標(biāo) CSS3可以實現(xiàn)很多漂亮的圖形,我收集了32種圖形,在下面列出。直接用CSS3畫出這些圖形,要比...
    劍殘閱讀 9,977評論 0 8
  • 不會用代碼框,所以看著有些亂套,,,,html部分 <!DOCTYPE html> 迅雷看看 ...
    這就是個帥氣的名字閱讀 1,891評論 0 0
  • 一、創(chuàng)建本地開發(fā)版?zhèn)}庫 可以參考 Cocoapods管理本地代碼上部分。 @我的印象筆記 二、創(chuàng)建服務(wù)端私有倉庫 ...
    _淺墨_閱讀 502評論 0 1
  • 已經(jīng)是新江湖的第三個階段了 前面兩個周期我都有堅持每日簡書打卡 每天抒發(fā)500字的認(rèn)知提升或者是情感共鳴 大概是因...
    亓霽_真想一直任性閱讀 265評論 0 0

友情鏈接更多精彩內(nèi)容