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

問題描述
想用CSS實現(xiàn)頂部固定的效果:
嘗試margin-top加position:fixed實現(xiàn),代碼如下:
<!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>
結(jié)果header沒有定位在頂部,而是空出了content的margin-top距離:
按照position:fixed的定義,header已經(jīng)脫離文檔流,應該不會受到content布局影響,但結(jié)果并非如此。
問題探究
1.content的margin-top改為padding-top:可實現(xiàn)預期效果。
2.content同時設置margin-top和padding-top:仍會空出margin-top的距離。
3.body設置padding-top:會空出body的padding-top的距離,可實現(xiàn)預期效果。
4.body設置margin-top:會空出max(body->margin-top,content->margin-top)的距離。
5.給header設置top,如top: 0;
:不受body和content的布局影響。
TBD:之后補充詳細的測試代碼和效果圖( ̄∇ ̄)...
總結(jié)
歸根結(jié)底是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的滾動條消失。
先將就看著呀~忙過這陣來完善(允悲)(允悲)。。。
TBD:content名字和盒模型content重啦待改...
- 不懂position:fixed?=> position|MDN
- 不懂margin-top塌陷?=> margin-top塌陷問題的現(xiàn)象與解決
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
- 這篇文章主要介紹了css中子元素設置margin-top為什么影響了父元素,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著2019-05-22
margin-top塌陷問題的現(xiàn)象與解決的具體方法
這篇文章主要介紹了margin-top塌陷問題的現(xiàn)象與解決的具體方法的相關資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-13margin-top負值解決label 文字與input 垂直居中對齊問題
label 文字與input 垂直居中對齊不容易調(diào)好,不過使用margin-top負值可解決label文字與input垂直居中對齊問題2014-05-14父元素與子元素之間的margin-top問題(css hack)
給子元素盒子一個垂直外邊距margin-top,父元素盒子也會往下走margin-top的值,遇到此問題的朋友可以參考下本文或許會有意想不到的收獲2013-03-19- 這篇文章主要介紹了子元素margin-top導致父元素移動的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編2021-01-26