2015-09-03 4 views
4

Я использую HTML-таблицы для создания расписания. Каждая строка представляет собой полчаса, и ячейки могут охватывать несколько строк, используя rowspan.Может ли строка таблицы не иметь ячеек?

Иногда у меня есть пустые tr элементы, потому что все слоты берутся клетками из предыдущих строк.

В этом случае HTML validator жалуется:

Строка [N], из группы строк, установленной tbody элемента имеет не клетки не начинают на нем.

Конечно, я мог бы удалить эти пустые tr и уменьшить стоимость расширенных клеток rowspan. Но тогда значение rowspan больше не будет однозначно соответствовать длительности ячейки.

Таким образом, являются пустыми tr s действительно недействительными? Зачем?

ответ

3

Вы не можете иметь пустые строки в таблице в допустимом документе HTML в текущей спецификации HTML.

Возможно, у вас по праву должен быть в состоянии, но спецификация в настоящее время ясно говорит, что вы не можете. Поэтому, если кто-то считает, что это должно быть разрешено спецификацией, правильная вещь - file an issue against the HTML Standard in its github tracker или даже write a patch and open a PR for it.

В частности спецификация определяет следующий случай ошибки:

https://html.spec.whatwg.org/multipage/tables.html#the-table-element

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

В терминах интернет-спецификаций, которые являются «нормативными» авторитетными утверждениями, которые нельзя игнорировать или переопределять чем-либо еще. Он заявляет о жестком требовании .

Спецификация в другом месте говорит, что это:

tr элемент: Содержание модели

Ноль или более тд, е, и скрипт поддерживающие элементы

Но это фактически не противоречие, а не противоречит или не заменяет или отменяет таблицу ошибка модели ", упомянутое выше. На самом деле, это противоположность - Требование «ошибка модели таблицы» заменяет более либеральное требование в другом разделе (процитировано выше), что действительный элемент tr может иметь ноль или более детей.

Любые более строгие требования в спецификации всегда заменяют или отменят любые более либеральные требования.

+0

Я смущен [этим сообщением] (http://permalink.gmane.org/gmane.org.w3c.whatwg.help/676) Хикси. Но ОК, поскольку текущая спецификация написана, это неверно. Поэтому я удалил свой ответ и принял ваш. – Oriol

0

В table model section в HTML спецификации, вы можете найти следующее заявление:

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

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

Другая возможность - добавить столбец с <th> элементами слева, которые служат заголовком для строки. В конце концов, пользователь может захотеть узнать, что представляет собой одна строка таблицы - так же, как вы сказали нам здесь.

+0

Если я правильно понял ответ sidehowbarker, эти подразумеваемые строки, вызванные ячейками, охватывающими несколько строк, на самом деле являются ошибкой модели таблицы – Oriol

+0

Нет, потому что подразумеваемые строки не отображаются в разметке HTML - они автоматически добавляются (при этом ** подразумевается **), то есть '

' автоматически добавляет дополнительную строку, к которой может относиться ячейка. Концептуально, это будет такой же, как '<тд RowSpan =«2»>
', который, однако, неверно, как разметка ** явно ** определенные строки не может быть пустым. –