🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру

Удобно листать не только прокруткой, но и клавишами‑стрелками:

 
между важными местами
Shift
между
разворотами
Васи­лий Полов­нёв, Игорь Пет­ров

ХТМЛ.
Вёрстка сайтов

Изда­тель­ство Бюро Гор­бу­нова
2021
Василий Половнёв, Игорь Петров

ХТМЛ.
Вёрстка сайтов

Издательство Бюро Горбунова
2021
удк 004.42
ббк З973.42
П52
Васи­лий Полов­нёв, Игорь Пет­ров
П52
ХТМЛ. Вёрстка сай­тов для дизай­не­ров, редак­то­ров и руко­во­ди­те­лей.—
М.: Изд‑во Бюро Гор­бу­нова, 2021

Эта книга — поша­го­вая инструк­ция по вёрстке сай­тов на язы­ках ХТМЛ и ЦСС. Вы узна­ете не только как свер­стать сайт, но и как опуб­ли­ко­вать его в интер­нете, настро­ить кра­си­вый шаринг в соц­сети и под­клю­чить системы аналитики.

Отдель­ный раз­дел книги посвя­щён работе с вер­сталь­щи­ком: как ста­вить задачи, полу­чать пред­ска­зу­е­мый резуль­тат и пра­вильно при­ни­мать и внед­рять вёрстку.

Оглавление

удк 004.42
ббк З973.42
П52
П52
Василий Половнёв, Игорь Петров
ХТМЛ. Вёрстка сайтов для дизайнеров, редакторов и руководителей.—
М.: Изд‑во Бюро Горбунова, 2021

Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.

Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.

Оглавление

Скрыто 82 разворота

Лайфхак: псевдокласс :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(*), который найдёт любой элемент, являющийся не любым, то есть не найдёт ничего

Лайфхак: псевдокласс :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(*), который найдёт любой элемент, являющийся не любым, то есть не найдёт ничего

Псевдо­элементы ::after и ::before

Одна из кру­тей­ших воз­мож­но­стей ЦСС — добав­ле­ние содер­жи­мого в начало и в конец почти любого эле­мента с помо­щью слов ::before и ::after.

<blockquote>
  Волк слабее льва и тигра, но в цирке он не выступает
</blockquote>
blockquote::before {
  content: '«';
}

blockquote::after {
  content: '»';
}

Слова ::before и ::after добав­ляют в вёрстку псев­до­эле­менты — «вир­ту­аль­ные» кусочки раз­метки, кото­рых нет в исход­ной ХТМЛ‑раз­метке. Из‑за этого содер­жи­мое псев­до­эле­мен­тов не учи­ты­ва­ется поис­ко­ви­ками, плохо рас­по­зна­ётся устрой­ствами чте­ния с экрана, не выде­ля­ется и не копи­ру­ется. Поэтому не реко­мен­дуем вер­стать псев­до­эле­мен­тами важ­ное содер­жа­ние сайта.

С дру­гой сто­роны, если вам нужно спря­тать текст от поис­ко­ви­ков или поме­шать выде­ле­нию и копи­ро­ва­нию, то один из спо­со­бов — поме­стить текст в псевдоэлементы.

Псев­до­эле­менты нельзя доба­вить к эле­мен­там с неза­кры­ва­ю­щи­мися тегами, вроде img. Но можно обер­нуть img в div и доба­вить псев­до­эле­менты уже к нему.

Волк сла­бее льва и тигра, но в цирке он не выступает

На обозначения псевдоэлементов в веб‑инспекторе можно нажать, чтобы увидеть и отредактировать их стили

Волк слабее льва и тигра, но в цирке он не выступает

На обозначения псевдоэлементов в веб‑инспекторе можно нажать, чтобы увидеть и отредактировать их стили

Псевдо­элементы ::after и ::before

Одна из крутейших возможностей ЦСС — добавление содержимого в начало и в конец почти любого элемента с помощью слов ::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%); /* Ставим элемент по центру родителя */
}

Трюк: увеличение области клика с помощью псевдоэлемента

Поскольку псев­до­эле­менты рас­по­ло­жены внутри эле­мента и тех­ни­че­ски явля­ются его содер­жи­мым, за их счёт можно уве­ли­чи­вать область клика элемента.

Псев­до­эле­мент с абсо­лют­ным пози­ци­о­ни­ро­ва­нием и отри­ца­тель­ными вытяж­ками уве­ли­чит область клика эле­мента на раз­мер отри­ца­тель­ной вытяжки. Абсо­лют­ное пози­ци­о­ни­ро­ва­ние мы подроб­нее раз­бе­рём дальше в книге.

