О спецификации HTML 4.0

Алгоритм автоматической компоновки


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

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

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

Для выравнивания символов содержимого ячейки этот алгоритм хранит три значения минимума/максимума для каждой ячейки: Left of align char, right of align char и unaligned. Минимальная ширина столбца: max(min_left + min_right, min_non-aligned).

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

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


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

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


  • Максимальная ширина таблицы входит в доступное пространство. В данном случае установите максимальную ширину столбцов.


  • Максимальная ширина таблицы превышает доступное пространство, но минимальная ширина таблица его не превышает. В данном случае найдите разницу между доступным пространством и минимальной шириной таблицы, назовет ее W. Назовем D разницу между максимальной и минимальной шириной таблицы.


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

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

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

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



    При использовании двухпроходного алгоритма компоновки положение выравнивания по умолчанию в отсутствие явного или унаследованного атрибута может определяться путем выбора позиции, которая была бы центром строки, для которой ширина до и после выравнивающего символа являлись бы максимальными значениями для любой из строк в столбце, для которого align="этот символ". Для последовательной компоновки таблиц по умолчанию используется charoff="50%". Если несколько ячеек в разных строках одного столбца используют выравнивание, такие ячейки должны выстраиваться по умолчанию, независимо от того, какой символ используется для выравнивания. Правила обработки объектов, слишком больших для столбца, применяются, если явное или наследуемое выравнивание приводит к ситуации, когда данные превышают назначенную ширину столбца.

    Выбор имен атрибутов. Предпочтительным является выбор значений атрибута , соответствующих атрибуту и значениям, используемым для выравнивания. Например: none, top, bottom, topbot, left, right, leftright, all. К сожалению, в SGML необходимо, чтобы нумерованные значения атрибутов были уникальными для каждого элемента, независимо от имени атрибута. Это сразу же вызывает проблемы со значениями "none", "left", "right" и "all". Значения атрибута выбраны так, чтобы избежать конфликтов имен с атрибутами , и valign-COLGROUP. Это обеспечивает будущую гарантию, поскольку ожидается, что атрибуты и будут добавлены в другие элементы таблицы в будущих версиях данной спецификации. Альтернативой является способ сделать атрибут CDATA. Решением Рабочей группы HTML W3C явилось то, что преимущества возможности использования средств проверки корректности SGML для првоерки атрибутов на базе нумерованных значений превосходит необходимость соответствия имен.


    Содержание раздела