JavaRush /Курсы /Модуль 1: Web Core /Адаптивные таблицы

Адаптивные таблицы

Модуль 1: Web Core
13 уровень , 8 лекция
Открыта

9.1 Прокрутка (Scroll)

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

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

Пример:

CSS
    
      .table-container {
        overflow-x: auto;
        width: 100%;
      }

      table {
        width: 100%;
        border-collapse: collapse;
      }

      th, td {
        border: 1px solid #ccc;
        padding: 8px;
        text-align: left;
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Адаптивная таблица с прокруткой</title>
        <link rel="stylesheet" href="styles.css">
      </head>
      <body>
      <div class="table-container">
        <table>
          <thead>
          <tr>
            <th>Колонка 1</th>
            <th>Колонка 2</th>
            <th>Колонка 3</th>
            <th>Колонка 4</th>
          </tr>
          </thead>
          <tbody>
          <tr>
            <td>Данные 1</td>
            <td>Данные 2</td>
            <td>Данные 3</td>
            <td>Данные 4</td>
          </tr>
          <!-- Другие строки -->
          </tbody>
        </table>
      </div>
      </body>
      </html>
    
  

Объяснение кода:

  • .table-container: добавляет горизонтальную прокрутку, если таблица превышает ширину контейнера
  • table: устанавливает ширину таблицы на 100% и объединяет границы ячеек

9.2 Скрытие колонок (Column Hiding)

Этот метод предполагает скрытие менее важных колонок на узких экранах, чтобы основные данные оставались видимыми. Это можно сделать с помощью медиа-запросов.

Пример:

CSS
    
      @media (max-width: 600px) {
        .hide {
          display: none;
        }
      }

      table {
        width: 100%;
        border-collapse: collapse;
      }

      th, td {
        border: 1px solid #ccc;
        padding: 8px;
        text-align: left;
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивная таблица со скрытием колонок</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <table>
            <thead>
            <tr>
              <th>Колонка 1</th>
              <th>Колонка 2</th>
              <th class="hide">Колонка 3</th>
              <th class="hide">Колонка 4</th>
            </tr>
            </thead>
            <tbody>
            <tr>
              <td>Данные 1</td>
              <td>Данные 2</td>
              <td class="hide">Данные 3</td>
              <td class="hide">Данные 4</td>
            </tr>
            <!-- Другие строки -->
            </tbody>
          </table>
        </body>
      </html>
    
  

Объяснение кода:

  • .hide: скрывает определенные колонки на экранах шириной менее 600px с помощью медиа-запросов
  • table: устанавливает ширину таблицы на 100% и объединяет границы ячеек

9.3. Перенос в блоки (Stacking)

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

Пример:

CSS
    
      table {
        width: 100%;
        border-collapse: collapse;
      }

      th, td {
        border: 1px solid #ccc;
        padding: 8px;
        text-align: left;
      }

      @media (max-width: 600px) {
        table, thead, tbody, th, td, tr {
          display: block;
        }

        th {
          display: none;
        }

        td {
          display: flex;
          justify-content: space-between;
          padding: 10px;
          border-bottom: 1px solid #ccc;
        }

        td::before {
          content: attr(data-label);
          font-weight: bold;
        }
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивная таблица с переносом в блоки</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <table>
            <thead>
            <tr>
              <th>Колонка 1</th>
              <th>Колонка 2</th>
              <th>Колонка 3</th>
              <th>Колонка 4</th>
            </tr>
            </thead>
            <tbody>
            <tr>
              <td data-label="Колонка 1">Данные 1</td>
              <td data-label="Колонка 2">Данные 2</td>
              <td data-label="Колонка 3">Данные 3</td>
              <td data-label="Колонка 4">Данные 4</td>
            </tr>
            <!-- Другие строки -->
            </tbody>
          </table>
        </body>
      </html>
    
  

Объяснение кода:

  • Медиа-запросы: преобразуют таблицу в блочные элементы на экранах шириной менее 600px
  • td::before: добавляет псевдоэлемент с названием колонки перед каждым значением ячейки, чтобы сохранить контекст данных

9.4. Трансформация в карточки (Card Layout)

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

Пример:

CSS
    
      table {
        width: 100%;
        border-collapse: collapse;
      }

      th, td {
        border: 1px solid #ccc;
        padding: 8px;
        text-align: left;
      }

      @media (max-width: 600px) {
        table, thead, tbody, th, td, tr {
          display: block;
        }

        th {
          display: none;
        }

        tr {
          margin-bottom: 10px;
          border-bottom: 2px solid #ccc;
          padding-bottom: 10px;
        }

        td {
          display: flex;
          justify-content: space-between;
          padding: 10px 0;
          border: none;
        }

        td::before {
          content: attr(data-label);
          font-weight: bold;
          margin-right: 10px;
        }
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивная таблица с карточками</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <table>
            <thead>
            <tr>
              <th>Колонка 1</th>
              <th>Колонка 2</th>
              <th>Колонка 3</th>
              <th>Колонка 4</th>
            </tr>
            </thead>
            <tbody>
            <tr>
              <td data-label="Колонка 1">Данные 1</td>
              <td data-label="Колонка 2">Данные 2</td>
              <td data-label="Колонка 3">Данные 3</td>
              <td data-label="Колонка 4">Данные 4</td>
            </tr>
            <!-- Другие строки -->
            </tbody>
          </table>
        </body>
      </html>
    
  

Объяснение кода:

  • Медиа-запросы: преобразуют таблицу в блочные элементы и создают карточки на экранах шириной менее 600px
  • td::before: добавляет псевдоэлемент с названием колонки перед каждым значением ячейки, чтобы сохранить контекст данных

9.5 Использование CSS Frameworks

Многие CSS-фреймворки, такие как Bootstrap, предлагают встроенные решения для создания адаптивных таблиц. Использование таких фреймворков упрощает процесс и предоставляет готовые стили и компоненты.

Пример с использованием Bootstrap:

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивная таблица с Bootstrap</title>
          <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
        </head>
        <body>
          <div class="container">
            <table class="table table-responsive">
              <thead>
              <tr>
                <th>Колонка 1</th>
                <th>Колонка 2</th>
                <th>Колонка 3</th>
                <th>Колонка 4</th>
              </tr>
              </thead>
              <tbody>
              <tr>
                <td>Данные 1</td>
                <td>Данные 2</td>
                <td>Данные 3</td>
                <td>Данные 4</td>
              </tr>
              <!-- Другие строки -->
              </tbody>
            </table>
          </div>
          <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
          <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.2/dist/umd/popper.min.js"></script>
          <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
        </body>
      </html>
    
  

Объяснение кода:

  • table.table-responsive: класс Bootstrap, который добавляет горизонтальную прокрутку для таблиц на узких экранах
  • container: класс Bootstrap для центровки и задания максимальной ширины контейнера
1
Задача
Модуль 1: Web Core, 13 уровень, 8 лекция
Недоступна
Адаптивная таблица
Адаптивная таблица
1
Задача
Модуль 1: Web Core, 13 уровень, 8 лекция
Недоступна
Скрытие колонок
Скрытие колонок
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
No Name Уровень 36
29 мая 2025
+ лекция в копилке
Ilona Уровень 23
26 марта 2025
Kак увидеть нужное направление прокрутки, если в таблице во всех примерах по 1 хедеру и по 1 строке с даннными. Выглядит как халтура. Неужели нельзя было не добавить нужно количество данных, чтобы визуально показать эффект?
Gans Electro Уровень 45
17 октября 2025
Артур Уровень 22
5 ноября 2025
В правом нижнем углу окна "Результат" можно менять размер окна, удерживая мышью. Визуально эффект появляется, например, горизонтальная прокрутка на послежнем примере появляется, если ширину окна результата сделать меньше.
Yliya Samuseva Уровень 48
13 марта 2025
В задаче адаптивная таблица есть 2 пункта, которые весьма трудно соблюсти сразу же, поскольку не указано, какие именно стили ожидаются в обязательном порядке, на этом, увы, можно потерять попытку выполнения: - Добавьте стили для заголовков таблицы. - Добавьте стили для ячеек таблицы.