Таблична верстка блоками

Не дивлячись на те, що сьогодні існують два напрямки верстки сторінок: табличні та блокові, не думаю, що між прихильниками цих двох гілок існують взаємне нерозуміння. Упевнений, будь-який веб-працівник бачить очевидні плюси, які дає верстка блоками, але в той же час багато хто стикається з труднощами, які при цьому виникають і, оцінюючи запропоновані рішення, цілком обґрунтовано залишаються прихильниками старої школи – просто, тому що так виявляється зручніше .

Ключове питання

Що ж заважає блоковій верстці переможно крокувати планетою? Існує безліч перешкод. Але, мабуть, особняком серед них стоїть проблема, де-не-де порівнянна навіть не більше не менше як з пошукомГрааля. Вузьке місце – створення горизонтальних блоків однакової висоти, тобто. реалізація тієї самої табличної сутності, яка часом необхідна при верстці сайту, наприклад, у випадку класичного 3-х колонкового макета:

верстка

Хочу запропонувати простий, але, в той же час, непопулярний підхід до вирішення даної проблеми, а саме будувати каркас сайту, відмовившись від табличних тегів, але зберігши табличну модель:

Відповідно до стандартів CSS, щоб перетворити цей набір дивів на таблицю, достатньо вказати у класах відповідні відображення: display:table; , display:table-row; та display:table-cell; .

Але я не випадково назвав такий підхід непопулярним. «Табличники» побачать у прийомі лише непотрібне «винахід велосипеда», затяті ж поборникиnu skoolвважають цей шлях ідеологічно невірним, тим більше, що на перший погляд здається, що він веде в глухий кут, браузери від Microsoft display: table; не підтримували, і найближчим часом підтримувати не планує, а отже є можливість відмовитися від табличних шаблонів і цієїситуацією злочин не користуватися.

З багатьма запереченнями можна погодитися, проте не можна не помітити і очевидні плюси «табличного» підходу, головними серед яких я бачу:

  • поділ змісту від подання;
  • можливість верстати «табличні» макети будь-якої складності;
  • Проста реалізація.

Пункт «проста реалізація», мабуть, викличе найбільші сумніви, з «правильними браузерами» все зрозуміло, але чи дійсно просте рішення для Internet Explorer? Існує.

Наприклад, розглянемо таку конструкцію:

Щоб розмістити блоки горизонтально, вирівнявши у своїй їх висоту, тобто. зімітувати табличну поведінку в IE, достатньо визначити стильові класи вказати ширину для колонок і все. Приклад 1 ілюструє цю техніку (Увага! Працює тільки в режимі зворотної сумісності – Quirks Mode) для варіанта, коли трьом колонкам задана ширина 200px.

Розглянемо більш «життєве» завдання: припустимо, каркас має бути розтягнутий по ширині на 100%, ширина першої колонки – 200px, третьої – 30%, друга ж нехай займає вільний простір. Рішення для IE може виглядати так (доповнимо стильовий лист):

Прийом із застосуванням лише одного див-контейнера працюватиме і в браузерах з підтримкою display:table; Однак для семантичної відповідності табличної моделі, нижче, я наведу приклад загального рішення для конструкції з двома контейнерами.

Не слід очікувати, що цей шлях, як і будь-який інший, буде усіяний трояндами, є звичайно і нюанси (наприклад, ефект зісковзування вниз блоків в IE, для яких не знаходиться місця по ширині сторінки), проте всі відомі мені труднощі можна розв'язати . Тут я вказав лише загальний напрям, запропонувавідею, а далі, як кажуть, ви вже самі.

Коментарі

Тільки нещодавно дізнався, що трюк з height:0 - це один із способів виставлення значення true Microsoft'овської властивості hasLayout.

Не бачу тут відділення змісту від уявлення, оскільки структура наведеного вище html коду з дивами повторює структуру нормальної таблиці, тільки замість,- Діви з відповідними класами. Та й потім, якщо нам потрібно, щоб дані виглядали "таблично", навіщо ж темнити душею? Виграшу в компактності коду теж не бачу, тільки якщо самий мізер.

>>навіщо давати дивам "табличні" display коли можна просто використовувати самі таблиці?

Тема статті, а також той факт, що при назві класів, для зручності сприйняття, я використовував табличні імена, можливо заважають абстрагуватися.

Ключовий момент тут – відокремлення змісту від уявлення. Наведений у статті набір дивів не повторює «структуру нормальної таблиці», це – звичайна деревоподібна структура, вона просто асоціюється з таблицею (оскільки в html використання табличних тегів перетворює цю конструкцію на таблицю). Важливо розуміти, що не в протиставленні дивів табличним тегам, а досягненні потрібного рівня абстракції. Тобто. приклади в статті повинні сприйматися не як «диви замість таблиць», а як «диви як таблиці» (адже вони можуть і відображатися і «як щось ще» на відміну від табличних тегів). Відображаючи «дивний» шаблон «таблично», ви не темніте душею, часто ви просто відображаєте його ще й «у стовпчик» та «по діагоналі», або маєте таку можливість.