margin百分比,重疊和auto

2022-02-04 04:28:05 字數 1739 閱讀 3285

一. margin百分比

1. 普通元素的百分比margin都是相對於容器的寬度計算

2. 絕對定位元素的百分比margin是相對於第乙個定位祖先元素(relative/absolute/fixed)的寬度計算

這是在預設的 writing-mode: horizontal-tb; 和 direction: ltr; 的情況下,

若書寫模式變成縱向的時候,其參照將會變成包含塊的高度。

二. margin重疊

1. 通常特性

block水平元素(不包括float和absolute元素)

不考慮writing-mode,只發生在垂直方向(margin-top/margin-bottom)

2. 重疊的3種情境

a.相鄰的兄弟元素

b. 父級和第乙個/最後乙個子元素

子元素的margin-top相當於父元素的margin-top

a.margin-top重疊

父元素非塊狀格式化上下文元素

父元素沒有border-top設定

父元素沒有padding-top值

父元素和第乙個子元素之間沒有inline元素分隔

b.margin-bottom重疊

父元素非塊狀格式化上下文設定

父元素沒有border-bottom設定

父元素沒有padding-bottom值

父元素和第乙個子元素之間沒有inline元素分隔

父元素沒有height,min-height,max-height

c.空的block元素

元素沒有border設定

元素沒有padding值

裡面沒有inline元素

沒有height或者min-height

3. 計算規則

正正取大值

正負值相加

負負最負值

4. margin重疊的解決方法

4.1 相鄰兄弟元素的重疊

最簡單的方法是,使用同方向的margin,即a盒子margin-bottom: 50px,b盒子margin-top: 100px,直接用b盒子margin:150px就行了,不用使用兩個方向的margin。

4.2 父子元素的重疊

4.2.1  給父元素新增乙個before偽元素,.father:bofore,content中有個空格

4.2.2 將父元素做成bfc,例如overflow:hidden

4.2.3 對父元素使用padding-top,不使用margin

4.2.4 將父元素定位,例如,position:fixed

三. margin auto

margin的值為auto,是自動佔據包含塊的剩餘空間,例如

<

div

id="demo"

>

<

p>恩,我就是那個p。

p>

div>

#demo#demo p

則p的實際margin-left為500-100=400px,p元素右對齊

當margin-left和margin-right同為auto時,左右平分剩餘空間,元素居中

參考: 

margin之百分比

我們以乙個問題開始 假設乙個塊級包含容器,寬1000px,高600px,塊級子元素定義 margin 10 5 大家說說 margin 的 top,right,bottom,left 計算值最終是多少?我記得得到不少 100px 30px 100px 30px 的反饋,我們來還原 css demo ...

margin和pading的百分比值

對元素的margin設定百分數時,百分數是相對于父元素的width計算,不管是margin top margin bottom還是margin left margin right。padding的原理也是一樣的。為什麼margin top margin bottom的百分數是相對於width而不是h...

margin之百分比(二)

在 margin系列之keyword auto 中,說過了margin值為auto的情況,這次要聊的是值為百分比的情形。我必須承認這是乙個非常基礎的知識點,但有一段時間我發現很多人對此有錯誤的認知。偶爾在面試或者分享的時候,我會問到這個問題,有人會脫口而出的告訴我他對此的感性理解。或許現在大多數人對...