В при­мере область клика ссы­лок под­кра­шена для наглядности.

.extClickArea {
  position: relative;
}

.extClickArea::after {
  content: '';
  position: absolute;
  
  /* Вытягиваем псевдоэлемент на −0,3em за границы родителя — самого элемента */
  inset: -0.3em;
}

Будьте осторожны, когда используете этот трюк для элементов, расположенных у границ экрана. Выступающий псевдоэлемент может добавить странице лишние поля и скролл

Трюк: увеличение области клика с помощью псевдоэлемента

Поскольку псевдоэлементы расположены внутри элемента и технически являются его содержимым, за их счёт можно увеличивать область клика элемента.

Псевдоэлемент с абсолютным позиционированием и отрицательными вытяжками увеличит область клика элемента на размер отрицательной вытяжки. Абсолютное позиционирование мы подробнее разберём дальше в книге.

В примере область клика ссылок подкрашена для наглядности.

.extClickArea {
  position: relative;
}

.extClickArea::after {
  content: '';
  position: absolute;
  
  /* Вытягиваем псевдоэлемент на −0,3em за границы родителя — самого элемента */
  inset: -0.3em;
}

Будьте осторожны, когда используете этот трюк для элементов, расположенных у границ экрана. Выступающий псевдоэлемент может добавить странице лишние поля и скролл

Тест по разделу «Модули»

Для чего мы советуем перечислять несколько шрифтов в font-family?

Про запас — на компьютере пользователя может не быть указанного первым шрифта и браузер будет по очереди пробовать следующие
Для разнообразия — браузер применит случайный шрифт для каждого пользователя
Чтобы разработчики знали, какой следующий шрифт поставить, когда наскучит текущий
Это тонкая браузерная оптимизация, выходящая за рамки данной книги

Если на компьютере не установлен шрифт, если он не загрузился или в нём нет нужной буквы, браузер попробует следующий шрифт из списка

Как работают ключевые слова serif или sans-serif в font-family?

Если браузер не сможет использовать указанные до ключевых слов шрифты, то использует системный шрифт соответствующего типа: с засечками или без
Это модификаторы шрифта: если указан serif, браузер включит только строчные; если указан sans-serif, выключит их
Это заклинание для сглаживания шрифтов в Гугль Хроме до десятой версии
Если их не указать, браузер будет работать в режиме совместимости со старыми версиями Интернет Эксплорера и Нетскейп Навигатора

Ключевое слово в конце списка описывает тип шрифта: serif — с засечками, sans‑serif — без засечек. Если браузер доберётся до него, то возьмёт системный шрифт соответствующего семейства

По какому признаку шрифты в этой книге называют веб‑безопасными?

Шрифты, установленные в большинстве операционных систем
Шрифты без уязвимостей и вирусов
Рекомендованные дизайнерами варианты шрифтовых пар, которые хорошо сочетаются
Шрифты, которые хорошо распознают люди с проблемами зрения

Веб‑безопасными называют шрифты, входящие в стандартный набор операционной системы

Выберите верные утверждения о назначении ЦСС‑свойств.

font-size — кегль
font-size — ширина текстовой колонки
line-height — высота символов
line-height — интерлиньяж
font-weight — кегль
font-weight — максимально допустимый размер файла шрифта
font-weight — «жирность» шрифта
font-style — подчёркивание, зачёркивание, надчёркивание
font-style — начертание шрифта, курсив и наклон
text-decoration — особенности шрифта, лигатуры и сглаживание
text-decoration — подчёркивание, зачёркивание, надчёркивание

font‑size и line‑height управляют кеглем и интерлиньяжем, font‑style управляет начертанием, font‑weight задаёт «жирность» шрифта, а text‑decoration добавляет подчёркивание, зачёркивание или надчёркивание

Какому элементу мы советуем задавать основной шрифт страницы и почему?

Всем элементам страницы для надёжности, принцип «ковровая бомбардировка»
Только текстовым элементам, чтобы не стилизовать лишнего, принцип наследования в ЦСС
Тегу body, чтобы стили не пришлось повторять для всего подряд, принцип наследования в ЦСС
Обёрткам article и main, чтобы стили наследовались для всех статей и текстов, принцип «семантическое ядро»

Наследование стилей позволяет писать меньше кода, избегать повторов стилей, последовательно стилизовать страницу от общего к частному

Чем управляет свойство font-variant?

