Display: table в CSS - мощный инструмент для создания гибких layout-ов. С его помощью вы можете превратить любые HTML-элементы в табличные компоненты. Это дает множество преимуществ:
- Вы получаете удобную разметку по строкам и столбцам.
- Элементы будут автоматически выравниваться, как ячейки в таблице.
- Нет нужды задавать floats и clears.
Как это работает
Чтобы использовать display: table, нужно применить его к родительскому контейнеру. Например:
.container { display: table; }
Затем дочерние элементы превращаются в ячейки с помощью display: table-cell:
.container div { display: table-cell; }
Теперь div-ы будут выстраиваться в строку, прижимаясь друг к другу, как ячейки таблицы. Можно задать им одинаковую высоту и выровнять по вертикали.
Гибкая верстка
Главное преимущество display: table - это гибкость. В отличие от настоящих таблиц, здесь количество и ширина столбцов может меняться. К примеру, на мобильных устройствах ячейки автоматически составятся в колонку, а на десктопе - в несколько строк.
Это позволяет легко создавать адаптивные компоненты - слайдеры, формы, инфоблоки. И все без медиа-запросов!
display block
Вложенные таблицы
С помощью вложенных табличных лейаутов можно создавать очень гибкие структуры. Представьте сайдбар, в котором каждый виджет - отдельная таблица. Их можно свободно переставлять и комбинировать.
Также полезно вложение для комплексных компонентов. К примеру, карточка товара может содержать табличную структуру для изображений, названия, цены и кнопок.
Совместимость
Display: table поддерживается всеми современными браузерами, включая мобильные. Старые версии IE (8 и ниже) его не понимают. Но это легко решается добавлением префиксов -webkit- и -moz-.
Так что не бойтесь использовать эту технологию - она уже хорошо зарекомендовала себя на практике. В связке с Flexbox получается идеальный инструментарий для создания адаптивных layout-ов.
Примеры использования
Вот несколько практических кейсов, где display: table поможет упростить разметку:
- Макеты сайдбаров и виджетов
- Формы с группами элементов
- Галереи изображений и слайдеры
- Карточки товаров и постов
- Гибкие header'ы и footer'ы
- Табы и аккордеоны
В общем, везде, где нужно создать компонент с ячеистой структурой и возможностью изменения размеров. Попробуйте - вы точно оцените удобство этого подхода!
Переходы и трансформации
Еще один полезный прием - использование CSS-переходов и трансформаций для элементов в табличном лейауте. Это позволяет создавать интересные анимированные эффекты.
Например, при наведении на ячейку можно плавно увеличить ее размер и добавить тень с помощью transition и transform. Или задать плавное появление блоков с opacity и scale.
В отличие от обычных div-ов с float, здесь не нужно беспокоиться о соседних элементах - они автоматически подвинутся, сохраняя порядок в таблице.
Верстка под разные устройства
Табличные лейауты хорошо подходят для верстки, адаптированной под разные разрешения. Можно задать разное количество колонок для десктопа и мобилы.
Например, на широких экранах отображать плитку с 3 столбцами, на планшетах - с 2, а на телефонах превратить ее в одноколоночную структуру.
Элементы будут автоматически располагаться по новой сетке без дополнительных усилий со стороны css. Такой подход гораздо проще медиа-запросов и адаптива на floats.
Кроме того, для мобильных можно скрыть некоторые ячейки, оставив только самое важное содержимое. Это удобный способ создания responsive-верстки.
Кроссбраузерная совместимость
Как уже упоминалось, display: table поддерживается всеми современными браузерами. Но для полной кроссбраузерной совместимости стоит добавить префиксы.
.table { display: -webkit-table; display: -moz-table; display: table; } .cell { display: -webkit-table-cell; display: -moz-table-cell; display: table-cell; }
Такой подход обеспечит корректное отображение табличного лейаута во всех браузерах, включая устаревшие.
Вложенные элементы
Внутри ячеек таблицы можно размещать любые элементы - текст, картинки, ссылки, другие блоки. Они будут вести себя так же, как в обычном div.
Это позволяет создавать сложные гибридные структуры. Например, в одной ячейке - изображение с подписью, в другой - кнопка-ссылка, в третьей - текстовый блок.
Анимации и переходы
Для элементов в табличном лейауте можно задавать анимации и переходы точно так же, как для обычных div-ов.
Например, плавно менять прозрачность, размер, положение при наведении. Или задать появление/исчезание блоков с помощью @keyframes.
Благодаря автоматическому выравниванию ячеек, можно не беспокоиться о соседних элементах при анимации.
Прочие применения
Display: table можно использовать в самых разных случаях, где нужно выстроить блоки в табличную структуру. Вот еще несколько идей:
- Календари и расписания
- Панели навигации
- Карточки товаров
- Блоки с услугами
- Ленты новостей и постов
Проявите фантазию, и вы найдете много вариантов применения этой полезной возможности CSS!
Работа с JavaScript
Табличные лейауты удобно модифицировать и с помощью JavaScript.
Например, можно динамически добавлять или удалять ячейки при клике на кнопку. Или переключать класс с одного количества колонок на другое.
Также полезно менять порядок элементов в таблице при сортировке и фильтрации данных.
// Перемещаем ячейку вверх cell.parentElement.insertBefore(cell, cell.previousElementSibling);
Благодаря автоматическому выравниванию, ячейки займут нужное место в лейауте после манипуляций.
Стилизация таблицы
Для табличных лейаутов доступны все возможности CSS по стилизации.
Можно задавать рамки, тени, gradient, transition для ячеек и строк. Добавлять hover эффекты.
Также полезно задать стили для разных состояний: :hover, :focus, :active. Это сделает компонент более интерактивным.
Респонсивный дизайн
Таблицы отлично подходят для создания адаптивных компонентов под все устройства.
Можно задать разное количество колонок и вид ячеек в медиа-запросах.
На мобильных скрыть сложные элементы, оставив только самую важную информацию.
Все изменения лейаута происходят плавно без лишнего кода и хаков.
Совместное использование с Flexbox
Display: table часто комбинируют с Flexbox при создании layouts.
Flexbox удобен для расположения элементов в строке таблицы.
А table позволяет легко организовать сами строки с выравниванием по вертикали.
Такой подход объединяет гибкость Flexbox с преимуществами табличного представления.
Вложенные таблицы
Можно создавать таблицы внутри ячеек другой таблицы.
Это дает еще большую гибкость для сложных лейаутов.
Например, каждая ячейка может содержать мини-таблицу с данными.
Или элементы меню тоже располагаются таблично внутри ячейки.
Верстка под IE
В старых IE (8 и ниже) нужно использовать полифилы для эмуляции табличного дисплея.
Например, библиотеки display-table-polyfill или fixed-table-layout.
Это обеспечит кроссбраузерную поддержку вплоть до IE6.
Примеры использования
В заключение еще раз перечислим типичные применения display: table в веб-разработке:
- Компоненты сайта с ячеистой структурой
- Адаптивные макеты
- Формы и элементы управления
- Галереи, слайдеры, табы
- Виджеты и веб-приложения