dobre uwagi już tutaj przedstawione, ale chociaż istnieje wiele informacji o tym, jak renderowanie marginesów jest wykonywane przez przeglądarkę, dlaczego nie ma jeszcze pełnej odpowiedzi:
„Dlaczego margin-top: -8px to nie to samo co margin-bottom: 8px?”
moglibyśmy również zapytać:
Dlaczego dodatni dolny margines nie „podbija” poprzedzających elementów, podczas gdy dodatni górny margines „nie podnosi” kolejnych elementów?
więc widzimy, że istnieje różnica w renderowaniu marginesów w zależności od strony, po której są one stosowane - marginesy górne (i lewe) różnią się od marginesów dolnych (i prawych).
rzeczy stają się jaśniejsze, gdy przyjrzymy się (uproszczonemu), jak style są stosowane przez przeglądarkę: elementy są renderowane z góry na dół w rzutni, zaczynając od lewego górnego rogu (na razie trzymajmy się renderowania pionowego, pamiętając, że poziomy traktuje się tak samo).
rozważ następujący html:
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
Analogicznie do ich pozycji w kodzie, te trzy pola pojawiają się w przeglądarce w stosie „od góry do dołu” ( mówiąc prostym, nie będziemy tutaj rozważać orderwłaściwości modułu css3 „flex-box” ). tak więc za każdym razem, gdy style są stosowane do pola 3, pozycje poprzedzającego elementu (dla pola 1 i 2) zostały już określone i nie powinny być już zmieniane ze względu na szybkość renderowania.
teraz wyobraź sobie górny margines -10 pikseli dla ramki 3. zamiast przesuwać wszystkie poprzednie elementy w górę, aby zebrać trochę miejsca, przeglądarka po prostu przesunie pole 3 w górę, więc jest renderowane na górze (lub pod spodem, w zależności od indeksu Z ) wszelkie poprzednie elementy. nawet jeśli wydajność nie była problemem, przesunięcie wszystkich elementów w górę mogłoby oznaczać przesunięcie ich poza obszar wyświetlania, a zatem bieżąca pozycja przewijania musiałaby zostać zmieniona, aby wszystko było ponownie widoczne.
to samo dotyczy dolnego marginesu dla pola 3, zarówno negatywnego, jak i pozytywnego: zamiast wpływać na już ocenione elementy, określa się tylko nowy „punkt wyjścia” dla kolejnych elementów. w ten sposób ustawienie dodatniego dolnego marginesu spycha w dół następujące elementy; negatywny spowoduje ich wzrost.
onsetioffset. To prawda, że tak wiele osób zawsze używa słowaoffset( negatywne ), kiedy ma na myślionset( pozytywne ). Ta wiadomość ulegnie samozniszczeniu, jeśli zaktualizujesz swoją odpowiedź. Twoje zdrowie!