2012-07-26 10 views
25

Natknąłem się na przypadek, w którym potrzebuję marginesu dziecka, aby rozwinąć pojemnik nadrzędny. Odkryłem, że przestrzeń poza rodzicem jest alokowana, ale sam rodzic nie jest rozszerzony. Następnie stwierdziłem, że dodanie do nadrzędnego `overflow: hidden 'mogłoby rozwiązać ten problem.Dlaczego dziecięce pionowe marginesy nie rozszerzają kontenera nadrzędnego?

Czy ktoś może rzucić jakiekolwiek światło na to, dlaczego tak się dzieje?

UPDATE:

I odkryli, że dodanie żadnej wyściółki lub wartość graniczną dla rodzica rozwiązuje również ten.

Updated Example

+1

+1 Dobre pytanie. Używasz tej poprawki od wieków .. przez cały ten czas, nie znając przyczyny. Chciałbyś o tym wiedzieć .. – techfoobar

+0

Czy to jedyna poprawka? To denerwujące radzenie sobie z konsekwencjami 'przepełnienia: ukryte;' – wilsonpage

+1

Jednym z rozwiązań jest nadanie 'dopełnienia: 10px 'rodzicowi zamiast dawania marginesu dziecku. – techfoobar

Odpowiedz

15

Odpowiedź na "dlaczego" jest opisany dobrze i zwięźle here. Istnieją pewne właściwości, które ustanawiają "block formatting context". A mianowicie:

pływaków, absolutnie [oraz fixed] Elementy umieszczone, pojemniki blokowe (takie jak inline bloki tabela komórki i obrusy tytułem), które nie blokują pola i pola bloku z przepełnienia "inny niż" widoczny "(z wyjątkiem , gdy ta wartość została propagowana do widoku), ustanawia nowe konteksty formatowania bloków dla ich zawartości.

Jest to zmiana kontekstu formatowania blokowego to jest powód dlaczego rozwiązania takie, jak podano powyżej w pracach komentarzy dla jak margin (aw przypadku poprzedzającego float, padding z następujących elementów napływie) działa .

+2

Artykuł, do którego następuje link, nie jest już dostępny w domenie colinaarts.com, ale jest dostępny [tutaj] (https://web.archive.org/web/20150423190902/http://colinaarts.com/articles/the-magic- of-overflow-hidden /). Prosto i prosto do rzeczy. Dzięki! – coderfin

Powiązane problemy