Урок 3.2 — Таблицы: table, tr, td, th
Учимся создавать таблицы в HTML: строки, ячейки, заголовки, объединение ячеек. Создаём расписание уроков и прайс-лист.
Что такое таблицы и зачем они нужны?
Таблицы в HTML отображают данные, у которых есть строки и столбцы: расписание уроков, прайс-лист, результаты матчей, список сотрудников. Раньше таблицами верстали макеты сайтов, но сегодня для этого есть CSS (Flexbox, Grid). Мы используем таблицы строго по назначению — для табличных данных.
Представьте таблицу в Excel: строки (горизонтально) и столбцы (вертикально). На пересечении — ячейка. В HTML строка — <tr> (table row), ячейка — <td> (table data).
1. table — создаём таблицу
Тег <table> — контейнер всей таблицы. Внутри него строки (<tr>), внутри строк — ячейки (<td>). Без <table> таблицы не существует.
Вот простейшая таблица 2x2:
<table>
<tr>
<td>Ячейка 1</td>
<td>Ячейка 2</td>
</tr>
<tr>
<td>Ячейка 3</td>
<td>Ячейка 4</td>
</tr>
</table>
2. tr — строка таблицы
Тег <tr> (table row) создаёт строку. Сколько <tr> — столько строк. Строки идут сверху вниз: первый <tr> — первая строка, второй — вторая и т.д.
<table border="1">
<tr>
<td>Строка 1</td>
<td>Колонка 2</td>
</tr>
<tr>
<td>Строка 2</td>
<td>Колонка 2</td>
</tr>
<tr>
<td>Строка 3</td>
<td>Колонка 2</td>
</tr>
</table>
tr = table row (строка). Один <tr> = одна строка. Атрибут border="1" добавляет видимые границы.3. td — ячейка таблицы
Тег <td> (table data) создаёт ячейку. Внутри можно разместить любой HTML: текст, ссылку, картинку, список или даже другую таблицу. Количество <td> в строке определяет количество столбцов.
<table border="1">
<tr>
<td>Простой текст</td>
<td><strong>Жирный текст</strong></td>
<td><a href="#">Ссылка</a></td>
</tr>
<tr>
<td>42 (число)</td>
<td><em>Курсив</em></td>
<td>💰 Эмодзи</td>
</tr>
</table>
4. th — ячейка-заголовок
Тег <th> (table header) — ячейка-заголовок. Текст внутри жирный и выровнен по центру. Браузер и поисковики понимают, что это заголовок.
<table border="1">
<tr>
<th>Имя</th>
<th>Возраст</th>
<th>Город</th>
</tr>
<tr>
<td>Анна</td>
<td>25</td>
<td>Москва</td>
</tr>
<tr>
<td>Иван</td>
<td>30</td>
<td>Санкт-Петербург</td>
</tr>
<tr>
<td>Ольга</td>
<td>27</td>
<td>Казань</td>
</tr>
</table>
<th> можно использовать и для заголовков строк. Например, первый столбец — время занятий:
<table border="1">
<tr>
<th></th>
<th>Понедельник</th>
<th>Вторник</th>
</tr>
<tr>
<th>8:00 - 9:30</th>
<td>Математика</td>
<td>Физика</td>
</tr>
<tr>
<th>9:45 - 11:15</th>
<td>Русский язык</td>
<td>История</td>
</tr>
</table>
<th> — заголовок (жирный, по центру). <td> — обычная ячейка. Используйте <th> для заголовков — это семантически правильно.5. colspan — объединяем столбцы
colspan позволяет одной ячейке занимать несколько столбцов. Например, заголовок на всю ширину таблицы. Значение — количество столбцов: colspan="2" на два столбца, colspan="3" на три.
<table border="1">
<tr>
<th colspan="2">Полное имя</th>
<th>Возраст</th>
</tr>
<tr>
<td>Иван</td>
<td>Петров</td>
<td>30</td>
</tr>
<tr>
<td>Анна</td>
<td>Смирнова</td>
<td>25</td>
</tr>
</table>
Ещё пример — центрированный заголовок на всю ширину:
<table border="1">
<tr>
<th colspan="3">Мои любимые книги</th>
</tr>
<tr>
<th>Название</th>
<th>Автор</th>
<th>Год</th>
</tr>
<tr>
<td>Мастер и Маргарита</td>
<td>М. Булгаков</td>
<td>1967</td>
</tr>
<tr>
<td>Преступление и наказание</td>
<td>Ф. Достоевский</td>
<td>1866</td>
</tr>
<tr>
<td>Война и мир</td>
<td>Л. Толстой</td>
<td>1869</td>
</tr>
</table>
colspan="2" считается за два столбца. Мысленно суммируйте colspan всех ячеек в строке — результат должен быть одинаковым для всех строк таблицы.6. rowspan — объединяем строки
rowspan объединяет ячейки по вертикали — одна ячейка занимает несколько строк. Полезно для группировки категорий.
<table border="1">
<tr>
<th rowspan="2">Фрукты</th>
<td>Яблоки</td>
<td>100 руб</td>
</tr>
<tr>
<td>Груши</td>
<td>120 руб</td>
</tr>
<tr>
<th rowspan="2">Овощи</th>
<td>Картофель</td>
<td>40 руб</td>
</tr>
<tr>
<td>Морковь</td>
<td>50 руб</td>
</tr>
</table>
Обратите внимание: в строках после rowspan на одну ячейку меньше — первая колонка уже занята. Во второй строке (где "Груши") всего две ячейки, потому что первая ячейка "Фрукты" из первой строки занимает и эту строку тоже.
rowspan в следующих строках становится меньше ячеек — часть столбцов уже занята. Всегда проверяйте общее количество логических столбцов в каждой строке.7. Стилизация таблицы через border и inline CSS
Атрибут border у <table> — простой способ добавить границы. Но для красивых таблиц используем атрибут style (inline CSS):
<table style="border-collapse: collapse; width: 100%;">
<tr style="background: #f97316; color: white;">
<th style="padding: 10px; border: 1px solid #ccc;">Предмет</th>
<th style="padding: 10px; border: 1px solid #ccc;">Оценка</th>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ccc;">Математика</td>
<td style="padding: 10px; border: 1px solid #ccc;">5</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ccc;">Физика</td>
<td style="padding: 10px; border: 1px solid #ccc;">4</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ccc;">История</td>
<td style="padding: 10px; border: 1px solid #ccc;">5</td>
</tr>
</table>
border-collapse: collapse— убирает двойные границыwidth: 100%— таблица на всю ширинуpadding: 10px— отступы внутри ячеекborder: 1px solid #ccc— рамка вокруг ячейки
Практика: расписание уроков
Создадим расписание на неделю, используя всё, что узнали:
<table style="border-collapse: collapse; width: 100%; font-family: Arial;">
<tr style="background: #ea580c; color: white;">
<th style="padding: 12px; border: 1px solid #ddd;">Время</th>
<th style="padding: 12px; border: 1px solid #ddd;">Пн</th>
<th style="padding: 12px; border: 1px solid #ddd;">Вт</th>
<th style="padding: 12px; border: 1px solid #ddd;">Ср</th>
<th style="padding: 12px; border: 1px solid #ddd;">Чт</th>
<th style="padding: 12px; border: 1px solid #ddd;">Пт</th>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold;">8:00 - 8:45</td>
<td style="padding: 10px; border: 1px solid #ddd;">Математика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Физика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Русский</td>
<td style="padding: 10px; border: 1px solid #ddd;">История</td>
<td style="padding: 10px; border: 1px solid #ddd;">Биология</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold;">9:00 - 9:45</td>
<td style="padding: 10px; border: 1px solid #ddd;">Физика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Химия</td>
<td style="padding: 10px; border: 1px solid #ddd;">Математика</td>
<td style="padding: 10px; border: 1px solid #ddd;">География</td>
<td style="padding: 10px; border: 1px solid #ddd;">Физ-ра</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold;">10:00 - 10:45</td>
<td style="padding: 10px; border: 1px solid #ddd;">История</td>
<td style="padding: 10px; border: 1px solid #ddd;">Литература</td>
<td style="padding: 10px; border: 1px solid #ddd;">Английский</td>
<td style="padding: 10px; border: 1px solid #ddd;">Математика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Информатика</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold;">11:00 - 11:45</td>
<td colspan="5" style="padding: 10px; border: 1px solid #ddd; text-align: center; font-style: italic;">Обед</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold;">12:00 - 12:45</td>
<td style="padding: 10px; border: 1px solid #ddd;">Литература</td>
<td style="padding: 10px; border: 1px solid #ddd;">Информатика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Биология</td>
<td style="padding: 10px; border: 1px solid #ddd;">Физика</td>
<td style="padding: 10px; border: 1px solid #ddd;">Химия</td>
</tr>
</table>
Для "Обеда" используем colspan="5" — он занимает все пять столбцов с предметами. Время сделали жирным через font-weight: bold.
background: #f9f9f9).Практика: прайс-лист с rowspan
Создадим прайс-лист с группировкой услуг по категориям:
<table style="border-collapse: collapse; width: 80%; font-family: Arial;">
<tr style="background: #dc2626; color: white;">
<th style="padding: 12px; border: 1px solid #ddd;">Услуга</th>
<th style="padding: 12px; border: 1px solid #ddd;">Описание</th>
<th style="padding: 12px; border: 1px solid #ddd;">Цена</th>
</tr>
<tr>
<td rowspan="3" style="padding: 10px; border: 1px solid #ddd; font-weight: bold; background: #fff7ed;">Вёрстка</td>
<td style="padding: 10px; border: 1px solid #ddd;">Сайт-визитка</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">5 000 ₽</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">Многостраничный</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">15 000 ₽</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">Интернет-магазин</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">40 000 ₽</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd; font-weight: bold; background: #fff7ed;">Дизайн</td>
<td style="padding: 10px; border: 1px solid #ddd;">Макет страницы</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">8 000 ₽</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">Логотип</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">3 000 ₽</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd; font-weight: bold; background: #fff7ed;">SEO</td>
<td style="padding: 10px; border: 1px solid #ddd;">Оптимизация</td>
<td style="padding: 10px; border: 1px solid #ddd; text-align: right;">7 000 ₽</td>
</tr>
</table>
Обратите внимание: цены выровнены вправо (text-align: right) — так принято для чисел. "Вёрстка" занимает 3 строки через rowspan="3", "Дизайн" — 2 строки.
Частые ошибки
Разное количество столбцов. Если в одной строке 4 ячейки, а в другой 3 (без colspan/rowspan) — таблица "сломается". В каждом ряду должно быть одинаковое число логических столбцов.
Забыли закрыть теги. Незакрытый <tr> или <td> — и таблица отображается непредсказуемо. Проверяйте парность.
Неправильный colspan. Если colspan="5", а в таблице 3 столбца — браузер добавит недостающие. Может выглядеть странно.
Таблицы для вёрстки. Не используйте таблицы для макетов. Для расположения элементов на странице есть CSS Flexbox и Grid.
Что мы узнали?
<table>— контейнер таблицы<tr>— строка<td>— обычная ячейка<th>— ячейка-заголовок (жирная, по центру)colspan— объединение столбцов (по горизонтали)rowspan— объединение строк (по вертикали)- Логическое число столбцов должно быть одинаковым во всех строках
Потренируйтесь: создайте таблицу с расписанием, таблицу успеваемости, прайс-лист. Чем больше практики — тем увереннее навык. В следующем уроке — формы!
Урок 3.2: Таблицы: table, tr, td, th
9 вопросов