2017-03-08 4 views
2

Soweit ich weiß, dass die Höhe als Prozentsatz arbeiten soll, muss das Containerelement eine bestimmte Höhe haben. Dies gilt jedoch nicht für ein absolut positioniertes Element, bei dem der Vorfahr relativ positioniert ist. Hier ist ein funktionierendes Beispiel dafür, was ich meinte:Warum funktioniert die Höhe 100% auf einem absolut positionierten Element?

.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>

Wie Sie die absolut platziert div angewendet 100% Höhe auf sie sehen können, aber nicht die statisch positioniert div. Warum?

+1

Ihr 'Kind' Element, da Sie keine' Position' beschreiben, ist es standardmäßig 'position: static;'. Um Ihre 'Höhe: 100%;' zu berechnen, sollte das Elternelement eine 'height' definiert haben, tut dies aber nicht. In diesem Fall wird der Browser die Höhen seiner Kinder nicht ändern/berechnen, wenn sie nicht absolut positioniert sind (sodass sie mit der Größe ihres Inhalts übereinstimmen). Der "position: absolute;" - Fall ist anders, da er berechnet wird, nachdem das Elternelement gerendert wurde. –

+0

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

Antwort

0

Von MDN

relativ Dieses Schlüsselwort alle Elemente legt, als ob das Element nicht positioniert wurden, und stellt dann die Position des Elements, ohne das Layout zu ändern (und damit eine Lücke für das Element verlassen, wo würde es wurde es nicht positioniert worden). Die Auswirkung von position: relativ auf die Elemente table - * - group, table-row, table-column, table-cell und table-caption ist nicht definiert.

Read more. Ist sehr schön beschrieben.

+1

Wie bedeutet dies, dass absolut positionierte Elemente den Prozentwert richtig anwenden? – user31782

+0

Ja, aber immer daran denken - absolute Positionierung bezieht sich auf sein Elternelement. Von MDN: _ "Lassen Sie keinen Platz für das Objekt. Positionieren Sie es stattdessen an einer bestimmten Position relativ zu seinem nächstgelegenen Vorfahre, falls vorhanden, oder auf andere Weise relativ zum ursprünglichen umschließenden Block." _ – andfra

0

Here ist ein großer lesen über die verschiedenen Positionstypen:

Absolute ist relativ zu dem Element Eltern und nicht durch andere Elemente betroffen sind und aus der Strömung von der Seite entfernt heißt Sie die Liste sehen mit eins, zwei, drei unberührt.

Seine Höhe ist 100% wie .child spezifiziert.

+0

Ich lese den Csstricks Artikel. Es erklärt nur die CSS-Positionierung, sagt aber nicht, warum das absolut positionierte Element die Höhe in Prozent berücksichtigt, während die statisch positionierten Elemente dies nicht tun. – user31782

+0

Hilft der 'Definition von containing block' Abschnitt von [this] (https://www.w3.org/TR/CSS2/visudet.html#containing-block-details) Artikel? – DeclanPossnett

+0

Etwas. Dieser Abschnitt scheint den beobachtbaren Effekt zu implizieren: _Wenn die Höhe des umschließenden Blocks nicht explizit angegeben ist (dh, sie hängt von der Inhaltshöhe ab) und dieses Element nicht ** absolut positioniert ** ist, wird der Wert auf 'auto' berechnet. _ – user31782

Verwandte Themen