colspan: одна ячейка на несколько столбцов
colspan="n" делает ячейку шириной в n столбцов. Тогда в ее строке на n - 1 ячеек меньше. Здесь итог занимает первые два столбца:
В последней строке две ячейки, но первая считается за две, поэтому в сумме строка, как и остальные, дает три столбца.
rowspan: одна ячейка на несколько строк
rowspan="n" делает ячейку высотой в n строк. В строках ниже этот столбец пропускается, потому что его уже заполняет высокая ячейка:
В строках Bob и Cy только один <td>: столбец Team уже занят ячейкой «Design». В HTML это никак не отмечено, поэтому читайте таблицу с rowspan сверху вниз и держите в уме, какие столбцы еще заняты.
colspan и rowspan вместе: расписание
Одна ячейка может растягиваться в обе стороны. Классический пример это расписание, где некоторые занятия длятся два слота, а некоторые идут два дня:
Посчитайте строку 10:00: заголовок времени, затем Mon занят ячейкой HTML из строки выше, затем Lab заполняет Tue и Wed. В 11:00 Mon снова свободен, а Lab все еще занимает Tue и Wed, поэтому в строке одна ячейка с данными.
Подсчет ячеек, чтобы таблица оставалась ровной
Каждая строка должна давать в сумме одинаковое количество столбцов с учетом colspan каждой ячейки и столбцов, занятых ячейками с rowspan сверху. Когда в строке одна ячейка лишняя, браузер добавляет для нее новый столбец, и у таблицы появляется неровный край:
В неправильной таблице вторая строка забыла, что A занимает ее первый столбец, и D попадает в третий столбец, которого нет ни в одной другой строке. Исправление: удалить одну ячейку. Та же ошибка с colspan это оставить все исходные ячейки в строке с широкой ячейкой.
Нехватка ячейки это обратная проблема: строка заканчивается раньше и оставляет дыру в конце.
Сгруппированные заголовки через colspan
Заголовок может растягиваться над столбцами, которые он подписывает, поверх строки более конкретных заголовков. Отметьте его scope="colgroup", чтобы программы чтения с экрана применяли его ко всем столбцам под ним:
«City» занимает обе строки заголовков через rowspan="2", а каждый месяц занимает свои два столбца через colspan="2". Элементы <colgroup> задают группы столбцов, на которые ссылается scope="colgroup". Тогда программа чтения с экрана на ячейке Rome 31 может сказать «Rome, July, High, 31». Об остальной структуре таблицы читайте на странице таблица в HTML.
Объединяйте ячейки только ради настоящей структуры
Объединения усложняют чтение таблицы программой чтения с экрана, а также сортировку, фильтрацию и копирование в электронную таблицу. Используйте их там, где данные действительно сгруппированы (итог, заголовок над подстолбцами, занятие на два часа). Если таблице нужно много объединений, две простые таблицы часто понятнее.
Частые ошибки
- Занятые ячейки не удалены. Ячейка с
colspan="2"заменяет две ячейки; удалите одну из исходных. - Забытые строки под
rowspan. В каждой из них должно быть на одну ячейку меньше. colspanу<tr>. Он работает только у<td>и<th>.- Объединения ради раскладки, например строка-баннер в таблице, которая верстает страницу. Для раскладки используйте CSS grid.
colspan="100%"в значении «на всю ширину». Браузер читает только цифры в начале, поэтому эта ячейка занимает 100 столбцов и добавляет в таблицу пустые столбцы. Значение это целое число столбцов.
Часто задаваемые вопросы
Что делает colspan в HTML?
colspan растягивает <td> или <th> на несколько столбцов: <td colspan="3"> занимает место трех ячеек в своей строке. Тогда в этой строке нужно на две ячейки меньше, чем в остальных.
Что делает rowspan в HTML?
rowspan растягивает ячейку вниз на несколько строк: <td rowspan="2"> заполняет свою строку и строку под ней. В следующей строке этот столбец нужно пропустить, потому что его уже занимает ячейка сверху.
Можно ли использовать colspan и rowspan одновременно?
Да. <td colspan="2" rowspan="2"> занимает блок из двух столбцов на две строки. В каждой строке, через которую он проходит, нужно на две собственные ячейки меньше.
Почему в таблице торчит лишняя ячейка?
С учетом объединений в одной строке оказалось больше ячеек, чем в остальных. Обычно строка под rowspan все еще содержит ячейку для занятого столбца, или в строке с colspan остались все исходные ячейки. Удалите лишний <td>.
Какое максимальное значение у colspan?
Браузеры ограничивают colspan значением 1000, а rowspan значением 65534. Для colspan значение 0 или значение, которое не начинается с цифры, считается равным 1.