🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Иллюстрации верстают тегом img, где атрибут src — это путь до файла‑картинки.
Можно подключить картинку с другого сайта:
<img src="https://upload.wikimedia.org/wikipedia/commons/David_-_Napoleon_crossing_the_Alps_-_Malmaison1.jpg">
А можно сослаться на файл, лежащий рядом с вашей ХТМЛ‑странцей, например, в соседней папке images. В этом случае не пишут полный адрес сайта, только путь до картинки относительно ХТМЛ‑файла:
<img src="img/napoleon.jpg">
Если добавить в начало пути слэш, можно указать путь до картинки от корневой папки сайта. Но это работает только когда сайт размещён на сервере. О размещении на сервере мы поговорим дальше в книге.
<img src="/img/1812/napoleon.jpg">
По умолчанию ширина картинки на странице будет равна ширине файла картинки. Файлы в большом разрешении сломают вёрстку, поэтому лучше сразу сделать картинку «резиновой», задав ей display: block; и width в процентах от родителя.
Иллюстрации верстают тегом img, где атрибут src — это путь до файла‑картинки.
Можно подключить картинку с другого сайта:
<img src="https://upload.wikimedia.org/wikipedia/commons/David_-_Napoleon_crossing_the_Alps_-_Malmaison1.jpg">
А можно сослаться на файл, лежащий рядом с вашей ХТМЛ‑странцей, например, в соседней папке images. В этом случае не пишут полный адрес сайта, только путь до картинки относительно ХТМЛ‑файла:
<img src="img/napoleon.jpg">
Если добавить в начало пути слэш, можно указать путь до картинки от корневой папки сайта. Но это работает только когда сайт размещён на сервере. О размещении на сервере мы поговорим дальше в книге.
<img src="/img/1812/napoleon.jpg">
По умолчанию ширина картинки на странице будет равна ширине файла картинки. Файлы в большом разрешении сломают вёрстку, поэтому лучше сразу сделать картинку «резиновой», задав ей display: block; и width в процентах от родителя.
Иллюстрации с подписями удобно верстать с помощью обёртки figure и подписи figcaption:
<figure class="image">
<img src="images/vrubel.jpg">
<figcaption>
Михаил Врубель. Шестикрылый Серафим. 1904
</figcaption>
</figure>
.image {
width: 100%;
}
.image img {
display: block;
width: 100%;
margin-bottom: 9px;
}
Обёртка создаёт из иллюстрации и подписи единый модуль. Стили картинки и подписи настраиваются один раз, затем модуль можно встраивать в разные места сайта.
Поставить подпись сбоку можно флексбоксом — особыми свойствами для раскладывания элементов внутри контейнера. Мы разберём флексбокс дальше в книге, а пока можно запомнить свойства как заклинание:
.image {
display: flex; /* Ставим вложенные элементы в ряд */
gap: 9px; /* Задаём отступы между элементами в ряду отдельный отступ у img больше не нужен */
}
.image figcaption {
max-width: 30%; /* Подпись лучше ограничить по ширине */
}
Флексбоксы
Иллюстрации с подписями удобно верстать с помощью обёртки figure и подписи figcaption:
<figure class="image">
<img src="images/vrubel.jpg">
<figcaption>
Михаил Врубель. Шестикрылый Серафим. 1904
</figcaption>
</figure>
.image {
width: 100%;
}
.image img {
display: block;
width: 100%;
margin-bottom: 9px;
}
Обёртка создаёт из иллюстрации и подписи единый модуль. Стили картинки и подписи настраиваются один раз, затем модуль можно встраивать в разные места сайта.
Поставить подпись сбоку можно флексбоксом — особыми свойствами для раскладывания элементов внутри контейнера. Мы разберём флексбокс дальше в книге, а пока можно запомнить свойства как заклинание:
.image {
display: flex; /* Ставим вложенные элементы в ряд */
gap: 9px; /* Задаём отступы между элементами в ряду отдельный отступ у img больше не нужен */
}
.image figcaption {
max-width: 30%; /* Подпись лучше ограничить по ширине */
}
Флексбоксы
У тега img есть атрибут alt — это альтернативный текст, который описывает, что изображено на картинке.
Альт нужен на случай, когда картинка по ссылке недоступна, а ещё для помощи людям с проблемами зрения, которые используют программы для чтения с экрана.
<img
src="https://cats.com/persian/9001.jpg"
alt="Рыжая персидская кошка точит когти об когтеточку">На альт смотрят поисковые роботы, чтобы лучше понять содержимое страницы и чтобы отдельно продвигать картинку по ключевым словам из альта в поиске.
Альты отличаются в зависимости от сайта и его задач. Для любовно собираемых вручную статей в блог не грех добавить в альты деталей, а для выдачи интернет‑магазина с тысячами товаров разумнее генерировать альт под поисковое продвижение, включать в него бренд и характеристики товара.
В любом случае лучше избегать больших объёмов текста и откровенного переспама ключевых слов — это будет неудобно для людей, а поисковики понизят рейтинг сайта за переспам.
У тега img есть атрибут alt — это альтернативный текст, который описывает, что изображено на картинке.
Альт нужен на случай, когда картинка по ссылке недоступна, а ещё для помощи людям с проблемами зрения, которые используют программы для чтения с экрана.
<img
src="https://cats.com/persian/9001.jpg"
alt="Рыжая персидская кошка точит когти об когтеточку">На альт смотрят поисковые роботы, чтобы лучше понять содержимое страницы и чтобы отдельно продвигать картинку по ключевым словам из альта в поиске.
Альты отличаются в зависимости от сайта и его задач. Для любовно собираемых вручную статей в блог не грех добавить в альты деталей, а для выдачи интернет‑магазина с тысячами товаров разумнее генерировать альт под поисковое продвижение, включать в него бренд и характеристики товара.
В любом случае лучше избегать больших объёмов текста и откровенного переспама ключевых слов — это будет неудобно для людей, а поисковики понизят рейтинг сайта за переспам.
Таблица состоит из строк tr (table row) и ячеек td (table data cell) или th (table heading). Ячейки можно вкладывать только в строки и нельзя напрямую в тег таблицы.
<table>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
</table>
Для наглядности подсветим границы ячеек:
td, th {
background: #ebebeb;
}
Чтобы отдельно выделить шапку, тело или подвал‑итог таблицы, используют обёртки: thead, tbody и tfoot. С этими обёртками проще ориентироваться в коде и стилизовать отдельные части таблицы.
<table>
<thead>
<tr>
<th>…</th>
<th>…</th>
<th>…</th>
</tr>
</thead>
<tbody>
<tr>…</tr>
<tr>…</tr>
</tbody>
<tfoot>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
</tfoot>
</table>
Атрибут colspan скажет ячейке занимать несколько колонок:
<table>
<thead>
…
</thead>
<tbody>
…
</tbody>
<tfoot>
<tr>
<td colspan="2">…</td>
<td>…</td>
</tr>
</tfoot>
</table>
Атрибут rowspan скажет занимать несколько строк:
<table>
<thead>
…
</thead>
<tbody>
<tr>
<td rowspan="2">…</td>
<td>…</td>
<td>…</td>
</tr>
<!--
Если в предыдущей строке первая ячейка занимает две строки, то в следующей строке первую ячейку нужно убрать
-->
<tr>
<td>…</td>
<td>…</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">…</td>
<td>…</td>
</tr>
</tfoot>
</table>
При стилизации простых таблиц можно обходиться без лишних классов и стилизовать напрямую по тегам — внутри правильно свёрстанной таблицы всегда будет структура из tr и вложенных td/th.
table {
font-family: Helvetica, sans-serif;
border-collapse: collapse; /* Особое свойство убирает отступы между ячейками */
}
/* Подкрасим нечётные строки таблицы */
tr:nth-child(odd) {
background: #e5f5ff;
}
tfoot tr {
border-top: 1px solid #e5f5ff;
}
td,
th {
text-align: left;
padding: 8px 4px;
}
tfoot td,
td:last-child,
th:last-child {
text-align: right;
}
Раньше из‑за технических ограничений целые сайты верстали как большую таблицу из колонок и строк. Сейчас появились более удобные инструменты вёрстки и таблицы используют только по их прямому назначению — для представления табличных данных
Таблица состоит из строк tr (table row) и ячеек td (table data cell) или th (table heading). Ячейки можно вкладывать только в строки и нельзя напрямую в тег таблицы.
<table>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
</table>
Раньше из‑за технических ограничений целые сайты верстали как большую таблицу из колонок и строк. Сейчас появились более удобные инструменты вёрстки и таблицы используют только по их прямому назначению — для представления табличных данных
Для наглядности подсветим границы ячеек:
td, th {
background: #ebebeb;
}
Чтобы отдельно выделить шапку, тело или подвал‑итог таблицы, используют обёртки: thead, tbody и tfoot. С этими обёртками проще ориентироваться в коде и стилизовать отдельные части таблицы.
<table>
<thead>
<tr>
<th>…</th>
<th>…</th>
<th>…</th>
</tr>
</thead>
<tbody>
<tr>…</tr>
<tr>…</tr>
</tbody>
<tfoot>
<tr>
<td>…</td>
<td>…</td>
<td>…</td>
</tr>
</tfoot>
</table>
Атрибут colspan скажет ячейке занимать несколько колонок:
<table>
<thead>
…
</thead>
<tbody>
…
</tbody>
<tfoot>
<tr>
<td colspan="2">…</td>
<td>…</td>
</tr>
</tfoot>
</table>
Атрибут rowspan скажет занимать несколько строк:
<table>
<thead>
…
</thead>
<tbody>
<tr>
<td rowspan="2">…</td>
<td>…</td>
<td>…</td>
</tr>
<!--
Если в предыдущей строке первая ячейка занимает две строки, то в следующей строке первую ячейку нужно убрать
-->
<tr>
<td>…</td>
<td>…</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">…</td>
<td>…</td>
</tr>
</tfoot>
</table>
При стилизации простых таблиц можно обходиться без лишних классов и стилизовать напрямую по тегам — внутри правильно свёрстанной таблицы всегда будет структура из tr и вложенных td/th.
table {
font-family: Helvetica, sans-serif;
border-collapse: collapse; /* Особое свойство убирает отступы между ячейками */
}
/* Подкрасим нечётные строки таблицы */
tr:nth-child(odd) {
background: #e5f5ff;
}
tfoot tr {
border-top: 1px solid #e5f5ff;
}
td,
th {
text-align: left;
padding: 8px 4px;
}
tfoot td,
td:last-child,
th:last-child {
text-align: right;
}
<table>
<thead>
<tr>
<th>Год</th>
<th>Страна</th>
<th>Название</th>
<th>Режиссёр</th>
</tr>
</thead>
<tbody>
<tr>
<td>1968</td>
<td>СССР</td>
<td>Золотой телёнок</td>
<td>Михаил Швейцер</td>
</tr>
<tr>
<td>1969</td>
<td>Чехословакия</td>
<td>Командовать парадом буду я</td>
<td>Ярослав Мах</td>
</tr>
<tr>
<td>1974</td>
<td>Венгрия</td>
<td>Золотой телёнок</td>
<td>Миклош Синетар</td>
</tr>
<tr>
<td>1993</td>
<td>Россия, Франция</td>
<td>Мечты идиота</td>
<td>Василий Пичул</td>
</tr>
<tr>
<td>2006</td>
<td>Россия</td>
<td>Золотой телёнок</td>
<td>Ульяна Шилкина</td>
</tr>
</tbody>
</table>
table {
/*
* Убираем отступы между
* ячейками таблицы.
*/
border-collapse: collapse;
}
td {
/*
* Настраиваем шрифт для ячеек:
* Бюросанс, 14/17 пк.
*/
font-family: Bureausans, Helvetica Neue,
sans-serif;
font-size: 14px;
line-height: 17px;
/*
* Добавляем ячейкам отступы:
* 14 пк справа, 7 пк сверху.
*/
padding: 7px 14px 0 0;
/*
* Выравниваем содержимое ячеек
* влево вверх.
*/
text-align: left;
vertical-align: top;
}
thead th {
/*
* Настраиваем шрифт для шапки:
* жирный Бюросанс, 14/17 пк.
*/
font-family: Bureausans, Helvetica Neue,
sans-serif;
font-weight: bold;
font-size: 14px;
line-height: 17px;
/*
* Добавляем нижнюю рамку к шапке.
* Толщиной в 0,5 пикселя, сплошная,
* черного цвета с прозрачностью 25%.
*/
border-bottom: .5px solid rgba(0, 0, 0, .25);
/*
* Добавляем ячейкам шапки отступ
* 14 пк справа.
*/
padding: 0 14px 0 0;
/*
* Выравниваем содержимое шапки
* влево вниз.
*/
text-align: left;
vertical-align: bottom;
}
| Год | Страна | Название | Режиссёр |
|---|---|---|---|
| 1968 | СССР | Золотой телёнок | Михаил Швейцер |
| 1969 | Чехословакия | Командовать парадом буду я | Ярослав Мах |
| 1974 | Венгрия | Золотой телёнок | Миклош Синетар |
| 1993 | Россия, Франция | Мечты идиота | Василий Пичул |
| 2006 | Россия | Золотой телёнок | Ульяна Шилкина |
Сверстаем компактную таблицу с экранизациями погони Остапа Бендера за гражданином Корейко.
Внимательно изучите код, в нём встречается несколько новых свойств и полезных приёмов.
Попробуйте скопировать код и поэкспериментировать со стилями таблицы
| Год | Страна | Название | Режиссёр |
|---|---|---|---|
| 1968 | СССР | Золотой телёнок | Михаил Швейцер |
| 1969 | Чехословакия | Командовать парадом буду я | Ярослав Мах |
| 1974 | Венгрия | Золотой телёнок | Миклош Синетар |
| 1993 | Россия, Франция | Мечты идиота | Василий Пичул |
| 2006 | Россия | Золотой телёнок | Ульяна Шилкина |
Сверстаем компактную таблицу с экранизациями погони Остапа Бендера за гражданином Корейко.
Внимательно изучите код, в нём встречается несколько новых свойств и полезных приёмов.
<table>
<thead>
<tr>
<th>Год</th>
<th>Страна</th>
<th>Название</th>
<th>Режиссёр</th>
</tr>
</thead>
<tbody>
<tr>
<td>1968</td>
<td>СССР</td>
<td>Золотой телёнок</td>
<td>Михаил Швейцер</td>
</tr>
<tr>
<td>1969</td>
<td>Чехословакия</td>
<td>Командовать парадом буду я</td>
<td>Ярослав Мах</td>
</tr>
<tr>
<td>1974</td>
<td>Венгрия</td>
<td>Золотой телёнок</td>
<td>Миклош Синетар</td>
</tr>
<tr>
<td>1993</td>
<td>Россия, Франция</td>
<td>Мечты идиота</td>
<td>Василий Пичул</td>
</tr>
<tr>
<td>2006</td>
<td>Россия</td>
<td>Золотой телёнок</td>
<td>Ульяна Шилкина</td>
</tr>
</tbody>
</table>
table {
/*
* Убираем отступы между
* ячейками таблицы.
*/
border-collapse: collapse;
}
td {
/*
* Настраиваем шрифт для ячеек:
* Бюросанс, 14/17 пк.
*/
font-family: Bureausans, Helvetica Neue,
sans-serif;
font-size: 14px;
line-height: 17px;
/*
* Добавляем ячейкам отступы:
* 14 пк справа, 7 пк сверху.
*/
padding: 7px 14px 0 0;
/*
* Выравниваем содержимое ячеек
* влево вверх.
*/
text-align: left;
vertical-align: top;
}
thead th {
/*
* Настраиваем шрифт для шапки:
* жирный Бюросанс, 14/17 пк.
*/
font-family: Bureausans, Helvetica Neue,
sans-serif;
font-weight: bold;
font-size: 14px;
line-height: 17px;
/*
* Добавляем нижнюю рамку к шапке.
* Толщиной в 0,5 пикселя, сплошная,
* черного цвета с прозрачностью 25%.
*/
border-bottom: .5px solid rgba(0, 0, 0, .25);
/*
* Добавляем ячейкам шапки отступ
* 14 пк справа.
*/
padding: 0 14px 0 0;
/*
* Выравниваем содержимое шапки
* влево вниз.
*/
text-align: left;
vertical-align: bottom;
}
Попробуйте скопировать код и поэкспериментировать со стилями таблицы