Я думаю, вам иногда больно писать код css каждый день: почему css этого макета так сложно реализовать! У меня также часто возникает ощущение, что, казалось бы, простой макет всегда требует много времени для реализации, и иногда могут возникать какие-то странные явления, не поддающиеся пониманию. Это потому, что мы только приблизительно знаем форму CSS и не видели сути CSS. По рекомендации коллеги я прочитал книгу Учителя Чжан Синьсюй «Мир CSS» и обнаружил, что CSS отличается от того, что я себе представлял. Эта статья представляет собой личное резюме заметок для "Мира CSS". Чтобы уменьшить объем, я отказался от излишнего юмора г-на Чжана и потерял несколько глав с низким содержанием золота. Поскольку IE был удален из игры, все аспекты, связанные с на совместимость с CSS также игнорируются.Я не помню, и я добавил некоторые свои собственные понимания и проверки в местах, которые я думаю, не легко понять, поэтому я надеюсь исправить ошибки. Кстати, порекомендуйте полезный онлайнинструмент для редактирования кода, домашнее зеркалосайт, чтобы вы могли протестировать примеры в этой статье. Кроме того, эта статья будет постепенно обновляться благодаря более глубокому пониманию автором CSS, и я надеюсь показать реальный мир CSS в качестве заголовка в конце.
Учитель Сяоган
- основная концепция
- шкатулка четыре бриллианта
- хороший друг
line-height
а такжеvertical-align
- разрушение потока
- Правила каскада
- текстовое управление
- Отображение и скрытие элементов
- Гибкая компоновка
- Макет сетки
основная концепция
Некоторые из этих базовых понятий могут быть трудными для понимания, но они очень важны. Если вы все еще не понимаете их после прочтения, вам нужно самостоятельно воспользоваться Google или Baidu. В Интернете есть много статей об этих понятиях.
поток
«Поток», также известный как поток документов, является основным механизмом позиционирования и макета CSS. Поток — это абстрактная концепция HTML, подразумевающая, что такое расположение является таким же естественным и автоматическим, как течение воды. «Гибкий макет» — это механизм макета HTML по умолчанию. Если вы пишете HTML без css, по умолчанию используется нисходящий (элементы блочного уровня, такие какdiv
) слева направо (строчные элементы, такие какspan
) компоновка с накоплением.
Блочные элементы и встроенные элементы
Это должен знать каждый.
Элемент блочного уровня относится к элементу, который сам по себе заполняет строку, напримерdiv、ul、li、table、p、h1
и другие элементы. Отображаемое значение этих элементов по умолчанию равноblock、table、list-item
Ждать.
Встроенные элементы, также известные как встроенные элементы, относятся к элементам, которые занимают только пространство, содержащееся в границе соответствующей метки.Эти элементы отображаются рядом, если родительский элемент достаточно широк, напримерspan、a、em、i、img、td
Ждать. Отображаемое значение этих элементов по умолчанию равноinline、inline-block、inline-table、table-cell
Ждать.
В реальной разработке мы частоdisplay
Рассчитано какinline
inline-block
inline-table
table-cell
элементы называются встроенными элементами, аdisplay
Рассчитано какblock
элементы называются элементами блочного уровня.
ширина: авто и высота: авто
width
,height
Значения по умолчаниюauto
.
Для элементов блочного уровня ниже гибкого макетаwidth: auto
Адаптивно заполняет ширину родительского элемента. Полнота здесь не такая, какwidth: 100%
фиксированная ширина, но как вода может бытьmargin
Различные и адаптивные к ширине родительского элемента.
Для встроенных элементовwidth: auto
Он показывает обтекание, то есть определяется шириной дочернего элемента.
Независимо от встроенных или блочных элементов,height: auto
Все они завернуты, то есть высота растягивается дочерними элементами.
Обратите внимание на родительский элементheight: auto
приведет к дочерним элементамheight: 100%
процент отказа.
Свойства css очень интересны.При нормальном потоке, если элемент блочного уровня имеетwidth
является фиксированным значением,margin
даauto
,ноmargin
Будет удерживать оставшееся место; еслиmargin
является фиксированным значением,width
даauto
,ноwidth
заполнит оставшееся пространство. Вот что такое плавные макеты.
Внешняя коробка и внутренняя коробка
Внешний блок — это блок, который определяет, как расположены элементы, то есть блок, который определяет, имеет ли блок свойства блочного или встроенного уровня. Внешняя коробка отвечает за структурную компоновку.
Внутренние блоки — это блоки, которые определяют, действуют ли некоторые свойства внутри элемента. Внутренний бокс отвечает за отображение контента.
Такие какdisplay: inline-table;
Внешняя коробкаinline
, внутренняя коробкаtable
. Внешний блок определяет, что элементы должны отображаться рядом, как встроенные элементы, а внутренний блок определяет, что элемент может устанавливать такие атрибуты, как ширина, высота и вертикальное поле. Как показано ниже
Таблица справа и текст слева расположены в одну строку (характеристики производительности внешнего блока встроены) и имеют пользовательскую ширину 111 пикселей (внутренняя таблица блока может задавать ширину и высоту).
css веса и не только!important
Был вопрос интервью, который поставил меня в тупик:
// 假设下面样式都作用于同一个节点元素`span`,判断下面哪个样式会生效
body#god div.dad span.son {width: 200px;}
body#god span#test {width: 250px;}
Жаль, что я даже не знал, что CSS имеет вес после трех лет работы над фронтендом 😓
Список весов селектора css выглядит следующим образом:
Веса | Селектор |
---|---|
1,0,0,0 | Встроенный стиль: style="" |
0,1,0,0 | Селектор идентификатора:#idName{...}
|
0,0,1,0 | Классы, псевдоклассы, селекторы атрибутов:.className{...} / :hover{...} / [type="text"] ={...}
|
0,0,0,1 | Теги, селекторы псевдоэлементов:div{...} / :after{...}
|
0,0,0,0 | Общий селектор (*), дочерний селектор (>), смежный селектор (+), родственный селектор (~) |
Раньше я считал само собой разумеющимся, что вес десятичный, то есть десять селекторов классов равны одному селектору id, что неверно. Базовый вес CSS был 256 в IE6, а позже расширен до 65536, в то время как современные браузеры используют большие числа. Таким образом, мы можем игнорировать проблему основания и сравнивать значения веса от большего к меньшему.
Если веса сравниваются в десятичном формате, то одиннадцать селекторов классов имеют больший вес, чем один селектор ID. Но это не так, как проверено:адрес.
Видно, что стили одиннадцати селекторов классов не переопределяют стили одного селектора id, потому что:
При сравнении двух весов веса на уровне сравниваются пошагово от большего к меньшему, а не 1000число + 100число + 10номер + 1Сумма сравниваемых чисел, другими словами, количество селекторов нижнего уровня не будет превышать приоритет селекторов высокого уровня.
Правильное правило:
- Сначала сравните с высоким уровнем, когда высокий уровень такой же, затем сравните с низким уровнем и так далее;
- Если они совершенно одинаковы, принимается последний принцип;
Поэтому сравнение вопросов интервью выше должно заканчиваться сравнением селектора id второго уровня: (#god + #test = 0,2,0,0) > (#god = 0,1,0,0) ; и два веса в приведенном выше примере: (#test = 0,1,0,0) > (.test....test10 = 0,0,11,0), что также находится на втором уровне. сравнение селектора id заканчивается. Поэтому, чтобы в дальнейшем сравнивать веса, сначала сравните количество селекторов id, а если id одинаковое количество, то сравните количество селекторов классов. Ничего себе, я чувствую, что это может быть вопросом интервью для китайского сообщества.
В CSS,!important
вес довольно большой. если есть!important
, то независимо от веса имеем!important
стоимость имущества. Однако есть исключения по ширине и высоте, потому что ширина и высота будутmax-width
/min-width
крышка, так!important
не удастся.
width: 100px!important;
min-width: 200px;
После того, как приведенный выше код будет рассчитан, он будет проанализирован движком в:
width: 200px;
Коробочная модель (размер коробки)
Внутреннее поле элемента определяетсяmargin box
,border box
,padding box
,content box
Четыре коробки образуют модель коробки снаружи внутрь.
IE модель:box-sizing: border-box
В этом режиме ширина элемента рассчитывается какborder+padding+content
сумма ширин.
стандартная модель w3c):box-sizing: content-box
В этом режиме ширина элемента рассчитывается какcontent
ширина.
из-заcontent-box
не учитывается при расчете шириныborder pading
Это раздражает, и это по умолчанию, и в отрасли обычно используется следующий стиль сброса кода:
:root {
box-sizing: border-box;
}
* {
box-sizing: inherit;
}
встроенная блочная модель
Встроенный элемент — это элемент, внешний блок которого является встроенным блоком. С точки зрения производительности типичной особенностью встроенных элементов является то, что они могут отображаться на одной строке с текстом. Текст также является встроенным элементом. Элементы-заменители, такие как изображения, кнопки, поля ввода и раскрывающиеся списки, также являются встроенными элементами. Модель встроенного блока относится к нескольким блокам, содержащимся во встроенных элементах.Чрезвычайно важно понимать и запоминать следующие концепции для углубленного изучения CSS.
- Область содержимого: По сути, поле персонажа. В браузерах фоновым цветом выделенного текста является область содержимого.
- Встроенный блок: встроенный блок означает, что внешний блок элемента является встроенным и будет выровнен с другими встроенными блоками.
- Линейный блок: Каждая строка, состоящая из встроенных элементов, является строковым блоком. Если в строке нет встроенных элементов, таких как пустой
div
label, он не образует линейный блок. Блок строки состоит из встроенных блоков. Если строка переносится, это два блока строки. Например, новая строка, содержащая много символовp
Теги, в каждой строке есть поле блока строк. Стоит отметить, что если элемент установлен вdisplay: inline-block
, создается отдельный линейный блок.line-height
Действует на линейный блок и в конечном итоге определяет высоту. - Содержащая коробка: это содержащий блок. Несколько строк текста образуют содержащий блок, а содержащий блок имеет несколько строковых полей.
- Призрачный пустой узел: перед каждым строковым полем встроенного элемента есть "пустой узел". Этот "пустой узел" не занимает никакой ширины и не может быть выбран для получения, но он существует и ведет себя как текстовый узел (этот article Многие примеры в этой статье будут использовать букву x для имитации призрачного пустого узла).
заменить элемент
Замещающий элемент — это элемент, содержимое которого может быть заменено.content box
可以被替换的元素。 если естьsrc=""
атрибут<img> <audio> <video> <iframe>
элементы и текстовые<input> <select> <textarea>
элементы и т.д.
Все замененные элементы являются встроенными элементами, по умолчаниюdisplay
собственностьinline
илиinline-block
(Кромеinput[type="hidden"]
По умолчаниюdisplay: none;
).
Элементы замены имеют собственные стили, размеры по умолчанию (в зависимости от браузера) и ихvertical-align
По умолчанию свойствоbottom
(Значение по умолчанию для незаменяемых элементов равноbaseline
).
css механизм наследования
видетьcss простое наследование.
шкатулка четыре бриллианта
content
Для незаменяемых элементов, таких какdiv
,Этоcontent
это элемент внутри div.
И для сменного элемента егоcontent
Это содержание сменной части.
в CSScontent
Атрибуты в основном используются для псевдоэлементов:before/:after
Помимо создания библиотеки шрифтов или написания меньшего количества div, это бесполезно для общей разработки.
padding
padding
Это самый стабильный из четырех великих бриллиантов, и редко имеет какие-либо отклонения. Тем не менее, есть несколько вещей, о которых следует знать:
- В большинстве случаев мы будем сбрасывать элемент на
box-sizing: border-box
, расчет ширины и высоты включаетpadding
да, дайpadding
Слишкомcontent box
часть чувства, как будтоline-height
свойства также действуют наpadding
начальство. Но на самом деле ширина и высота фактического содержимого элемента толькоcontent box
ширина и высота, аline-height
свойства не действуют наpadding
из.
-
padding
Не может быть отрицательным, но может быть в процентах. по горизонтали и по вертикали в процентахpadding
Оба рассчитываются относительно ширины родительского элемента. положитьdiv
установить какpadding: 100%
получить квадрат,padding: 10% 50%
У вас получится прямоугольник с соотношением сторон 5:1.
body {
width: 400px;
}
.box {
padding: 10% 50%;
}
-
padding
Сотрудничатьbackground-clip
свойства, вы можете сделать некоторые специальные формы:
/*三道杠*/
.icon1 {
box-sizing: border-box;
display: inline-block;
width: 12px;
height: 10px;
padding: 2px 0;
border-top: 2px solid currentColor;
border-bottom: 2px solid currentColor;
background: currentColor; /*注意如果此处背景颜色属性用缩写的话,需要放到其他背景属性的前面,否则会覆盖前面的属性值(此处为background-clip)为默认值*/
background-clip: content-box;
}
/*双层圆点*/
.icon2 {
display: inline-block;
width: 12px;
height: 12px;
padding: 2px;
border: 2px solid currentColor;
border-radius: 50%;
background-color: currentColor;
background-clip: content-box;
}
Предварительный просмотр выглядит следующим образом: (currentColor — одна из немногих переменных в css, которая относится к значению цвета текущего текста, очень проста в использовании)
margin
- как маржа,
margin
Свойство не участвует в расчете ширины бокса, но задаваяmargin
Отрицательное значение, но оно может изменить размер элемента по горизонтали:
<div>asdf</div>
<style>
div {
margin: 0 -100px;
}
</style>
В настоящее времяdiv
Ширина элемента больше ширины родительского элемента200px
из. Но это происходит только тогда, когда элемент находится в потоковом макете, т.е. элементwidth
по умолчаниюauto
И когда он может держать ряд. Если элемент имеет заданную ширину или элемент имеетfloat: left
/ position: absolute
Такие свойства изменяют компоновку жидкости, затемmargin
Отрицательное значение не изменяет ширину элемента.
- Вертикальная ориентация элементов блочного уровня возникает
margin
Слияние, есть следующие три сценария:
- между соседними одноуровневыми элементами
margin
сливаться; - родительский элемент
margin-top
И подэлементыmargin-top
, родительский элементmargin-bottom
и дочерние элементыmargin-bottom
; - Собственный пустой элемент уровня блока
margin-top
а такжеmargin-botom
Слияние, примеры следующие.
предотвращатьmargin
Слияние может быть: местами элементовbfc
2. Установкаborder
илиpadding
барьерmargin
3. Блок со встроенными элементами (например, текстом) 4. Установите высоту родительского элемента.
-
margin
Процентное значениеpadding
то же, вертикальноmargin
Как и в случае с горизонтальным направлением, оно рассчитывается относительно ширины родительского элемента.
<div class="box">
<div></div>
</div>
<style>
.box{
overflow: hidden;
background-color: lightblue;
}
.box > div{
margin: 50%;
}
</style>
На данный момент .box представляет собой прямоугольник с соотношением сторон 2:1, потому что вертикальное направление самого пустого элемента уровня блокаmargin
Произошло слияние.
Этот родительский элемент устанавливаетoverflow: hidden
это использоватьbfc
Атрибут предотвращает дочерний элементmargin
Объединить с родительским элементом и заменить другимbfc
Функции или настройки1px
изborder
/ padding
Все эффективны.
-
margin: auto
Он может автоматически заполнить оставшуюся ширину и высоту после установки ширины и высоты блочного элемента.margin: auto
Предварительным условием для срабатывания автозаполнения является наличие у элемента функции автозаполнения в соответствующем горизонтальном или вертикальном направлении.Очевидно, что высота блочных элементов не имеет этого условия по умолчанию. Типичным применением является реализация в горизонтальном бюро блочных элементов:
display: block;
width: 200px;
margin: 0 auto;
auto
Свойство состоит в том, что если обе стороныauto
, то оставшаяся ширина делится поровну на обе стороны, если одна сторонаmargin
Фиксируется, другая сторонаauto
Затем эта сторонаauto
это оставшаяся ширина. Каштан:
Эта функция малоизвестна, но очень полезна.
Помимо горизонтального направления, вертикальноеmargin
Вертикальное центрирование также может быть достигнуто, но элемент должен иметь функцию автоматического заполнения в вертикальном направлении, и эту функцию можно использовать.position
выполнить:
position: absolute;
left: 0; right: 0; top: 0; bottom: 0;
width: 200px;
height: 200px;
margin: auto;
border
border
Основная функция - сделать границу.border-style
Значение атрибутаnone/solid/dashed/dotted/double
Подождите, вы можете догадаться, что это такое, глядя на название:
border-width
Значение свойства по умолчанию равно3px
, чтобы заботиться о моем младшем братеborder-style: double
,Тебе известно. Примечательно,border-color
По умолчанию используется цвет шрифта, что эквивалентно настройке по умолчанию.border-color: currentColor
Такой же.
border
Другой популярной функцией является построение графики, особенно для широко используемых треугольников Принцип можно увидеть на рисунке 1-3 ниже:
div{
float: left;
margin: 20px;
}
div:nth-child(1){
width: 20px;
height: 20px;
border: 20px solid;
border-color: blue red orange green;
}
div:nth-child(2){
width: 20px;
height: 20px;
border: 20px solid;
border-color: blue transparent transparent transparent;
}
div:nth-child(3){
border: 20px solid;
border-color: blue transparent transparent transparent;
}
div:nth-child(4){
border-style: solid;
border-width: 40px 20px;
border-color: blue transparent transparent transparent;
}
div:nth-child(5){
border-style: solid;
border-width: 40px 20px;
border-color: blue red transparent transparent;
}
На самом деле цвет трех других границ установлен прозрачным, а ширина и высота установлены равными 0. Две цифры 4-5 на рисунке настраиваются путем регулировки ширины и цвета границы, чтобы настроить форму треугольника, а красный цвет на последнем рисунке заменен на синий, это прямоугольный треугольник.
хороший другline-height
а такжеvertical-align
line-height
а такжеvertical-align
Это два свойства, управляющие вертикальным выравниванием элементов, и их также труднее всего понять.
роль буквы х
Базовая линия — наиболее важная концепция вертикального выравнивания встроенных элементов.line-height
Определение - это расстояние между двумя базовыми линиями,vertical-align
Значение по умолчанию — базовый уровень. Базовая линия определяется как нижний край буквы x.
В css есть понятиеx-height
, который относится к высоте строчной буквы x.vertical-align: middle
Выравнивание по базовой линии вверх на 1/2x-height
Под высотой можно понимать пересечение приблизительной буквы x.
кроме как в csspx/em/rem
Подождите, еще один блокex
. Относится к высоте строчной буквы x, т.е.x-height
. Это не очень полезно и больше не будет.
line-height
-
line-height
различные значения атрибутов
normal
: по умолчаниюnormal
На самом деле, это переменная значения типа, которое варьируется в зависимости от браузера и семейства шрифтов, обычно около 1.2.
Числовые значения и проценты: в конечном итоге будут рассчитываться как значение с единицами измерения, которое рассчитывается путем умножения на размер шрифта.font-size
.
Значение длины: есть100px
Это значение с единицами.
Характеристики наследования этих типов значений разные:line-height
Дочерние элементы элемента, который является числовым значением, наследуют это числовое значение, а значение в процентах/длине наследует вычисленное значение с единицей измерения (px).
-
line-height
Роль:
line-height
Свойства используются для установки размера пространства для многострочных элементов, например интервала для многострочного текста.
Для элементов блочного уровняline-height
Решенныйполе строкиминимальная высота. Обратите внимание на минимальную высоту линейного блока, а не на фактическую высоту блочного элемента. (два на картинкеdiv
одинаковая высота,div.one
Область цвета фона – это высота поля строки, аdiv.two
Фоновая область – это фактическая высота, а также высота строки иdiv.one
это то же самое. )
Для незаменяемых встроенных элементов он используется для вычисления высоты линейного блока. На этом этапе высота линейного блока встроенного элемента полностью определяетсяline-height
решение, не зависящее от каких-либо других свойств.
-
line-height
Суть достижения вертикального центрирования: межстрочный интервал
Интерлиньяж — это расстояние между строкой текста и соседним текстом. межстрочный интервал =line-height
—font-size
. Межстрочный интервал имеет механизм равных делений вверх и вниз: это означает, что междустрочный интервал над и под текстом одинаковый, каждый с половиной, что такжеline-height
Причина вертикального центрирования встроенных элементов. На рисунке ниже верхнее и нижнее расстояния буквы х разделены пополам, что вместе поддерживаетdiv
.
Единственная разница между картинкой ниже и картинкой выше в том, что их больше.display: inline-block
изspan
элемент, но здесьspan
элементы не действуютdiv
высота элемента, но только наvertical-align: middle
Свойство выравнивает свою центральную точку с пересечением буквы x для достижения вертикального центрирования.div
Высота элемента точно такая же, как на изображении выше, поддерживается буквой x и межстрочным интервалом. В этот момент, если вы удалите букву x,div
высота не меняется, потому чтоspan
Призрачные пустые узлы будут генерироваться перед рамкой строки элемента, а также могут поддерживаться призрачные пустые узлы + высота строки.div
.
- Функция большого значения для встроенных элементов
<div class="box">
<span>asdf</span>
</div>
Стиль 1: Какова высота .box в этот момент?
.box {
line-height: 100px;
background: lightgreen;
}
.box span {
line-height: 30px;
}
Стиль 2: Какова высота .box в этот момент?
.box {
line-height: 30px;
background: lightgreen;
}
.box span {
line-height: 100px;
}
Давайте сначала поговорим о выводе: независимо от встроенного элементаline-height
Как установить высоту последнего родительского элемента с большим значениемline-height
решенный.
В стиле 1,span
Перед строковым полем элемента есть призрачный пустой узел, а высота строки этого призрачного пустого узла составляет 100 пикселей; в стиле 2 высота строки призрачного пустого узла составляет 30 пикселей, но высота строки элемента span равна 100 пикселей. Эти два случая на самом деле одинаковы, просто возьмите большее значение.
vertical-align
-
vertical-align
стоимость имущества
Класс линии: напримерbaseline(默认值)
top
middle
bottom
(baseline
выравнивает базовую линию элемента с базовой линией родительского элемента,middle
Сделайте середину элемента выше базовой линии родительского элементаx-height
наполовину выровнен.top
bottom
Выравнивает нижний край элемента и его потомков по нижнему краю всей строки или блока. )
Текстовый класс:text-top
text-bottom
(Выравнивает верхнюю часть элемента по верхней части родительского шрифта.)
Надстрочный индекс:sub
super
(Выравнивает базовую линию элемента с базовой линией нижнего индекса родительского элемента.)
Стоимость:20px
2em
(По умолчаниюbaseline
Эквивалентно числовому значению 0 . Выравнивает базовую линию элемента по заданной длине над базовой линией родительского элемента. Положительное значение смещает базовую линию вверх, а отрицательное значение — вниз. Это обеспечивает точное вертикальное выравнивание элементов. )
процент:20%
(Выравнивает базовую линию элемента по заданному проценту выше базовой линии родителя, который является процентом свойства line-height.)
-
vertical-align
предпосылка
Предпосылкой для работы свойства vertical-align должны быть встроенные элементы.которыйdisplay
Рассчитано какinline
inline-block
inline-table
table-cell
Элементы. Итак, если элемент установленfloat: left
илиposition: absolute
, то егоvertical-align
атрибут не может вступить в силу, потому что элементdisplay
Рассчитано какblock
.
- хороший друг
line-height
,vertical-align
Отношения любви-ненависти со сторонним призрачным пустым узлом
Иногда вы столкнетесь со следующими ситуациями, когда высота и настройки несовместимы:
div
Фактическая высота строки выше установленной высоты строки, почему?
Выравнивание по умолчанию для встроенных элементов:baseline
, так что на этот разspan
Базовая линия элемента выравнивается с базовой линией родительского элемента, но где находится базовая линия родительского элемента?
Базовая линия родительского элемента на самом деле является базовой линией призрачного пустого узла перед полем строки. Визуализируйте призрачные пустые узлы в виде буквx
Может быть проще понять:
из-заdiv
высота строки30px
, поэтому буквыx
а такжеspan
Высота элемента30px
. но буква хfont-size
меньше,span
элементальfont-size
больше, а высота строки такая жеfont-size
Чем больше базовая линия, тем ниже положение, поэтому две базовые линии не находятся на одной горизонтальной линии. Левая часть рисунка ниже:
Поскольку встроенные элементы по умолчанию выравниваются по базовой линии, буквыx
а такжеspan
Элементы смещаются, чтобы выровнять их базовые линии, в результате чегоdiv
Высота становится больше. а буквыx
коэффициент полурасстоянияspan
Межстрочный интервал элемента большой, а большая частьdiv
Высота детали увеличивается.
-
display: inline-block
Различия в базовых показателях
Сначала рассмотрим пример, на рисункеspan
элемент установленdisplay: inline-block
и ширина и высота, тем самым поддерживая родительский элементdiv
высота, ноspan
не сам по себеmargin
свойства, то почему дно иdiv
Будет ли зазор между нижними краями?адрес
это сказатьinline-block
разница. один установленdisplay: inline-block
Элементы:
- Если внутри элемента нет встроенного элемента, базовая линия элемента является нижним краем элемента;
- Если элемент установлен
overflow
дляhidden auto scroll
Затем его базовый уровень - нижний край элемента; - Если внутри элемента есть встроенный элемент, его базовая линия является базовой линией внутренних встроенных элементов последней строки.
Зная это, вернемся к примеру выше:
Оказалось, что это призрак стороннего пустого узла-призрака. В настоящее времяspan
Перед полем строки также есть призрачный пустой узел. из-заspan
Элементы по умолчанию выравниваются по базовой линии, поэтомуspan
Базовая линия элемента, то есть его нижний край, выравнивается с базовой линией фантомного пустого узла. В результате полустрочный интервал ниже базовой линии призрачного пустого узла увеличивается.div
элементы, вызывающие зазоры. Как показано ниже:
еслиspan
Как насчет встроенных элементов в элементах?
Видно, что в это времяspan
Зазор у нижнего края элемента исчез, т.к. в это времяspan
Базовая линия элемента — это базовая линия последней строки встроенных элементов внутри.
Стоит отметить, что поскольку внутри замещаемого элемента не может быть других элементов, его базовая позиция всегда находится на нижнем краю.
- Решать проблему
Генерация разрыва в основном вызвана несоосностью, вызванной выравниванием базовой линии, источникvertical-align
а такжеline-height
Вызваны вместе, поэтому для решения этой проблемы вам нужно только прямо или косвенно преобразовать одно из двух свойств:
- Блокирует элемент
display: block
Сделатьvertical-align
отказ от имущества; - попробуй разные
vertical-align
значение, такое какbottom/middle/top
; - Изменить напрямую
line-height
стоимость; - если
line-height
как относительное значение, например1.4
,настраиватьfont-size: 0
косвенное изменениеline-height
.
- всплывающее диалоговое окно
Ниже приведено использование, рекомендованное Чжан Синьсюй.vertical-align
Реализованная горизонтальная и вертикальная центровка всплывающего окна, если вы можете это понять, означает, что вы полностью освоили отношения между хорошими друзьями и третьими лицами.
<div class="container">
<div class="dialog">自适应弹出层</div>
</div>
<style>
.container{
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
background-color: rgba(0, 0, 0, .15);
text-align: center;
font-size: 0;
white-space: nowrap;
overflow: auto;
}
.container:after{
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
.dialog{
display: inline-block;
width: 400px;
height: 400px;
vertical-align: middle;
text-align: left;
font-size: 14px;
white-space: normal;
background: white;
}
</style>
разрушение потока
Теперь, когда UI-фреймворки процветают, наш CSS пишется все меньше и меньше. Это хорошо для многих ветеранов, но не обязательно для новичков, которые плохо знакомы с интерфейсом. Поскольку меньше письменности, меньше возможностей попрактиковаться и обобщить, а понимание многих стилей не является полным. представлено в этой главеfloat
,position
а такжеBFC
Это очень важно для макета страницы на передней части. Я надеюсь, что вы успокоитесь и внимательно изучите его.
float
свойства свойств
float
Атрибуты должны быть самым удивительным атрибутом в мире CSS не из-за его производительности, а потому, что его первоначальный дизайн был предназначен только для достижения эффекта «обтекания текстом изображений». просто такfloat
Некоторые характеристики атрибута привели к его повсеместному использованию, что привело к появлению многих страниц, не подходящих для обслуживания.
Посмотрите нижеfloat
Свойства недвижимости:
- Обертывание: то есть элемент в это время
width
будет, какheight
То же самое определяется дочерним элементом вместо заполнения родительского элемента по умолчанию. - Блокировать и форматировать контекст. Это функция BFC, о которой мы поговорим позже. Блочный относится к настройкам элемента
float: left
После этого егоdisplay
Расчетное значение становитсяblock
. Контекст форматирования означает, что будет создан BFC, который будет обсуждаться позже. - не любой
margin
сливаться; - Вне документооборота:
float
Первоначальный замысел дизайна заключается в эффекте "обтекания текстом". Чтобы текст обтекал изображение, необходимо выполнить два условия. Во-первых, высота элемента уменьшается, а во-вторых, линейный блок не может перекрывать плавающий элемент. Уменьшение высоты элемента приводит к тому, что неплавающие блочные элементы позади элемента перекрываются с ним, поэтому кажется, что он выпадает из потока документа.
Первые три фичи полны положительной энергии, а вот последняя фича доставляет массу хлопот нашим разработчикам и ее нужно использоватьclear
чтобы очистить поплавок.
clear
Роль и недостатки
каждый знаетclear: both
Вы можете очистить float от предыдущего плавающего элемента, но на самом деле это не очищает float.
clear
Определение таково: край блока элемента не может быть смежным с предыдущим плавающим элементом. То есть, хотя высота плавающего элемента схлопывается, она устанавливаетсяclear: both
, но обрабатывает его высоту так, как будто он все еще занимает позицию.
clear
Работает только с элементами блочного уровня и не решает проблему переноса текста, которая может возникнуть в последующих элементах.
BFC: контекст форматирования на уровне блоков
- концепция
BFC — это независимая область рендеринга, толькоBlock-level box
участие, предусматривающее внутреннееBlock-level Box
То, как он выложен и не имеет ничего общего с внешней стороной этой области.
BFC похож на чары, вещи внутри чар не могут влиять на макет снаружи, то есть,Подэлементы BFC не будут влиять на внешние элементы.так:
- Самого BFC не бывает
margin
перекрытие. - BFC может полностью решить проблемы коллапса высоты и переноса текста, вызванные плавающими подэлементами.
- Как создать БФЦ
- корневой элемент html
- Плавающий элемент, float не равно none
- Абсолютно позиционированные элементы, абсолютные и фиксированные
- Дисплей не является блочным блоком (inline-block, table-cell, table-caption)
- Элементы, значение переполнения которых не видно (скрытые, авто, прокрутка)
- Элементы с отображением flex, grid и flow-root (flow-root — это значение свойства, специально задающее BFC)
BFC содержит все дочерние элементы, которые создали этот элемент контекста, но не внутренние элементы, которые создали дочерний элемент нового BFC.
- характеристика
- Внутренние блоки будут располагаться один за другим в вертикальном направлении (можно рассматривать как обычный поток в BFC);
- Расстояние по вертикали от ящика определяется выражением
margin
Принимать решение. двух соседних ящиков, принадлежащих одному и тому же BFCmargin
float box
<html>
div p
<html>
margin
margin
display: inline-block
float: left
overflow: hidden
In a block formatting context, each box's left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch). This is true even in the presence of floats (although a box's line boxes may shrink due to the floats), unless the box establishes a new block formatting context (in which case the box itself may become narrower due to the floats).
margin box
border box
position: absolute
positoin
static
left edge
left-border
left edge
content box
position: relative
float: left
padding box
position: absolute
position: fixed
aside
margin box
float box
main
body
margin-top: -10000px
float: left
main
position: absolute
margin
position
static
left/top
position: absolute
position: absolute
display
position
position
left/top
overflow: hidden
overflow: hidden
<div style="overflow: hidden;">
<img src="big.jpg" style="position: absolute;">
</div>
<div style="position: relative;">
<div style="overflow: hidden;">
<img src="big.jpg" style="position: absolute;">
</div>
</div>
<div style="overflow: hidden; position: relative;">
<img src="big.jpg" style="position: absolute;">
</div>
<div style="overflow: hidden;">
<div style="position: relative;">
<img src="big.jpg" style="position: absolute;">
</div>
</div>
position: absolute
left/right
top/bottom
width/height
div
width
margin
auto
margin: auto
margin
position: fixed
position: fixed
position: relative
position: sticky
#one { position: sticky; top: 10px; }
position: sticky
overflow
visible
position: sticky
position: sticky
position
relative/aboslute/fixed
z-index
auto
-
border/background
z-index
.dad
position: relative
z-index: auto
z-index: -1
.son
-
opacity
1
-
transform
none
-
filter
none
-webkit-overflow-scrolling: touch
-
z-index
auto
-
isolation
isolate
-
mix-blend-mode
normal
-
will-change
opacity/transform/filter/isolation/mix-blend-mode
display: flex
z-index
z-index
z-index: 0
::first-letter
text-transform
input {
text-transform: uppercase;
}
word-spacing
word-spacing
20px
20px
<p>我有空 格,我该死......</p>
<style>
p {
word-spacing: 20px;
}
</style>
white-space
text-align: justify
text-align: justify
i
vertical-align
line-height
i
outline
i
i
vertical-align: top
vertical-align: middle
middle
e-height
vertical-align
line-height
div{
position: absolute;
visibility: hidden;
opacity: 0;
transition: opacity .5s linear;
background: cyan;
}
div.active{
visibility: visible;
opacity: 1;
}
visibility: hidden
display: none
display: none
transition
display: none
animation
opacity: 0
opacity: 0; position: absolute;
position: relative; z-index: -1;
position: absolute ; z-index: -1;
display: none
visibility: hidden
-
display: none
visibility: hidden
-
display: none
transition
visibility: hidden
-
display: none
visibility: hidden
-
display: none
visibility: hidden
visibility: visible
visibility: hidden
hidden
visibility: visible
display: flex
display: inline-flex
float、clear、vertical-align
.container
i
css权重和超越!important
弹性布局实现两端对齐尾行左对齐
text-align: justify
固定定位 position: fixed
粘性定位 position: sticky
默认最大宽度为包含块的宽度
BFC的创建方法