Атрибут Span для colgroup и col

Являются ли эти коды логически эквивалентными?

<colgroup span="7">
</colgroup>

И

<col span="7" />

И

<colgroup>
<col />
<col />
<col />
<col />
<col />
<col />
<col />
</colgroup>

Будут ли какие-либо атрибуты через HTML или свойства через CSS иметь одинаковый эффект? Может ли кто-нибудь также добавить тег «colgroup». У меня недостаточно репутации, чтобы сделать это.


person Jawad    schedule 11.06.2011    source источник


Ответы (2)


Из спецификации для <col>:

Контексты, в которых этот элемент может использоваться:
Как дочерний элемент colgroup, у которого нет атрибута span.
[...]
Содержание атрибуты: глобальные атрибуты
span

Я прочитал это как говорящее, что только <col span="7" /> сам по себе недействителен, но это:

<colgroup>
    <col span="7" />
</colgroup>

является действительным и таким же, как:

<colgroup span="7">
</colgroup>

Однако, если <colgroup> имеет атрибут span , то у него не должно быть <col> дочерних элементов:

Если элемент colgroup не содержит элементов col, то элемент может иметь указанный атрибут содержимого span...

Моя интерпретация (на основе спецификации HTML4 подробнее чем более тонкий HTML5) заключается в том, что вы обычно используете <colgroup span="n">, если только вам не нужно стилизовать один из столбцов в группе иначе, как в этом (модифицированном) примере из спецификации HTML4:

<colgroup style="width: 20px; font-weight: bold;">
    <col span="39">
    <col id="format-me-specially" style="width: 35px;">
</colgroup>

поэтому первые 39 столбцов будут использовать все, что указано в <colgroup>, но 40-й можно настроить. OTOH, у меня проблемы с тем, чтобы браузеры обращали внимание на все это (несмотря на то, что говорится в спецификациях) на jsfiddle.net, поэтому YMMV.

person mu is too short    schedule 13.06.2011
comment
Браузеры добавляют colgroup автоматически, даже если мы добавим один столбец, поэтому кажется, что столбец не может существовать сам по себе в таблице и должен быть дочерним элементом colgroup независимо от того, добавите вы его или нет. Похоже, это просто два способа сделать одно и то же. В основном селектор HTML для столбцов таблицы. Спасибо за ответ и ваше время. - person Jawad; 13.06.2011
comment
@Jawad: я бы не стал полагаться на то, что браузеры что-нибудь добавят (или, в общем, будут последовательно разумны :) Вероятно, вам безопаснее убедиться, что ваше вложение правильно, прежде чем браузер доберется до него. - person mu is too short; 13.06.2011
comment
@ mu слишком короткий: Да, вы правы. Добавление colgroup было бы безопаснее. На заметку и совершенно не по теме, неужели это му в твоем имени такое же му, что и в дзен! то есть, в отличие от принципа бивалентности и закона исключенного третьего в логике (кто-то спросил мастера дзен. Есть ли у собаки дзен? мастер ответил: му). - person Jawad; 13.06.2011
comment
@Jawad: я не задаю ваш вопрос :) На самом деле он исходит из теории меры хотя. - person mu is too short; 13.06.2011
comment
@muistooshort: мне нравится ваш ответ, но он не затрагивает семантику (если таковая имеется) использования colgroups и cols. Является ли их единственная цель ярлыком для реализации стилей? как div и span? Какие могут быть причины для их использования без стилей? - person chharvey; 08.01.2012
comment
@TestSubject528491: они позволяют создавать логические группы столбцов. Обычно эти логические группировки визуально представляются с помощью стилей, но если вы не видите, то этот стиль вам не поможет. Вы можете получить визуальный эффект <colgroup> без использования <colgroup>, но вы потеряете логическую структуру. Беглый взгляд на пример таблицы HTML4 может оказаться полезным. Кроме того, имейте в виду, что программное обеспечение обычно попадает в категорию не видит. - person mu is too short; 08.01.2012
comment
Хорошо, еще один дополнительный вопрос: если атрибут span в элементе colgroup представляет количество столбцов, логически сгруппированных вместе (как прекрасно показано в приведенном вами примере HTML4), то что представляет собой атрибут span в элементе col? - person chharvey; 11.01.2012
comment
@TestSubject528491: Я не уверен, что это пришло мне в голову. Это был бы хороший вопрос, и здесь есть люди с большим опытом работы с табличной моделью HTML5, чем у меня :) - person mu is too short; 11.01.2012

