На старости лет я решил поизучать один из обычных, последних, строгих DTD консорциума W3C для HTML документов.
И вдруг меня поразила идея, посмотреть, как описаны элементы div и table, чтобы попробовать ответить на вопрос, мучавший меня давно: как доказать клиенту, что принципиально разницы между версткой divами и tableами нет?
Результат не заставил себя ждать и оказался прямо на поверхности: счастью не было предела.
Вообще, иногда тупое быдло клиенты бывают очень наслышаны от еще более тупого быдла веб-интеллектуалов о том, что верстать сайты нужно исключительно divами, так как таблицы (table) должны содержать только и только информацию о каких-либо данных, ну как в обычных таблицах в повседневной жизни.
Проблема в том, что divами верстать не очень удобно, так как приходится бороться за одинаковое отображение во всех браузерах, которые просто обожают интерпретировать отображение divов с используемыми для них стилями, в особенности правилом flow, по-своему.
Иногда это можно пережить, но чаще всего быстрее и эффективнее сделать сайт, сверстанный таблицей — результат будет отличным и не будет требовать много времени для доработки макета.
Но как же доказать наслышанному тупому быдлу клиенту, который решил, что нужно использовать для верстки макета исключительно divы, что разницы принципиальной в верстке между divами и таблицами нет, кроме заметного повышения производительности труда?
Само собой, такое тупое быдло клиентское сознание очень любит строгости и всякую подобную чушь, раз быстро приняло нерушимым правилом тип верстки. А значит и играть нужно на этом.
Очень можно потешить самолюбие тупого быдла клиента тем, что мы используем строгий DTD xhtml1-strict.
А теперь доказательство!
Открываем этот DTD и ищем описание элементов div и table. Что же мы видим?
< !ELEMENT div %Flow; >
< !ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+)) >
< !ELEMENT caption %Inline; >
< !ELEMENT thead (tr)+ >
< !ELEMENT tfoot (tr)+ >
< !ELEMENT tbody (tr)+ >
< !ELEMENT colgroup (col)* >
< !ELEMENT col EMPTY >
< !ELEMENT tr (th|td)+ >
< !ELEMENT th %Flow; >
< !ELEMENT td %Flow; >
В divе все понятно, а в таблице нас интересуют последние две строчки, поскольку именно th и td являются информационнохранящими ячейками таблицы. И что же мы видим? И div, и th/td хранят один и тот же тип информации! %Flow.
Для интереса можно взглянуть, что из себя представляет %Flow.
< !ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*» >
Ага! Это может быть любой символьной информацией или тегом < form >!
Но нам этого мало, верно? Нам нужно полностью подорвать мнение тупого быдла клиента о верном теге для верстки!
Для полного понимания посмотрим, что такое %block, %inline и %misc:
< !ENTITY % block «p | %heading; | div | %lists; | %blocktext; | fieldset | table» >
< !ENTITY % inline «a | %special; | %fontstyle; | %phrase; | %inline.forms;» >
< !ENTITY % misc «noscript | %misc.inline;» >
Погружаться в остальное нам уже нет смысла, самое главное в %block. А %block из себя представляет любой блочный тег, в том числе table и div, а то есть td/th может хранить в себе тот же div, именно который и имеет полное и исключительное право хранить информацию для верстки, по мнению нашего тупого быдла клиента!
А следовательно, для верстки можно использовать и divы, и таблицы!
Остается только повториться, что таблицы очень сильно повышают скорость процесса изготовления сайта.
Теория доказана, за сим откланяюсь, надеюсь кому-то будет полезно :)