Капителью
Кеглем
Лигатурами
Интерлиньяжем

Свойство font‑variant включает лигатуры и капитель

Для чего мы рекомендуем использовать атрибут alt?

Задавать альтернативный текст абзаца, комментарий для разработчиков
Задавать альтернативный текст абзаца для программ чтения с экрана
Описывать содержимое изображения для программ чтения с экрана и на случай, когда изображение не загрузится
Описывать содержимое изображения для поисковых роботов

Атрибут alt нужен на случай, когда картинка по ссылке недоступна, для помощи людям, которые используют программы чтения с экрана, и для поисковых роботов

Ответьте на все вопросы теста,
чтобы узнать результат.
Результат
↺ Пересдать

Тест по разделу «Модули»

Для чего мы советуем перечислять несколько шрифтов в font-family?

Про запас — на компьютере пользователя может не быть указанного первым шрифта и браузер будет по очереди пробовать следующие
Для разнообразия — браузер применит случайный шрифт для каждого пользователя
Чтобы разработчики знали, какой следующий шрифт поставить, когда наскучит текущий
Это тонкая браузерная оптимизация, выходящая за рамки данной книги

Если на компьютере не установлен шрифт, если он не загрузился или в нём нет нужной буквы, браузер попробует следующий шрифт из списка

Как работают ключевые слова serif или sans-serif в font-family?

Если браузер не сможет использовать указанные до ключевых слов шрифты, то использует системный шрифт соответствующего типа: с засечками или без
Это модификаторы шрифта: если указан serif, браузер включит только строчные; если указан sans-serif, выключит их
Это заклинание для сглаживания шрифтов в Гугль Хроме до десятой версии
Если их не указать, браузер будет работать в режиме совместимости со старыми версиями Интернет Эксплорера и Нетскейп Навигатора

Ключевое слово в конце списка описывает тип шрифта: serif — с засечками, sans‑serif — без засечек. Если браузер доберётся до него, то возьмёт системный шрифт соответствующего семейства

По какому признаку шрифты в этой книге называют веб‑безопасными?

Шрифты, установленные в большинстве операционных систем
Шрифты без уязвимостей и вирусов
Рекомендованные дизайнерами варианты шрифтовых пар, которые хорошо сочетаются
Шрифты, которые хорошо распознают люди с проблемами зрения

Веб‑безопасными называют шрифты, входящие в стандартный набор операционной системы

Выберите верные утверждения о назначении ЦСС‑свойств.

font-size — кегль
font-size — ширина текстовой колонки
line-height — высота символов
line-height — интерлиньяж
font-weight — кегль
font-weight — максимально допустимый размер файла шрифта
font-weight — «жирность» шрифта
font-style — подчёркивание, зачёркивание, надчёркивание
font-style — начертание шрифта, курсив и наклон
text-decoration — особенности шрифта, лигатуры и сглаживание
text-decoration — подчёркивание, зачёркивание, надчёркивание

font‑size и line‑height управляют кеглем и интерлиньяжем, font‑style управляет начертанием, font‑weight задаёт «жирность» шрифта, а text‑decoration добавляет подчёркивание, зачёркивание или надчёркивание

Какому элементу мы советуем задавать основной шрифт страницы и почему?

Всем элементам страницы для надёжности, принцип «ковровая бомбардировка»
Только текстовым элементам, чтобы не стилизовать лишнего, принцип наследования в ЦСС
Тегу body, чтобы стили не пришлось повторять для всего подряд, принцип наследования в ЦСС
Обёрткам article и main, чтобы стили наследовались для всех статей и текстов, принцип «семантическое ядро»

Наследование стилей позволяет писать меньше кода, избегать повторов стилей, последовательно стилизовать страницу от общего к частному

Чем управляет свойство font-variant?

Капителью
Кеглем
Лигатурами
Интерлиньяжем

Свойство font‑variant включает лигатуры и капитель

Для чего мы рекомендуем использовать атрибут alt?

Задавать альтернативный текст абзаца, комментарий для разработчиков
Задавать альтернативный текст абзаца для программ чтения с экрана
Описывать содержимое изображения для программ чтения с экрана и на случай, когда изображение не загрузится
Описывать содержимое изображения для поисковых роботов

Атрибут alt нужен на случай, когда картинка по ссылке недоступна, для помощи людям, которые используют программы чтения с экрана, и для поисковых роботов

Ответьте на все вопросы теста, чтобы узнать результат.
Результат
↺ Пересдать
Скрыто 133 разворота