Делаем простые адаптивные таблицы на минимальном CSS
Сложно представить сайт без таблиц. Существует вагон и маленькая тележка способов реализации адаптивного вывода таблиц. Можно использовать готовые фреймворки, разную экзотику на JS, но разумнее всего делать таблицы на CSS. На нем и рассмотрим парочку боевых примеров.
Сразу отмечу, решение не мое, а известного канадского веб-разработчика Брэдли Таунта.
1. Разрешить скроллинг таблиц
Первый способ заключается в разрешении горизонтального скролла. Да, решение не самое элегантное, но иногда вывести многоколоночную таблицу удается только так и с этим приходится мириться.
Просто задаем минимальную ширину родительского элемента таблицы, и браузер потребует от пользователя прокручивать содержимое по горизонтали.
table { min-width: 800px; /* Set your desired min-width here */ }
Получится так:
See the Pen Простые адаптивные таблицы на минимальном CSS — 1 by Ivan (@DanilinBiz) on CodePen.
Многие этим и ограничиваются, но можно пойти дальше.
2. Добавить гибкости
В основе решения лежат флексбоксы со всеми вытекающими приятными последствиями.
/* Using 800px as mobile screen in this example */ @media(max-width: 800px) { /* Hide the table headings */ table thead { left: -9999px; position: absolute; visibility: hidden; } table tr { border-bottom: 0; display: flex; flex-direction: row; flex-wrap: wrap; margin-bottom: 40px; } table td { border: 1px solid; margin: 0 -1px -1px 0; /* Removes double-borders */ width: 50%; } }
На выходе получаем такое:
See the Pen Простые адаптивные таблицы на минимальном CSS — 2 by Ivan (@DanilinBiz) on CodePen.
В примере выше заголовки таблицы скрыты, чтобы не засорять ее. Но мы можем вывести и их. Например, так:
/* Default span styling - hidden on desktop */ table td span { background: #eee; color: dimgrey; display: none; font-size: 10px; font-weight: bold; padding: 5px; position: absolute; text-transform: uppercase; top: 0; left: 0; } /* Simple CSS for flexbox table on mobile */ @media(max-width: 800px) { table thead { left: -9999px; position: absolute; visibility: hidden; } table tr { border-bottom: 0; display: flex; flex-direction: row; flex-wrap: wrap; margin-bottom: 40px; } table td { border: 1px solid; margin: 0 -1px -1px 0; padding-top: 35px; /* additional padding to avoid heading overlap */ position: relative; width: 50%; } /* Show the heading span */ table td span { display: block; } }
See the Pen Простые адаптивные таблицы на минимальном CSS — 3 by Ivan (@DanilinBiz) on CodePen.
Как видим, способы сильно отличаются. И здесь важно понимать в контексте конкретного проекта, что использовать: молоток или отвертку.
Фулстек веб‑разработчик, специализируюсь на платформе WordPress
Подробнее