Весь контент ниже взят из «CSS World» Чжан Синьсюй.
«Мир CSS» - это книга, посвященная написанию CSS. Книга не включает в себя знания CSS3, но многие вещи, которые он показывает, - это то, что я никогда не знал и не обратил внимания раньше. Это книга, которая может расширить свои горизонты, и я рекомендую эту книгу всем, работающим на переднем конце.
Ниже приведены некоторые из новых, но практических советов по компоновке, которые я задокументировал, читая эту книгу.
max-width
- Вес серии max очень велик, даже превышает !important. Окончательная ширина следующего кода p составляет 150 пикселей.
p {
width: 200px !important;
max-width: 150px;
}
- когда
min-width
а такжеmax-width
При конфликте размеров будет использоваться принцип максимума, то есть тот, кто больше, получает значение. Окончательная ширина следующего кода составляет 1400 пикселей.
.container {
min-width: 1400px;
max-width: 1200px;
}
- Когда мы добиваемся эффекта постепенного увеличения высоты элемента, но не знаем конкретную высоту элемента, мы можем использовать
max-height
Путь. Нам не нужно задавать конкретное значение высоты для достижения этого эффекта. Конечно, это приведет к тому, что высота элемента достигнет фактической высоты, но анимация еще не закончена. Будет ощущение задержки анимации.
.element {
max-height: 0;
overflow: hidden;
transition: max-height 0.25s;
}
.element.active {
max-height: 666px; /* 一个足够大的最大高度值 */
}
content attr
похожий наimg
альт.
.icon:before {
content: attr(data-title);
}
отступы и поля
Мы часто сталкиваемся с таким эффектом трехсторонней переноски, мы можем воспользоваться помощьюbackground-clip
а такжеpadding
добиться этого эффекта. Фотографии не требуются.
.icon-menu {
display: inline-block;
width: 140px;
height: 10px;
padding: 35px 0;
border-top: 10px solid;
border-bottom: 10px solid;
background-color: currentColor;
background-clip: content-box;
}
margin-right
затем удалить последнийmargin-right
. Чтобы добиться такого эффекта, вам нужно использовать новый селектор css3, а иногда и js, или напрямую использоватьflex
макет. Но мы привыкли к родителямmargin
Отрицательные значения могут быть легко достигнуты.
ul {
margin-right: -20px;
}
ul > li {
float: left;
width: 100px;
margin-right: 20px;
}
border
- Потому что под ie6 пунктирная линия настройки границы показывает точки. Таким образом, с помощью этого метода можно получить круг под ie6.
.box {
width: 150px;
height: 150px;
/* 超出区域隐藏,只显示一个圆 */
overflow: hidden;
}
.dotted {
width: 100%;
height: 100%;
border: 149px dotted #cd0000;
}
Примечание. Граница также является верхним правым нижним левым порядком настройки стандарта CSS.Если необходим треугольник в верхнем направлении, установите желаемый цвет для противоположного направления, а для другого направления установите прозрачный цвет.
div {
width: 0;
border: 10px solid;
border-color: #f30 transparent transparent;
}
ex
ex — игнорируемая единица измерения расстояния, представляющая высоту строчной буквы x (x из x, y, z). — относительная единица, связанная с размером шрифта родительского элемента.
Мы часто видим этот макет с вертикальным центрированием значков и слов. Пока он установлен, его можно легко реализовать, и на него не повлияют размер шрифта и высота страницы..icon-arrow {
display: inline-block;
width: 20px;
height: 1ex;
background: url(xxx.png) no-repeat center;
}
vertical-align
Вы можете использовать вертикальное выравнивание для достижения горизонтального и вертикального центрирования, этот метод позиционирования не требует знания ширины и высоты центрирующего элемента, совместимого с ie6
Моделирование ниже представляет собой полноэкранный диалог. Ядром этого метода центрирования является родительский элементtext-aglin:center
, при записи родственного элемента центрированного элемента даетdisplay: inline-block;height: 100%;vertical-align: middle;
Три свойства, устанавливаемые сами по себеdisplay: inline-block; vertical-align: middle;
<div id="container">
<div id="dialog">....</div>//要居中的元素
<div id="assist"></div>
</div>
#container {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, 0.5), none;
text-align: center;
white-space: nowrap;
font-size: 0;
z-index: 99;
}
#dialog {
display: inline-block;
vertical-align: middle;
}
#assist {
display: inline-block;
height: 100%;
vertical-align: middle;
}
BFC
знал раньшеoverflow:hidden
Метод запуска BFC, на самом деле, может запускать BFC следующим образом.
-
<html>
корневой элемент; - Значение float не равно none;
- Значение переполнения — auto, scroll или hidden;
- Значение display может быть любым из table-cell, table-caption и inline-block;
- Значение position не является относительным и статическим.
overflow
-
полоса прокрутки
html
Все сгенерированные страницы, которые хотят предотвратить появление полосы прокрутки, не нужно тянутьbody
собрать вместеoverflow:hidden
, -
Когда страница загружается очень медленно, страница будет смещена влево, потому что полоса прокрутки занимает ширину тела, а тело смещено. Следующий код
body
Занимает всю ширину окна. Это не приведет к смещению элементов по центру при медленной загрузке страницы. (Это в основном не относится к значительному увеличению пользовательского широкополосного доступа сейчас)
html {
overflow-y: scroll; /* for IE8 */
}
:root {
overflow-y: auto;
overflow-x: hidden;
}
:root body {
position: absolute;
}
body {
width: 100vw;
overflow: hidden;
}
absolute
Когда я использую абсолютное позиционирование, я всегда честно выбираю между сыном и отцом. Но абсолютное позиционирование без зависимостей будет работать лучше.
Компоновка без зависимостей, т. е. без использования традиционного способа определения отношения родитель-потомок. Не используйтеleft
а такжеtop
Управление, использование поля или преобразование для управления позицией.
.icon-warn {
position: absolute;
margin-left: -20px;
width: 20px;
height: 20px;
background: url(warn.png) no-repeat center;
}
- Absolute работает с text-align для достижения горизонтального центрирования.
<p > <img src="1.jpg" > </p >
p {
text-align: center;
}
img {
position: absolute;
margin-left: ...;
}
Хотя на положение изображения в этом примере действительно влияет свойство text-align, оно не имеет прямого отношения к элементам text-align и absolute. эффект. Изменение позиции здесь, по сути, является результатом комбинированного эффекта «призрачного пустого узла» и «абсолютного позиционирования без зависимости».
«Призрачный пустой узел» — очень важное понятие во встроенной блочной модели, в частности, оно относится к: в объявлении документа HTML5 , весь синтаксический анализ и рендеринг встроенных элементов ведут себя так, как если бы перед каждым линейным блоком был «пустой узел». Этот "Пустой узел" всегда прозрачен, не занимает никакой ширины, не виден и не может быть получен скриптом, как призрак, Но он существует и ведет себя как текстовый узел, поэтому я называю его «призрачным пустым узлом».
Конечно, нам нужно знать ширину встроенного элемента.margin-left
Значение с отрицательной общей шириной. с родительским элементомposition:relative
Затем найдите настройки элементаleft:50%
метод аналогичен. Но проблем с иерархией не будет.
2. абсолютное и переполнение Следующие суждения делаются о том, будут ли абсолютно позиционированные элементы затронуты переполнением.
переполнение не является позиционированным элементом, и между абсолютно позиционированным элементом и контейнером переполнения нет позиционированного элемента. Если , переполнение не может отсекать абсолютные элементы.
Согласно вышеизложенному. независимыйabsolute
не будет отцовскимoverflow
обрезанный.
Примечание: из-за преобразований в различных браузерахoverflow
Поддержка не та, поэтому, когда элемент все еще обрезается, попробуйте выяснить, не является ли онtransform
причина
3. Абсолютная и жидкостная адаптация
Когда абсолютно позиционированный элемент позиционируется относительно своей ориентации, этот элемент имеет плавное свойство, подобное потоку документа, например:
.box {
position: absolute;
left: 0; right: 0;
}
Когда абсолютно позиционированный элемент имеет следующие настройки, он может охватывать весь браузер. Обратите внимание, что его высота ширины является «отформатированной шириной/высотой», какwidth:100%
полностью отличается. датьmargin
Также не выходит за пределы экрана.
.box {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
В соответствии с вышеизложенным можно использоватьmargin:auto
Для достижения эффекта горизонтального центрирования, если нетleft: 0; right: 0;
Свойства, возбуждающие свойства жидкости, не имеют такого центрирующего эффекта. конечно хочу использоватьmargin:auto auto
Невозможно добиться вертикального и горизонтального центрирования. Ведь в стандартном документообороте такого эффекта нет.
код показывает, как показано ниже
.element {
width: 300px;
height: 200px;
position: absolute;
left: 0;
right: 0;
margin: auto;
}
fixed
fixed также можно использовать без компоновки зависимостей, как показано ниже, для достижения фиксированного позиционирования внутри элемента.
<div class="father" >
<div class="son" > </div >
</div >
.father {
width: 300px;
height: 200px;
position: relative;
}
.son {
width: 40px;
height: 40px;
position: fixed;
margin-left: -40px;
}
Нельзя использовать как абсолютное позиционирование без зависимостейleft
и другие свойства позиционирования.
Получить ширину полосы прокрутки
Следующий код может получить ширину полосы прокрутки и избежать смещения страницы после отключения полосы прокрутки.
//显示
var widthBar = 17,
root = document.documentElement;
if (typeof window.innerWidth == "number") {
widthBar = window.innerWidth - root.clientWidth;
}
root.style.overflow = "hidden";
root.style.borderRight = widthBar + "px solid transparent";
//隐藏
var root = document.documentElement;
root.style.overflow = "";
root.style.borderRight = "";
z-index
z-index
Полезно только для позиционированных элементов в css2, но добавлено в css3flex
служба поддержки
font-size
Этот эффект также может бытьvertical-align
а такжеfont-size
выполнить.
p {
font-size: 16px;
line-height: 1.5;
}
p > img {
vertical-align: -25%;
vertical-align: 0.6ex;;
}
дочерний элементvertical-align
Использование процентов может решить проблему центрирования значков и текста, и на него не влияет размер шрифта, но на него влияет высота строки. Если это ex, то это не только возможно, но и не зависит от высоты строки.
text-decoration
под китайскимtext-decoration
Возможно наложение на слова в следующей строке. В настоящее время мы используем границу в качестве подчеркивания. Не устанавливайте цвет границы, по умолчанию он будет того же цвета, что и шрифт.
Показать и скрыть
использоватьvisibility
И абсолютное позиционирование, чтобы скрыть и не занимать позицию. Или прозрачность плюс абсолютное позиционирование
.hidden {
position: absolute;
visibility: hidden;
}
.opacity {
position: absolute;
opacity: 0;
filter: Alpha(opacity=0);
}
Небольшие различия между видимостью и отображением
visibility
дочерние элементы будут скрыты, но если установленоvisibility:visible
появится, ноdisplay:none
элементы не имеют такого эффекта.
Это навыки, которым я научился, читая «Мир CSS». Пожалуйста, прочтите оригинальную книгу для получения дополнительной информации.
Цитировать:"мир CSS"