to dlatego
h1
mieć jakiś margines pionowy domyślnie zazwyczaj 0.67em
.
- Górny margines
h1
zapada
height
nie zawiera wysokość obszaru marginesu
Ponieważ górny margines h1
wali, to zachowuje się jak margines należał do header
zamiast h1
. Ponieważ wysokość zawartości h1
wynosi 10%
, jej całkowita wysokość będzie wynosić calc(10% + 0.67em)
.
To dlatego występuje przepełnienie.
Jeśli usuniesz górny margines, ale pozostawisz dolny, nie ma problemu, ponieważ dolny nie zwija się, ze względu na nie-auto
height
. Z Collapsing margins,
marginesami są przylegający jeżeli [...] zarówno należą do pionowo sąsiadującymi krawędzi skrzyni [... np]
- górny margines pudełka i górnego marginesu swojego pierwszego dziecka w przepływowym
- dolny margines ostatnim dzieckiem w przepływowym i dolnej marginesie jego rodzica, jeśli ma
auto
obliczoną wysokość.
Więc można wykonać dowolną z następujących
- Usuń
h1
„s górny margines
- Prevent the margin collapse
- Zaproponowanie
box-sizing: margin-box
do Grupy Roboczej CSS. Prawdopodobnie zostanie odrzucony.
to jest właściwie najlepsza odpowiedź. Ale niektóre pytania: w jaki sposób może załamać się margines, jeśli mam tylko jeden element z marginesem? Po drugie, jakie rozwiązanie zaleca Pani wśród swoich sugestii? – Matthew
Wspomniałem o 'margin-bottom', ponieważ w wielu (najbardziej?) Przypadkach będą elementy poniżej" h1 ". Pytanie, które zakładam, było bardzo uproszczonym przykładem. W rzeczywistym użyciu "margin-bottom" może mieć wpływ. Zgadzam się jednak, że w tym przypadku liczy się tylko "margin-top". –
@Matthew Jeśli nie potrzebujesz marginesu, usunę go. W przeciwnym razie użyłbym 'h1 {display: inline-block}' lub podobnego, aby zapobiec zawaleniu się marginesu. – Oriol