Распространенный прием для вертикального позиционирования элементов - использовать следующий CSS:
.item {
position:absolute;
top:50%;
margin-top:-8px; /* half of height */
height: 16px;
}
Если смотреть в метрическом представлении, как в Chrome, вы видите следующее:
Однако при наведении курсора на элемент визуальное поле не отображается, т.е. поле находится «за пределами» границы и может быть визуализировано. Но отрицательная маржа не отображается. Как они выглядят и чем они отличаются?
Почему margin-top:-8px
не то же самое margin-bottom:8px
?
Итак, как работают отрицательные поля и что за ними стоит интуиция. Как они «поднимают» (в случае margin-top < 0
) предмет?
onset
иoffset
. Это правда, что многие люди всегда используют словоoffset
( отрицательный ), когда имеют в видуonset
( положительный ). Это сообщение самоуничтожится, если вы обновите свой ответ. Ура!margin-bottom: -8px;
? Почемуmargin-bottom:-8px
не то же самоеmargin-top:-8px
?Верхнее поле -8 пикселей означает, что оно будет на 8 пикселей выше, чем при нулевом поле.
Нижнее поле в 8 пикселей означает, что объект под ним будет на 8 пикселей ниже, чем если бы у него было 0 полей.
источник
margin-bottom: -8px;
? Почемуmargin-bottom:-8px
не то же самоеmargin-top:-8px
?здесь уже упоминались хорошие моменты, но хотя есть много информации о том, как браузер выполняет рендеринг полей, ответ на вопрос « почему» еще не получен:
мы также можем спросить:
Итак, мы видим разницу в визуализации полей в зависимости от стороны, к которой они применяются - верхние (и левые) поля отличаются от нижних (и правых).
все становится более ясным, если (упрощенно) взглянуть на то, как стили применяются браузером: элементы отображаются в окне просмотра сверху вниз, начиная с верхнего левого угла (давайте пока придерживаемся вертикального рендеринга, имея в виду, что горизонтальный трактуется так же).
рассмотрим следующий html:
аналогично их положению в коде, эти три блока отображаются в браузере сгруппированными «сверху вниз» ( для простоты мы не будем рассматривать здесь
order
свойство модуля css3 «flex-box» ). Итак, всякий раз, когда стили применяются к блоку 3, позиции предшествующих элементов (для блоков 1 и 2) уже определены, и их больше не следует изменять ради скорости рендеринга.теперь представьте верхнее поле -10 пикселей для блока 3. вместо того, чтобы сдвигать все предыдущие элементы, чтобы собрать некоторое пространство, браузер просто подтолкнет блок 3 вверх, чтобы он отображался поверх (или под ним, в зависимости от z-индекса ) любые предыдущие элементы. даже если производительность не была проблемой, перемещение всех элементов вверх могло означать их перемещение за пределы области просмотра, поэтому текущую позицию прокрутки пришлось бы изменить, чтобы все снова было видно.
то же самое относится к нижнему полю для поля 3, как отрицательному, так и положительному: вместо того, чтобы влиять на уже оцененные элементы, определяется только новая «отправная точка» для следующих элементов. таким образом установка положительного нижнего поля приведет к понижению следующих элементов; отрицательный подтолкнет их вверх.
источник
Поскольку вы использовали абсолютное позиционирование и указали верхний процент, только margin-top будет влиять на расположение вашего объекта .item. Если вместо этого вы разместите его с помощью bottom: 50%, тогда вам понадобится margin-bottom -8px для его центрирования, а margin-top не будет иметь никакого эффекта.
Margin влияет на границы элемента с точки зрения его позиционирования, либо абсолютно, как в вашем случае, либо относительно соседних элементов. Представьте, что маржа - это основа вашего элемента, на котором он находится. Как правило, они того же размера, но могут быть увеличены или уменьшены на любом или всех четырех краях.
Ваш CSS сообщает браузеру, что верхняя часть вашего элемента должна располагаться на полях на 50% длины страницы. Однако, поскольку все элементы не являются одним пикселем, браузеру необходимо знать, какая его часть должна выровняться на 50% вниз по странице. Для выравнивания верхней части элемента используется верхнее поле. По умолчанию это соответствует верхней части элемента, но вы можете изменить это с помощью CSS.
В вашем случае верхние 50% приведут к тому, что верх элемента начнется в середине страницы. Применяя отрицательное верхнее поле, браузер использует точку 8 пикселей в элементе сверху (т. Е. Линию через его середину) в качестве места для размещения на 50%.
Если вы применяете положительное поле к нижней части, это расширяет линию, которую браузер использует для позиционирования нижней части от самого элемента, создавая зазор между ним и любым соседним элементом ниже или влияя на то, где он размещается, если позиционирование основано на дно.
источник
Интересно, хорошо ли дан ответ на этот вопрос: как работают поля css и почему это margin-top: -5; не то же самое, что margin-bottom: 5 ;?
Маржа - это расстояние от окружения элемента. margin-top говорит: «... расстояние от окружающей среды, когда мы измеряем от верхней« стороны »элемента« box », а margin-bottom - это расстояние от нижней« стороны »« коробки »». Затем margin-top: 5; относится к периметру верхней «стороны», в данном случае -5; все, что приближается к верхней «стороне», может перекрывать верхнюю «сторону» элемента на 5, а нижняя граница: 5; означает, что расстояние между нижней «стороной» элемента и окружением равно 5.
В основном это, но на это влияют элементы с плавающей точкой и тому подобное: http://www.w3.org/TR/CSS2/box.html#margin-properties .
http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins/
Меня поправят.
источник