Вот моя интерпретация спецификаций. Обновление: просмотрев спецификации HTML4, я изменил свое мнение об атрибуте span элемента colgroup.

(Это также ответ на мой собственный комментарий 2-го вопроса в ответе @mu.)

colgroup представляет собой группу из одного или нескольких столбцов. , а его span задает количество столбцов в группа столбцов. Поэтому я думаю об этом как о сокращении, избавляющем автора от последовательного написания нескольких элементов col.

<colgroup class="x" span="3"></colgroup>

Группа столбцов охватывает три столбца и оформлена в соответствии с правилом CSS .x {...}. Это эквивалентно

<colgroup class="x">
    <col/>
    <col/>
    <col/>
</colgroup>

С другой стороны, col представляет один или несколько столбцов в столбце группа, а ее span указывает количество столбцов, «натянутых» элементом COL… что является циклическим определением, если вы спросите меня.

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

<colgroup class="x"><col class="y" span="3"/></colgroup>

вы говорите, что есть три столбца, каждый из которых находится в одной логической группе, оформленной одинаково в соответствии с .y {...}. Это быстрый способ написать

<colgroup class="x">
    <col class="y"/>
    <col class="y"/>
    <col class="y"/>
</colgroup>

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

Переосмыслив это, я решил, что они оба одинаковы. Наличие colgroup диапазона n столбцов равнозначно одному colgroup с дочерним элементом col, который охватывает n столбцов. На мой взгляд, нет никакой логической или семантической разницы.

Примечание: элемент col должен быть содержится в элементе colgroup, не имеющем атрибута span. Он не может быть прямым потомком элемента table.

person chharvey    schedule 18.01.2012
comment
Спасибо за ваш ответ. Помимо семантической точки зрения, я не встречал ни одного реального примера, кроме того, что он используется в качестве неофициального селектора столбцов html. Но, блядь, это зависит еще и от самих данных. Например, у вас может быть столбец адреса, разделенный на улицу, район, почтовый индекс и т. д. Подстолбцы, где данные имеют естественную связь друг с другом, и здесь вы можете использовать colgroup для их группировки. Но поскольку это веб-дизайн, а не СУБД, он совершенно бесполезен! - person Jawad; 20.01.2012
comment
Я понимаю ваше недовольство. На данный момент (январь 2012 г., Google Chrome v 16) я ничего не могу сделать с помощью CSS для элементов colgroup и col, кроме изменения цвета фона. Я пытался настроить width, color, font-size и многие другие свойства, но безрезультатно. Работает только background-color. В разных браузерах еще не пробовал. Любой, кто следит за этим, пожалуйста, ответьте с дополнительными новостями, если они у вас есть. - person chharvey; 22.01.2012
comment
Если указан класс, применяются правила — reference.sitepoint.com/html/colgroup - person Jawad; 24.01.2012
comment
Вы уверены, что col не может быть прямым потомком table? Вот учебник, в котором это именно тот случай, и атрибут span используется для colgroup элементов. w3.org/WAI/tutorials/tables/irregular - person Vun-Hugh Vaw; 19.02.2019
comment
@Vun-HughVaw: технически элемент col не может быть прямым дочерним элементом элемента table. Модель содержания table: col элементы не допускается. Контексты, в которых может использоваться col: только как ребенок colgroup. Но вот в чем загвоздка: в некоторых случаях начальный тег и конечный тег colgroup может быть опущен. Таким образом, в разметке ваш table может выглядеть так, как будто он имеет прямой дочерний элемент col, но это только потому, что в нем подразумевается colgroup. - person chharvey; 19.02.2019