Какова ширина по умолчанию ячейки таблицы HTML <td>?

Мне не удалось найти ответ на этот вопрос: где в спецификации или в документации UA есть ширина по умолчанию <td>, определенная?

Я искал Уровень жизни HTML, Рекомендация HTML5 и различные другие источники.

Мое понимание (основанное на использовании и наблюдении) заключается в том, что ячейка таблицы по умолчанию будет занимать всю ширину столбца, в котором он живет. И клетке не может быть задана другая ширина, чем столбец, если в столбце существуют другие ячейки.

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

Ответ 1

Физическая/визуальная ширина ячейки таблицы определяется не HTML, а CSS. В спецификации CSS 2.1 имеется целый раздел, посвященный табличный формат, который дополняет HTML-описание табличных данных.

Кроме того, сам CSS не полностью определяет, как вычисляется ширина ячейки. Он работает с алгоритмом фиксированной таблицы:

В алгоритме размещения фиксированной таблицы ширина каждого столбца определяется следующим образом:

  • Элемент столбца со значением, отличным от 'auto' для свойства width, задает ширину для этого столбца.
  • В противном случае ячейка в первой строке со значением, отличным от "auto" для свойства width, определяет ширину для этого столбца. Если ячейка охватывает более одного столбца, ширина разделяется по столбцам.
  • Любые оставшиеся столбцы поровну делят оставшееся горизонтальное табличное пространство (минус границы или интервал между ячейками).

Ширина таблицы тогда больше значения свойства width для элемента таблицы и суммы ширины столбцов (плюс расстояние между ячейками или границы). Если таблица шире столбцов, дополнительное пространство должно быть распределено по столбцам.

но он не дает ничего, кроме приблизительного ориентира для автоматического раскладки таблицы, какие пользовательские агенты могут свободно отслеживать или отклоняться (в нем перечислены пошаговые процедуры, не похожие на то, что у фиксированного табличного макета, но все список ненормативный). Как правило, вы можете ожидать последовательного поведения от UA в наиболее общих сценариях - как вы заметили, авто-размер как правило, занимает столько места, сколько требуется для его содержимого, и не более того. Но копайте в крайние случаи, и вы найдете всевозможные сумасшедшие.

Ответ 2

Здесь приведены стандарты W3C для расчета ширины столбцов таблицы. В основном это осталось до исполняющего браузера/агента.

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

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

Источник: http://www.w3.org/TR/html401/struct/tables.html#h-11.2.4.4

Примечание: это документы HTML4.

Ответ 3

Минимальная ширина ячейки таблицы равна 0 или размеру самого большого слова или изображения внутри этой ячейки.

Алгоритм калибровки таблиц

Алгоритм калибровки по умолчанию требует двух проходов через данные таблицы. На первом проходе перенос слов отключен, и пользовательский агент отслеживает минимальную и максимальную ширину каждой ячейки. Максимальная ширина определяется самой широкой линией. Поскольку перенос слов отключен, параграфы обрабатываются как длинные строки, если не разбиты на
элементы. Минимальная ширина задается самым широким словом или изображением и т.д. С учетом ведущих отступов и списков пультов и т.д. Другими словами, если вы должны форматировать содержимое ячейки в отдельном окне, определите минимальную ширину, которую вы могли бы сделать перед тем, как вещи начнут обрезаться.

Минимальная и максимальная ширина ячейки затем используются для определения соответствующих минимальных и максимальных значений ширины столбцов. Они, в свою очередь, используются для определения минимальной и максимальной ширины таблицы. Обратите внимание, что ячейки могут содержать вложенные таблицы, но это не усложняет код. Следующий шаг - назначить ширину столбца в соответствии с текущим размером окна (точнее - шириной между левым и правым полями).

Границы таблицы и поля между ячейками должны быть включены в шаг назначения. Существует три случая:

  • Минимальная ширина таблицы равна или больше, чем доступное пространство. В этом случае назначьте минимальную ширину и позвольте пользователю прокручивать по горизонтали. Для преобразования в шрифт Брайля необходимо заменить ячейки ссылками на заметки, содержащие их полный контент. По соглашению они появляются перед таблицей.
  • Максимальная ширина таблицы соответствует доступному пространству. В этом случае установите для столбцов максимальную ширину.
  • Максимальная ширина таблицы больше доступного пространства, но минимальная ширина таблицы меньше. В этом случае найдите разницу между доступным пространством и минимальной шириной таблицы, давайте назовем его W. Позволяет также называть D разницей между максимальной и минимальной шириной таблицы.

Для каждого столбца пусть d - разность между максимальной и минимальной шириной этого столбца. Теперь установите ширину столбца на минимальную ширину плюс d раз W над D. Это делает столбцы с большим количеством текста шире, чем столбцы с меньшими суммами.

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

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

Затем изменяется алгоритм назначения ширины столбца:

  • Явные ширины атрибута COLSPEC следует использовать при задании, если они больше минимальной ширины столбца, в противном случае последняя должна использоваться.
  • Для относительной ширины избыточное пространство W, как определено выше, делится между столбцами соответствующим образом, гарантируя, что каждому столбцу задана, по меньшей мере, его минимальная ширина. Если W равно нулю или отрицательно, ширина столбцов должна быть увеличена по минимальной ширине, чтобы соответствовать требованиям относительной ширины.

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