2017-03-08 95 views
2

就我所知的高度作爲百分比來說,容器元素必須具有特定的高度。但是,這並不適用於祖先相對定位的絕對定位元素。這裏是我的意思工作的例子:爲什麼身高100%適用於絕對定位的元素?

.container { 
 
    width: 400px; 
 
    background: cyan; 
 
    text-align: right; 
 
    position: relative; 
 
    color: white; 
 
} 
 

 
.child { 
 
    width: 90%; 
 
    height: 100%; 
 
    background: blue; 
 
} 
 

 
.absolute { 
 
    position: absolute; 
 
} 
 

 
.second { 
 
    margin-top: 30px; 
 
}
<div class="container"> 
 
    <div class="child absolute">Absolute</div> 
 
    one <br> two <br> three <br> one <br> two <br> three <br> 
 
</div> 
 
<div class="container second"> 
 
    <div class="child">Static</div> 
 
    one <br> two <br> three <br> one <br> two <br> three <br> 
 
</div>

正如你所看到的完全置於DIV適用100%的高度上,但不是靜態定位的div。爲什麼?

+1

您的'child'元素,因爲您沒有描述'position',所以默認爲'position:static;'。爲了計算你的'height:100%;',父元素應該定義一個'height',但它不會。在這種情況下,瀏覽器不會修改/計算其子節點的高度(如果它們不是絕對定位的(所以它們會顯示與其內容的大小相匹配)。 'position:absolute;'情況是不同的,因爲它是在父元素被渲染後計算的。 –

+0

https://www.w3.org/TR/CSS22/visudet.html#the-height-property – LGSon

回答

0

從MDN

相對 此關鍵字勾畫出的所有元素,就好像元件未定位,並且然後調節元件的位置,而不改變佈局(並因此留下間隙的元件,其中它會一直沒有定位)。位置:相對於表的效果 - * - 組,錶行,表列,表格單元和表標題元素未定義。

Read more。非常好描述。

+1

這是否意味着絕對定位的元素會正確應用高度百分比? – user31782

+0

是的,但始終記住 - 絕對定位是指他的父元素。來自MDN:_「不要留下物品的空間,而應將其放置在相對於其最近的定位祖先(如果有的話)的指定位置,或者相對於初始包含區塊。」# – andfra

0

Here是關於不同位置類型的一個偉大的閱讀:

絕對是相對父元素,而不是受到其他因素,並從頁面的流量被刪除,即你可以看到列表一,二,三不受影響。

以.child指定的高度爲100%。

+0

我閱讀了csstricks文章。它只解釋了css的定位,但並沒有說明爲什麼絕對定位元素尊重百分比高度,而靜態定位元素不是。 – user31782

+0

[this](https://www.w3.org/TR/CSS2/visudet.html#containing-block-details)文章的'contains block的定義'部分有幫助嗎? – DeclanPossnett

+0

有點。這部分似乎暗示了可觀察到的效果:_如果包含塊的高度沒有明確指定(即,它取決於內容高度),並且此元素不是**絕對定位**,則該值計算爲'auto'。 _ – user31782

相關問題