Пишите впереди:
Попробуйте ответить на несколько вопросов:
- Что такое блочная модель и какие свойства ей управляют?
- Margin, Padding, Border, Width, Height — эти свойства изменяют/влияют на блочную модель, но будет ли каждое свойство действовать на все элементы?
- Если есть разница, связана ли она с типом элемента или его расположением?
- Что такое плавающий элемент? Как определяется местоположение? Если пойти плавать?
- Как судить о приоритете каскадных отношений? Чем больше, тем ближе к пользователю?
Блочная модель — это то, с чем мы соприкасаемся каждый день, но всегда плохо понимается, как именно блочная модель рассчитывает расположение. В этой статье делается попыткаСпецификация W3CНачните с примеров, чтобы решить вышеуказанные проблемы.
содержание
содержащий блок (containing block)
коробочная модель (Box model)
режим позиционирования (Positioning schemes)
Каскадные отношения (Layered presentation)
содержащий блок
концепция
Каждый блок становится содержащим блок своего потомка, а размер и положение дочернего блока вычисляются в соответствии с прямоугольным ограничивающим блоком содержащего его блока. Но не будет ограничен содержащим блоком, может переполниться.
Как определить содержащий блок
- Для корневого элемента элемент с position=fixed, содержащим блоком является область просмотра
- Если элемент является относительным или статическим, это область содержимого (содержимое) его ближайшего родительского элемента в форме блока. Примечание. Он указывает, что родительский элемент должен быть блочным контейнером.
- Если элемент абсолютный, содержащий его блок — это область Padding ближайшего нестатического родительского элемента — примечание: тип родительского элемента не указан
Пример
Самое интуитивное суждение о содержащем блоке — это когда элемент устанавливает процентное отношение к размеру, какой элемент является относительным элементом, а этот элемент — содержащим его блоком.
1. Самый простой пример
2. Когда em становится абсолютным позиционированием
коробочная модель
Margin
- ширина. Разделены на четыре направления, все поддерживают процент и конкретные пиксели. И процент поля рассчитывается в соответствии с шириной содержащего блока элемента. Дело не в том, что margin-top/bottom соответствует высоте.образец кода
- Верхнее поле и нижнее поле встроенных элементов (отображение: встроенное) недействительны. Браузер не позволяет настройки.
- сливаться.
- Горизонтальные поля не объединены (поддерживаются как встроенные блоки, так и встроенные)образец кода
- Оба принадлежат обычным блок-блокам в потоке, родственным элементам в одном и том же контексте. Решение. Превратите один из блок-блоков в BFC, чтобы предотвратить слияние полей.образец кода
- Когда родительский элемент блочного уровня и его дочерние элементы не разделены отступами, рамкой, высотой или промежутками, поля дочернего элемента будут проникать в родительский элемент. Проще говоря, между родительским и дочерним элементами нет других элементов.образец кода
- Для элемента position=static отрицательное значение эквивалентно перемещению элемента в отрицательном направлении для покрытия, но оно закроет только цвет, а не текст.образец кода
- Для элементов position=relative отрицательное значение по-прежнему останется и переместит элемент ниже, но полностью закроет предыдущий элемент.образец кода
- Для элемента position=absolute, поскольку элемент находится вне потока документов, отрицательное значение будет смещено только само по себе и не повлияет на предшествующие и последующие элементы.образец кода
- Для элементов с плавающей запятой это может быть переопределено отрицательными значениями, и наиболее распространенным приложением является приложение с тремя столбцами.образец кода
Padding
- ширина. То же, что маржа.
- Заполнение встроенного элемента (display: inline) вступает в силу, но верх и низ не будут толкать, а только закрывать другие элементы, а покрытие следует принципу z-index.образец кода
- сливаться. В Padding нет ситуации слиянияобразец кода
- Отрицательные значения не допускаются.
Border
- ширина. Только px, проценты не поддерживаются.
- сливаться. Строчные элементы не объединяются слева и справа, но будут объединяться вверх и вниз. Элементы встроенного блока и блока не будут сливаться во всех четырех направлениях.образец кода
Width
- У встроенных элементов не может быть задана ширина и высота.
- Процентные настройки невстроенных элементов (см. содержащий блок выше)
- Рассчитывается на основе ширины поля содержимого содержащего блока
- Если текущий элемент позиционирован абсолютно, он позиционируется относительно ширины поля заполнения родительского элемента.
Height
Метод расчета такой же, как ширина
режим позиционирования
регулярный поток
Существует несколько крупных моделей элементов in-stream. CSS2.1 определяет IFC (контексты встроенного форматирования) и BFC (контексты блочного форматирования). В CSS3 добавлены GFC (контексты форматирования GridLayout) и FFC (контекст форматирования Flex). Последние две последующие статьи будут объяснены подробно и не будут упоминаться здесь.
Контекст форматирования блока BFC (контексты форматирования блока)
- Что происходит с BFC (выберите одно из четырех)
- плавать
- абсолютное позиционирование
- Блок-контейнеры, не являющиеся блок-боксами (встроенный блок)
- Overflow не является блок-боксом для Visible
- Расположите вертикально от верхней части содержащего блока
- Поля между соседними блоками внутри BFC будут объединены — слияние может быть разрешено путем превращения одного из братьев и сестер в BFC.
- BFC может предотвратить слияние маржи
IFC (встроенные контексты форматирования) встроенные контексты форматирования
- Как сгенерировать: Генерируется только в том случае, если элемент блочного уровня содержит только элементы встроенного уровня.
- характеристика
- Расположите горизонтально от верхней части содержащего блока
- Расположение и плавание изменят высоту строки строки
- Когда линейный блок разделен, поля, границы и отступы больше не имеют визуальных эффектов.
плавать
- Концепция. CSS-свойство float указывает, что элемент должен располагаться вдоль левой или правой стороны контейнера, что позволяет обтекать его текстом и встроенными элементами. Элемент удаляется из обычного потока страницы, хотя некоторый поток все еще сохраняется.
- Место нахождения:
- Когда элемент перемещается, он перемещается из обычного потока документа, а затем перемещается влево или вправо, пока не коснется границы контейнера, в котором он находится, или не коснется другого плавающего элемента.
- Плавающий элемент будет судить о позиции по типу предыдущего элемента, если предыдущий плавающий, то он последует за ним, а если его нельзя опустить, то он будет передвинут на следующую строку.
- Если предыдущий элемент является стандартным элементом потока, относительная вертикальная высота плавающего элемента не изменяется, а верх выравнивается с низом предыдущего элемента.
- Введите пробелы, родительский элемент использует псевдоэлемент ::after
- Плавающие элементы ограничены BFC, используйте overflow:hidden
- Очистить свойство
абсолютное позиционирование
Position=absolute задает абсолютное позиционирование элемента, что приведет к тому, что элемент станет абсолютным позиционированием, вне потока документа, и в это время элемент находится в макете BFC, а Margin не будет объединен. Используйте верхний/нижний/левый/правый (сокращенно TBLR ниже) для управления изменением положения, а определенные пиксели и проценты смещаются относительно содержащего блока.
Сравните другие значения свойства положения
- position = статическая обычная схема потока, не может контролировать позицию через TBLR
- Position = Относительная коробка смещена относительно его нормального положения потока, а элементы брата расположены относительно их позиции предварительной смещения. При использовании элемента управления TBLR, если он является фиксированным пикселем, коробка смещена относительно собственной границы, и если это процент, это относится к смещению содержащего блока.
- Position = Fixed содержит блоки в виде окна, использование элементов управления TBLR относится к смещению блока
- Для процентов: слева/справа относительно ширины содержащего блока, сверху/снизу относительно высоты содержащего блока
Каскадные отношения
Всего существует 7 уровней стекирования в контексте стекирования, перечисленных ниже:образец кода
- Фон и граница — фон и граница элементов, формирующих контекст наложения. Самый низкий уровень в контексте стека.
- Отрицательные значения z-index — дочерние элементы с отрицательными значениями z-index в контексте стека.
- Блочные блоки — невстроенные, непозиционированные дочерние элементы в потоке документа.
- Floating Box — непозиционированный плавающий элемент.
- Встроенное поле — непозиционированный дочерний элемент встроенного уровня в потоке документа.
- z-index: 0 - позиционировать элемент. Эти элементы формируют новый контекст стека.
- Положительные значения z-index — позиционирование элемента. Самый высокий уровень в контексте стека.
Когда z-индексу элемента присваивается значение, отличное от auto, создается новый контекст наложения, независимый от других контекстов наложения.
Порядок сравнения становится следующим: сначала сравните z-индекс каждого контекста наложения. Затем приоритет дочерних элементов сравнивается в контексте стека.
Суммировать
- В этой статье объясняется содержащий блок и блочная модель, определенная на основе содержащего блока, и обобщается метод расчета четырех границ блочной модели.
- Обобщаются методы позиционирования элементов и изменения положения между элементами, вызванные различными методами позиционирования.
- Дальнейшие действия продолжат разбирать общие, но запутанные места в CSS в краткой форме.
- Если есть какая-либо ошибка, пожалуйста, укажите на нее, и давайте вместе добиваться прогресса~