CSS 同級元素position:fixed和margin-top共同使用的問題

問題描述

想用CSS實現頂部固定的效果:
圖片描述css

嘗試margin-top加position:fixed實現,代碼以下:html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Test</title>
  <style type="text/css">
      .header {
          position: fixed;
          height: 20px;
          width: 100%;
      }
      .content {
          margin-top: 30px;
      }
      .aside {
          float: left;
          width: 200px;
          background: orange;
      }
      .main {
          overflow: auto;
          background: yellow;
      }
  </style>
</head>
<body>
    <div class="header">123</div>
    <div class="content">
        <div class="aside">aside</div>
        <div class="main">main</div>
    </div>
</body>
</html>

結果header沒有定位在頂部,而是空出了content的margin-top距離:

按照position:fixed的定義,header已經脫離文檔流,應該不會受到content佈局影響,但結果並不是如此。ide

問題探究

1.content的margin-top改成padding-top:可實現預期效果。
2.content同時設置margin-top和padding-top:仍會空出margin-top的距離。
3.body設置padding-top:會空出body的padding-top的距離,可實現預期效果。
4.body設置margin-top:會空出max(body->margin-top,content->margin-top)的距離。
5.給header設置top,如top: 0;:不受body和content的佈局影響。
TBD:以後補充詳細的測試代碼和效果圖( ̄∇ ̄)...佈局

總結

歸根結底是margin-top塌陷問題對position:fixed的影響。首先,對於position:fixed元素,若是不指定top,它在垂直方向上的參考原點是body盒模型的content的上邊界。若是指定top,它在垂直方向上的參考原點纔是咱們常說的視窗(viewport)的上邊界,left和水平方向同理。這裏的參考原點是指fixed元素佈局時的參考對象,一旦肯定,即使頁面被下拉,body上邊界上移,fixed元素位置也再也不改變。其次,由於margin-top塌陷問題,設置content的margin-top後,body的content部分會下移,即參考原點下移,因此fixed元素會空出margin-top的距離。測試

因此,能夠從兩方面解決這個問題:
1.將參考原點改成視窗:給fixed元素設置top。
2.解決margin-top塌陷問題,更多方法見下方連接:
1)給body設置padding-top。
2)給body設置border,border顏色和背景色一致。
3)給body設置position:fixed,這種會致使body的滾動條消失。spa

先將就看着呀~忙過這陣來完善(允悲)(允悲)。。。
TBD:content名字和盒模型content重啦待改....net

不懂position:fixed?=> position|MDN
不懂margin-top塌陷?=> margin-top塌陷問題的現象與解決code

相關文章
相關標籤/搜索