🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Псевдоклассом :nth-child стилизуют энные элементы внутри контейнера:
.item:nth-child(2),
.item:nth-child(3),
.item:nth-child(5) {
font-family: Bureauserif, serif;
}
.item:nth-child(3) {
color: #e6536d;
}
.item:nth-child(4) {
font-weight: bold;
}
Ключевые слова odd и even в :nth-child стилизуют нечётные и чётные элементы:
.item:nth-child(odd) {
font-family: Bureauserif, serif;
}
.item:nth-child(even) {
font-weight: bold;
}Не путать odd и even поможет мнемоника: в нечётном odd нечётное количество букв, а в чётном even — чётное
«Еда» № 2(34) / 2012
«Еда» № 2(34) / 2012
Псевдоклассом :nth-child стилизуют энные элементы внутри контейнера:
.item:nth-child(2),
.item:nth-child(3),
.item:nth-child(5) {
font-family: Bureauserif, serif;
}
.item:nth-child(3) {
color: #e6536d;
}
.item:nth-child(4) {
font-weight: bold;
}
Ключевые слова odd и even в :nth-child стилизуют нечётные и чётные элементы:
.item:nth-child(odd) {
font-family: Bureauserif, serif;
}
.item:nth-child(even) {
font-weight: bold;
}Не путать odd и even поможет мнемоника: в нечётном odd нечётное количество букв, а в чётном even — чётное
В любой момент на странице может быть только один элемент управления, получающий ввод с клавиатуры: поле ввода, выпадающий список, ползунок, кнопка. Обычно этот элемент выделяется визуально. Это состояние называется фокусом. Например, когда поля получают фокус, в них появляется мигающий курсор.
Клавиша Tab по очереди переставляет фокус между элементами управления в окне. Это позволяет быстрее заполнять формы с клавиатуры, помогает работать с сайтом людям с ограниченными возможностями.
Вид элемента в фокусе зависит от типа элемента и от его стилей. Стили фокуса задаются псевдоклассом :focus:
/* Убираем стандартные браузерные стили фокуса */
input:focus,
button:focus {
outline: none;
}
/* Добавляем свои стили фокуса */
input {
/* … */
background: transparent;
border-bottom: 2px solid lightblue;
}
input:focus {
border-color: #000;
}
button:focus,
button:hover {
filter: brightness(120%);
}
/* Приятный бонус — подкрасим плейсхолдеры */
form ::placeholder {
color: lightblue;
}
Можно переключать фокус в обратном порядке комбинацией
Отключать видимый фокус полностью — плохая практика. Так работа с сайтом с клавиатуры станет почти невозможной.
В любой момент на странице может быть только один элемент управления, получающий ввод с клавиатуры: поле ввода, выпадающий список, ползунок, кнопка. Обычно этот элемент выделяется визуально. Это состояние называется фокусом. Например, когда поля получают фокус, в них появляется мигающий курсор.
Клавиша Tab по очереди переставляет фокус между элементами управления в окне. Это позволяет быстрее заполнять формы с клавиатуры, помогает работать с сайтом людям с ограниченными возможностями.
Вид элемента в фокусе зависит от типа элемента и от его стилей. Стили фокуса задаются псевдоклассом :focus:
/* Убираем стандартные браузерные стили фокуса */
input:focus,
button:focus {
outline: none;
}
/* Добавляем свои стили фокуса */
input {
/* … */
background: transparent;
border-bottom: 2px solid lightblue;
}
input:focus {
border-color: #000;
}
button:focus,
button:hover {
filter: brightness(120%);
}
/* Приятный бонус — подкрасим плейсхолдеры */
form ::placeholder {
color: lightblue;
}
Можно переключать фокус в обратном порядке комбинацией
Отключать видимый фокус полностью — плохая практика. Так работа с сайтом с клавиатуры станет почти невозможной.
Обычно в ЦСС применяют стили к элементу, который соответствует какому‑то условию: является определённым тегом, имеет класс, находится первым, последним и так далее.
Псевдокласс :not применяет стили к элементу, который не соответствует условию: не является определённым тегом, не имеет класса, не стоит первым. Иногда этот псевдокласс делает код заметно проще и нагляднее.
Например, обычно ненужные отступы последних элементов убирают в два шага: сначала задают отступы всем элементом, а затем обнуляют для последнего. Используя :not можно написать короче и нагляднее — сказать браузеру: «добавь отступ всем непоследним элементам».
/* Было */
ul li { margin-bottom: 9px; }
ul li:last-child { margin-bottom: 0; }
/* Стало */
ul li:not(:last-child) { margin-bottom: 9px; }
/* Ещё примеры: всё в .content, кроме лида */
.content :not(.lead) { … }
/* Все в article, кроме p */
article *:not(p) { … }
Вложить один :not в другой не получится, зато можно сделать забавный в своей бессмысленности селектор :not(*), который найдёт любой элемент, являющийся не любым, то есть не найдёт ничего
Обычно в ЦСС применяют стили к элементу, который соответствует какому‑то условию: является определённым тегом, имеет класс, находится первым, последним и так далее.
Псевдокласс :not применяет стили к элементу, который не соответствует условию: не является определённым тегом, не имеет класса, не стоит первым. Иногда этот псевдокласс делает код заметно проще и нагляднее.
Например, обычно ненужные отступы последних элементов убирают в два шага: сначала задают отступы всем элементом, а затем обнуляют для последнего. Используя :not можно написать короче и нагляднее — сказать браузеру: «добавь отступ всем непоследним элементам».
/* Было */
ul li { margin-bottom: 9px; }
ul li:last-child { margin-bottom: 0; }
/* Стало */
ul li:not(:last-child) { margin-bottom: 9px; }
/* Ещё примеры: всё в .content, кроме лида */
.content :not(.lead) { … }
/* Все в article, кроме p */
article *:not(p) { … }
Вложить один :not в другой не получится, зато можно сделать забавный в своей бессмысленности селектор :not(*), который найдёт любой элемент, являющийся не любым, то есть не найдёт ничего
Одна из крутейших возможностей ЦСС — добавление содержимого в начало и в конец почти любого элемента с помощью слов ::before и ::after.
<blockquote>
Волк слабее льва и тигра, но в цирке он не выступает
</blockquote>
blockquote::before {
content: '«';
}
blockquote::after {
content: '»';
}
Слова ::before и ::after добавляют в вёрстку псевдоэлементы — «виртуальные» кусочки разметки, которых нет в исходной ХТМЛ‑разметке. Из‑за этого содержимое псевдоэлементов не учитывается поисковиками, плохо распознаётся устройствами чтения с экрана, не выделяется и не копируется. Поэтому не рекомендуем верстать псевдоэлементами важное содержание сайта.
С другой стороны, если вам нужно спрятать текст от поисковиков или помешать выделению и копированию, то один из способов — поместить текст в псевдоэлементы.
Псевдоэлементы нельзя добавить к элементам с незакрывающимися тегами, вроде img. Но можно обернуть img в div и добавить псевдоэлементы уже к нему.
Волк слабее льва и тигра, но в цирке он не выступает
На обозначения псевдоэлементов в веб‑инспекторе можно нажать, чтобы увидеть и отредактировать их стили
Волк слабее льва и тигра, но в цирке он не выступает
На обозначения псевдоэлементов в веб‑инспекторе можно нажать, чтобы увидеть и отредактировать их стили
Одна из крутейших возможностей ЦСС — добавление содержимого в начало и в конец почти любого элемента с помощью слов ::before и ::after.
<blockquote>
Волк слабее льва и тигра, но в цирке он не выступает
</blockquote>
blockquote::before {
content: '«';
}
blockquote::after {
content: '»';
}
Слова ::before и ::after добавляют в вёрстку псевдоэлементы — «виртуальные» кусочки разметки, которых нет в исходной ХТМЛ‑разметке. Из‑за этого содержимое псевдоэлементов не учитывается поисковиками, плохо распознаётся устройствами чтения с экрана, не выделяется и не копируется. Поэтому не рекомендуем верстать псевдоэлементами важное содержание сайта.
С другой стороны, если вам нужно спрятать текст от поисковиков или помешать выделению и копированию, то один из способов — поместить текст в псевдоэлементы.
Псевдоэлементы нельзя добавить к элементам с незакрывающимися тегами, вроде img. Но можно обернуть img в div и добавить псевдоэлементы уже к нему.
Никола Пуссен. Рождение Венеры. 1636
Псевдоэлементы можно стилизовать так же, как обычные элементы, а значит, возможности применения псевдоэлементов ограничены только возможностями ЦСС и вашей фантазией.
Сделаем класс для затемнения и заблюривания содержимого контейнера. Свойство position мы подробнее разберём дальше в книге.
<div class="adult">
<img src="the-birth-of-venus.jpg">
</div>
.adult {
position: relative; /* relative даст поместить другой элемент поверх этого */
}
.adult::after {
content: ''; /* Обязательно указывать content для ::before и ::after, даже если нужен псевдоэлемент без содержимого. Если не указать content, псевдоэлемент не появится */
display: block; /* По умолчанию ::before и ::after инлайновые, нам нужен блочный элемент для установки размеров */
position: absolute;
inset: 0;
width: 100%; /* Растягиваем элемент по ширине и высоте */
height: 100%;
z-index: 2; /* Размещаем псевдоэлемент поверх .adult */
background: rgba(0, 0, 0, 0.15);
backdrop-filter: blur(5px);
}
Позиционирование
Поскольку у элемента может быть два псевдоэлемента, используем второй, чтобы добавить надпись поверх блюра:
.adult {
…
}
.adult::after {
…
}
.adult:before {
content: '16+';
font-size: 24px;
color: #fff;
text-shadow: 1px 1px 20px rgb(0 0 0 0.5);
position: absolute;
left: 50%;
top: 50%;
z-index: 3; /* Размещаем поверх ::after */
transform: translate(-50%, -50%); /* Ставим элемент по центру родителя */
}Никола Пуссен. Рождение Венеры. 1636
Псевдоэлементы можно стилизовать так же, как обычные элементы, а значит, возможности применения псевдоэлементов ограничены только возможностями ЦСС и вашей фантазией.
Сделаем класс для затемнения и заблюривания содержимого контейнера. Свойство position мы подробнее разберём дальше в книге.
<div class="adult">
<img src="the-birth-of-venus.jpg">
</div>
.adult {
position: relative; /* relative даст поместить другой элемент поверх этого */
}
.adult::after {
content: ''; /* Обязательно указывать content для ::before и ::after, даже если нужен псевдоэлемент без содержимого. Если не указать content, псевдоэлемент не появится */
display: block; /* По умолчанию ::before и ::after инлайновые, нам нужен блочный элемент для установки размеров */
position: absolute;
inset: 0;
width: 100%; /* Растягиваем элемент по ширине и высоте */
height: 100%;
z-index: 2; /* Размещаем псевдоэлемент поверх .adult */
background: rgba(0, 0, 0, 0.15);
backdrop-filter: blur(5px);
}
Позиционирование
Поскольку у элемента может быть два псевдоэлемента, используем второй, чтобы добавить надпись поверх блюра:
.adult {
…
}
.adult::after {
…
}
.adult:before {
content: '16+';
font-size: 24px;
color: #fff;
text-shadow: 1px 1px 20px rgb(0 0 0 0.5);
position: absolute;
left: 50%;
top: 50%;
z-index: 3; /* Размещаем поверх ::after */
transform: translate(-50%, -50%); /* Ставим элемент по центру родителя */
}