здесь уже упоминались хорошие моменты, но хотя есть много информации о том, как браузер выполняет рендеринг полей, ответ на вопрос « почему» еще не получен:
«Почему margin-top: -8px не то же самое, что margin-bottom: 8px?»
мы также можем спросить:
Почему положительное нижнее поле не «увеличивает» предыдущие элементы, тогда как положительное верхнее поле «подталкивает» следующие элементы?
Итак, мы видим разницу в визуализации полей в зависимости от стороны, к которой они применяются - верхние (и левые) поля отличаются от нижних (и правых).
все становится более ясным, если (упрощенно) взглянуть на то, как стили применяются браузером: элементы отображаются в окне просмотра сверху вниз, начиная с верхнего левого угла (давайте пока придерживаемся вертикального рендеринга, имея в виду, что горизонтальный трактуется так же).
рассмотрим следующий html:
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
аналогично их положению в коде, эти три блока отображаются в браузере сгруппированными «сверху вниз» ( для простоты мы не будем рассматривать здесь order
свойство модуля css3 «flex-box» ). Итак, всякий раз, когда стили применяются к блоку 3, позиции предшествующих элементов (для блоков 1 и 2) уже определены, и их больше не следует изменять ради скорости рендеринга.
теперь представьте верхнее поле -10 пикселей для блока 3. вместо того, чтобы сдвигать все предыдущие элементы, чтобы собрать некоторое пространство, браузер просто подтолкнет блок 3 вверх, чтобы он отображался поверх (или под ним, в зависимости от z-индекса ) любые предыдущие элементы. даже если производительность не была проблемой, перемещение всех элементов вверх могло означать их перемещение за пределы области просмотра, поэтому текущую позицию прокрутки пришлось бы изменить, чтобы все снова было видно.
то же самое относится к нижнему полю для поля 3, как отрицательному, так и положительному: вместо того, чтобы влиять на уже оцененные элементы, определяется только новая «отправная точка» для следующих элементов. таким образом установка положительного нижнего поля приведет к понижению следующих элементов; отрицательный подтолкнет их вверх.
onset
иoffset
. Это правда, что многие люди всегда используют словоoffset
( отрицательный ), когда имеют в видуonset
( положительный ). Это сообщение самоуничтожится, если вы обновите свой ответ. Ура!