Как сделать адаптивную таблицу. Поворачивать телефон — это крайняя мера

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

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

Первый способ адаптации

<div class = "table-wrap" > <table > <thead > <tr > <th > Услуга</ th > <th > Описание</ th > <th > Цена</ th > <th > Скидка</ th > </ tr > </ thead > <tbody > <tr > <td > Мобильная верстка</ td > <td > Верстка под телефоны</ td > <td > $3000</ td > <td > 50%</ td > </ tr > <tr > <td > Посадка на CMS WordPress</ td > <td > </ td > <td > $3000</ td > <td > 30%</ td > </ tr > </ tbody > </ table > </ div >

Услуга Описание Цена Скидка
Мобильная верстка Верстка под телефоны $3000 50%
Посадка на CMS WordPress Создание сайта с админ. панелью $3000 30%

Стилизуем все это дело (главным образом нам нужно стилизовать table-wrap ).

1 2 3 4 5 6 7 8 9 10 11 12 13 .table-wrap { text-align : center ; display : inline-block; background-color : #fff ; padding : 2rem 2rem; color : #000 ; } .table-wrap { overflow-y: scroll ; } }

Table-wrap { text-align: center; display: inline-block; background-color: #fff; padding: 2rem 2rem; color: #000; } @media screen and (max-width: 600px) { .table-wrap { overflow-y: scroll; } }

В результате, на ширине ДО 600 пикселей таблица будет скроллиться, а сайт нет. Удобно, но сегодня я хотел бы поговорить о другом.
Я нашел еще один интересный подход к адаптивности таблицы. Он заключается в использовании data-атрибутов и псевдоклассов. Сейчас все покажу.

Второй способ адаптации

Для начала поменяем разметку:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Услуга Описание Цена Скидка
Мобильная верстка Верстка под телефоны $3000 50%
Посадка на CMS WordPress Создание сайта с админ. панелью $3000 30%

Услуга Описание Цена Скидка
Мобильная верстка Верстка под телефоны $3000 50%
Посадка на CMS WordPress Создание сайта с админ. панелью $3000 30%

Раздали каждому столбцу атрибут data-label , который нам пригодится в будущем.

Задаем базовые стили:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 body { text-align : center ; padding-top : 10% ; font-family : sans-serif ; background-image : url ("bg.jpg" ) ; background-size: cover; height : 100vh; color : #fff ; } .table-wrap { text-align : center ; display : inline-block; background-color : #fff ; padding : 2rem 2rem; color : #000 ; } table { border : 1px solid #ccc ; width : 100% ; margin : 0 ; padding : 0 ; border-collapse : collapse ; border-spacing : 0 ; } table tr { border : 1px solid #ddd ; padding : 5px ; } table th, table td { padding : 10px ; text-align : center ; border-right : 1px solid #ddd ; } table th { color : #fff ; background-color : #444 ; text-transform : uppercase ; font-size : 14px ; letter-spacing : 1px ; }

body { text-align: center; padding-top: 10%; font-family: sans-serif; background-image: url("bg.jpg"); background-size: cover; height: 100vh; color: #fff; } .table-wrap { text-align: center; display: inline-block; background-color: #fff; padding: 2rem 2rem; color: #000; } table { border: 1px solid #ccc; width: 100%; margin:0; padding:0; border-collapse: collapse; border-spacing: 0; } table tr { border: 1px solid #ddd; padding: 5px; } table th, table td { padding: 10px; text-align: center; border-right: 1px solid #ddd; } table th { color: #fff; background-color: #444; text-transform: uppercase; font-size: 14px; letter-spacing: 1px; }

Выглядит, как обычная таблица, естественно, сдвигая сайт на 320-420 пикселях, мы увидим горизонтальный скролл всего сайта. Не дело.

Как это исправить? добавляем стили:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 @media screen and (max-width: 600px) { table { border : 0 ; } table thead { display : none ; } table tr { margin-bottom : 10px ; display : block ; border-bottom : 2px solid #ddd ; } table td { display : block ; text-align : right ; font-size : 13px ; border-bottom : 1px dotted #ccc ; border-right : 1px solid transparent ; } table td:last-child { border-bottom : 0 ; } table td:before { content : attr(data-label) ; float : left ; text-transform : uppercase ; font-weight : bold ; } }

@media screen and (max-width: 600px) { table { border: 0; } table thead { display: none; } table tr { margin-bottom: 10px; display: block; border-bottom: 2px solid #ddd; } table td { display: block; text-align: right; font-size: 13px; border-bottom: 1px dotted #ccc; border-right: 1px solid transparent; } table td:last-child { border-bottom: 0; } table td:before { content: attr(data-label); float: left; text-transform: uppercase; font-weight: bold; } }

Здесь мы сделали строки таблицы блочными, удалили названия столбцов, а текст самих столбцов выровняли по правому краю. В свою очередь при помощи псевдокласса :before мы присоединяем к левому краю наши дата-атрибуты. Выходит так:

Вот еще пен:

Как видно, мы превратили строки таблицы в небольшой блок, в котором заключена вся информация. Думаю, такой вариант адаптивности таблицы подойдет для небольших таблиц. Пользуйтесь, друзья!

Если вы используете на сайте таблицы, то их также надо адаптировать под мобильные устройства. Я использую два варианта адаптации – сжатие и перенос слов + выстраивание таблиц в один столбик.

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

Основной вариант

Итак, для большинства таблиц на сайте я использую код в css:

@media screen and (max-width:1000px){td{word-break:break-all;}

Он указывает, что слова, которые не помещаются в блок, должны при разрешении менее 1000 px начинаться с новой строки. Разрешение 1000 – это пример, смотрите по своим сайтам, для кого-то есть смысл ставить разрешение меньше.

Добиться хорошего отображения table можно с помощью двойного кода в CSS. Я использую параллельно:

@media screen and (max-width:700px){img{max-width:96% !important;height:auto !important;} iframe, textarea, input, button, submit, video, object, embed{max-width:99% !important;} table, span, div, ins{max-width:100% !important;}

В нём указано, что при разрешении менее 700 px таблица отображается в 100%-ом варианте по размеру, то есть, сжимается, но занимает весь блок по ширине. Свойство!important показывает, что оно будет применяться для всех разрешений менее 700 px.

Адаптация в один столбик

Сложнее адаптировать таблицу так, чтобы она при небольшом разрешении отображалась в один столбик. Подходит не для всех table, но часто необходимо. Для начала укажите для таблицы оригинальный класс, например,

Затем в стилях прописывается код:

@media only screen and (max-width: 320px),(min-device-width: 320px) and (max-device-width: 600px) /* Force table to not be like tables anymore */ table.mceItemTable, table.mceItemTable thead, table.mceItemTable tbody, table.mceItemTable th, table.mceItemTable td, table.mceItemTable tr {display: block ; }

В данном случае display: block; указывает, что в таблицах mceItemTable блокируется tbody, th, td, tr. Как результат, при разрешении менее 600 px таблицы строится в одну колонку и table, по сути, не является.

Использование таблиц – это ещё один пирожок в корзину удобства пользователя, но они должны корректно отображаться и на мобильных устройствах, иначе результат будет противоположным ожидаемому – посетители станут убегать от кривых Table и ухудшат ПФ. Никто не запрещает выводить таблицы в одну колонку для всех Table, и наоборот, но лучше микст в зависимости от особенностей табличной конструкции.

В Аспро: Next, начиная с версии 1.1.7, вы можете адаптировать таблицы для мобильной версии. Необходимо внести изменения в исходный код страницы - добавить класс, который отвечает за адаптивность таблиц.

Простая таблица в мобильной версии выходит за рамки страницы.

Чтобы таблица была адаптивной, перейдите в редактирование страницы, где добавлена таблица. Затем перейдите в режим редактирования исходного кода.

Перед открывающимся тегом

добавьте тег с классом
.

После закрывающегося тега

пропишите тег
.


...

Сохраните изменения.

Теперь таблица прокручивается и не заходит за рамки.

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

Необходимо добавить класс «swipeignore» в тег

, который мы добавили ранее. В результате перед тегом должен быть прописан тег с классами
.

...

Сохраните изменения.

Теперь при прокрутке таблицы вправо не открывается боковое меню, которое мешало работе с таблицей.

Вы можете убрать вывод бокового меню при прокрутке вправо и на других страницах. Необходимо добавить класс «swipeignore» в тег

блока, для которого нужно убрать вывод бокового меню. Если у тега не был прописан класс, он примет вид
. Если у тега
уже добавлены классы, то пропишите «swipeignore» через пробел, например
.

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

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

Демонстрация адаптивной таблицы .

HTML разметка



























































Имя Фамилия Баллы Баллы Баллы Баллы Баллы Баллы Баллы Баллы Баллы Баллы
Юлия Смирнова 50 50 50 50 50 50 50 50 50 50
Эвелин Яковлева 94 94 94 94 94 94 94 94 94 94
Андрей Петров 67 67 67 67 67 67 67 67 67 67

Мы создали простенькую HTML таблицу, пока она помещается на экране, все OK. При уменьшении ширины экрана, таблица будет срезаться и мы не увидим её данных или она станет очень мелкой и мы опять ничего не увидим.

Вы наверное заметили, что я поместил таблицу внутри тега div и очевидно не просто так. Сам по себе тег div ничего не даёт, пока мы не пропишем ему стили.

CSS стили

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

Div (
overflow-x: auto;
)

Стилизуем остальные теги таблицы:

Table {
border-collapse: collapse; /* Отображать только одинарные линии */
border-spacing: 0; /* Расстояние между ячейками */
width: 100%;
border: 1px solid #afb42b;
color: #212121;
}

Th, td {
text-align: left;
padding: 8px;
}

Стилизация тега tr (ряд) заслуживает отдельного комментария. Уже стало нормой, когда табличные ряды имеют полосатый вид (зебра). Для этого используется псевдокласс :nth-child со значение в скобочках even . Значение even , всем четным элементам присваивает свойства, в нашем случае – это цвет фона. Таким образом, таблица будет полосатой.

На этот мы раз затронем схожую тему, но возьмем таблицу посложнее, с заголовками.

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

Нарисуем таблицу графика работы службы доставки со сменными курьерами и ценами, добавив атрибут aria-label (текстовую метку) к ячейкам с данными.

Время доставки Курьер Оплата картой Стоимость доставки
8:00-12:00 Николай Нет 20 руб.
12:00-18:00 Вадим Да 50 руб.
18:00-23:00 Алексей Да 120 руб.
1:00-6:00 Евгений Нет 90 руб.

Table.delivery {width: 100%; border: 0px; border-collapse: collapse;} table.delivery thead {font-weight: bold;} table.delivery td {padding: 0.6rem 1rem; border-bottom: 1px solid #e8e9eb;}

Внешний вид таблицы на ПК с фиксированным разрешением 1140 пикс. будет выглядеть примерно так.

При уменьшении разрешения дисплея до 334 пикс. ячейки сожмутся на сколько это возможно и оставят часть информации скрытой.

С помощью CSS мы сможем добиться нужно эффекта - разделение таблицы на понятные посетителю блоки при разрешении экрана меньше 800 пикс. Просто добавим к уже созданным стилям следующий код:

@media screen and (max-width: 800px) { table.delivery thead { display: none; } table.delivery tr { display: block; margin-bottom: 1rem; border-bottom: 2px solid #e8e9eb; } table.delivery td { display: block; text-align: right; } table.delivery td:before { content: attr(aria-label); float: left; font-weight: bold; } }

На скриншоте ниже вы можете наглядно оценить превосходство данного метода.

Спасибо за внимание! Не забывайте ставить оценку в рейтинге статьи!