Spec-Zone.ru › jQuery Mobile

Виджет таблицы с перестроением

Виджет таблицы с перестроением версия добавлена: 1.3

Описание: Создаёт адаптивную таблицу в режиме перестроения

Быстрое навигацияПримеры

Параметры

classes.cellLabels
classes.reflowTable
initSelector

Методы

refresh

События

create

Режим перестроения таблицы работает, сворачивая столбцы таблицы в структуру, которая выглядит как блоки пар «метка/данные» для каждой строки. Поскольку порядок элементов HTML таблицы запрещает стилизовать таблицу таким образом, плагин динамически добавляет разметку для отображения (без влияния на доступность). Ниже представлена демонстрация базовой таблицы с режимом перестроения:

Применение режима перестроения к таблице

Режим адаптивной таблицы с перестроением является самым простым в плане требований к разметке, так как он требует только таблицы с атрибутом data-role="table" на элементе таблицы. Нет необходимости устанавливать атрибут data-mode, так как reflow является значением по умолчанию.

<table data-role="table" id="my-table">

Как работает режим перестроения

Плагин анализирует значения (или abbr title) первой строки заголовков (th) таблицы, которые он находит. Например, в таблице выше анализируется третий заголовок таблицы для получения содержимого («Год»):

<th>Year</th>

Затем скрипт добавляет элемент с текстом заголовка таблицы *перед* содержимым каждой ячейки в этом столбце. Например, для каждой ячейки столбца «Год»:

<td>1941</td>

Перед текстом каждой ячейки добавляется элемент с классом class ui-table-cell-label.

<td><b class="ui-table-cell-label">Year</b>1941</td>

В нашем подходе, ориентированном на мобильные устройства, базовые стили для таблицы с перестроением выстраивают каждую строку и представляют каждую ячейку в формате «метка/данные». Это делается путем скрытия строк заголовков таблицы, присвоения каждой ячейке таблицы атрибута display:block, чтобы они выстраивались друг под другом. Добавляемый в каждую ячейку элемент метки стилизуется как display:inline-block с правилом min-width:30%, чтобы поместить метки на одной строке с содержимым, придерживаясь одинаковой ширины, чтобы сформировать представление из двух столбцов.

Важно отметить, что необходимо обернуть заголовки таблицы в <thead> ... </thead> блок, а тело таблицы в <tbody> ... </tbody> блок, как показано в примере полного примера.

Делаем таблицу адаптивной

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

Это делается путём обертывания нескольких простых правил CSS в медиа-запрос, который применяется только при ширине больше определённой точки отсечения. Стиль делает строки заголовков таблицы видимыми, отображает ячейки в табличном формате и скрывает сгенерированные элементы меток внутри каждой ячейки. Ниже приведён пример медиа-запроса, который переключает представление при ширине 40em (640 пикселей):

@media ( min-width: 40em ) {
  /* Show the table header rows and set all cells to display: table-cell */
  .my-custom-breakpoint td,
  .my-custom-breakpoint th,
  .my-custom-breakpoint tbody th,
  .my-custom-breakpoint tbody td,
  .my-custom-breakpoint thead td,
  .my-custom-breakpoint thead th {
    display: table-cell;
    margin: 0;
  }
  /* Hide the labels in each cell */
  .my-custom-breakpoint td .ui-table-cell-label,
  .my-custom-breakpoint th .ui-table-cell-label {
    display: none;
  }
}

Лучше всего использовать class на таблице для применения точки отсечения. Добавьте эти правила в свой пользовательский стилистический лист, который включён в head страницы. Рекомендуется создать набор пользовательских классов для точек отсечения, которые могут быть использованы для применения стандартных точек отсечения для таблиц в вашем проекте.

В приведённом выше примере предполагается, что к таблице добавлено класс my-custom-breakpoint для применения точки отсечения. Каждое из правил в пользовательском медиа-запросе ограничено классом этой таблицы, чтобы нацелиться только на таблицы с классом my-custom-breakpoint.

Для работы этой техники браузер должен поддерживать медиа-запросы и возможность стилизовать ячейки таблицы как блочные элементы. При тестировании большинство популярных браузеров для настольных и мобильных устройств отвечают этим критериям, но старые версии Internet Explorer (8 и более ранние) отходят от нормального представления таблицы. IE 9 может поддерживать эту технику, но для этого потребуются несколько дополнительных стилей, поэтому рекомендуется применять их в max-width медиа-запросе, чтобы применять их только при отображении таблицы, так как их трудно отменить.

Выбор точки отсечения

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

Ширина точки отсечения сильно зависит от количества столбцов в таблице и содержимого каждой ячейки. На некоторых сайтах она может быть настолько низкой, как 30em (480px), а на других — такой широкой, как 100em (1600px). В рамках фреймворка нет возможности выбрать «стандартную точку отсечения», которая будет работать для всех — вот почему в таблицу по умолчанию не встроена точка отсечения.

Рекомендуется, чтобы ширины медиа-запросов указывались в em для адаптивности к изменениям размера шрифта. Чтобы преобразовать ширину в пикселях в em, разделите целевую ширину на 16 (пикселей). Используйте это значение в качестве значения min-width в медиа-запросе выше.

Применение заданной точки отсечения

Хотя мы настоятельно рекомендуем писать свои пользовательские точки отсечения, в фреймворке предусмотрена одна предварительно настроенная точка отсечения, которая направляет стиль в стопку для небольших телефонов и переключается на табличное представление на больших телефонах, планшетах и настольных компьютерах. Чтобы использовать эту предварительно настроенную точку отсечения, добавьте класс ui-responsive к таблице, чтобы переключиться из стопки на табличное представление при 560px (35em). Если эта точка отсечения не работает для вашего содержимого, мы рекомендуем создать пользовательскую точку отсечения, как описано выше.

<table data-role="table" class="ui-responsive">

Работа с групповыми заголовками столбцов

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

Параметры

classes.cellLabels

Тип:Строка
По умолчанию:"ui-table-cell-label"
Класс, добавленный к первой ячейке в каждом столбце сгруппированного заголовка. Это облегчает стилизацию их по-разному для визуального разделения групп столбцов.

Примечание: Режим перестроения имеет один параметр, classes, который настраивается только через JavaScript, потому что он ожидает значение объекта-литерала. Параметр classes имеет два свойства, определяющие структурные имена классов, используемые плагином.

classes.reflowTable

Тип:Строка
По умолчанию:"ui-table-reflow"
Класс, добавленный к сгенерированному содержимому метки, добавленному к каждой ячейке таблицы на основе имени заголовка.

Примечание: Режим перестроения имеет один параметр, classes, который настраивается только через JavaScript, потому что он ожидает значение объекта-литерала. Параметр classes имеет два свойства, определяющие структурные имена классов, используемые плагином.

initSelector

Тип:Строка селектора CSS
По умолчанию:":jqmData(role='table')"
Используется для определения селекторов (типов элементов, ролей данных и т. д.), которые будут автоматически инициализированы как таблицы. Чтобы изменить элементы, которые будут инициализированы, привяжите этот параметр к событию mobileinit:
$( document ).on( "mobileinit", function() {
  $.mobile.table.prototype.options.initSelector = ".mytable";
});

Методы

refresh()Возвращает: jQuery (только плагин)

Обновляет метки в ячейках.
  • Этот метод не принимает никаких аргументов.
Примеры кода:

Вызов метода refresh:

$( ".selector" ).table( "refresh" );

События

create(event, ui)Тип: tablecreate

Так как этот плагин написан как расширение для основного плагина таблиц, он привязывается к событию tablecreate, но не генерирует никаких дополнительных событий.
  • event
    Тип: Событие
  • ui
    Тип: Объект

Примечание: Объект ui пуст, но включён для согласованности с другими событиями.

Примеры кода:

Инициализация таблицы с указанным обратным вызовом create:

$( ".selector" ).table({
  create: function( event, ui ) {}
});

Привязка обработчика событий к событию tablecreate:

$( ".selector" ).on( "tablecreate", function( event, ui ) {} );

Пример:

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

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>table demo</title>
  <link rel="stylesheet" href="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
  <script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
 
<div data-role="page" id="page1">
  <div data-role="header">
    <h1>jQuery Mobile Example</h1>
  </div>
  <div role="main" class="ui-content">
    <table data-role="table" id="movie-table" data-mode="reflow" class="ui-responsive table-stroke">
      <thead>
        <tr>
          <th data-priority="1">Rank</th>
          <th data-priority="persist">Movie Title</th>
          <th data-priority="2">Year</th>
          <th data-priority="3"><abbr title="Rotten Tomato Rating">Rating</abbr></th>
          <th data-priority="4">Reviews</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>1</th>
          <td><a href="http://en.wikipedia.org/wiki/Citizen_Kane" data-rel="external">Citizen Kane</a></td>
          <td>1941</td>
          <td>100%</td>
          <td>74</td>
        </tr>
        <tr>
          <th>2</th>
          <td><a href="http://en.wikipedia.org/wiki/Casablanca_(film)" data-rel="external">Casablanca</a></td>
          <td>1942</td>
          <td>97%</td>
          <td>64</td>
        </tr>
        <tr>
          <th>3</th>
          <td><a href="http://en.wikipedia.org/wiki/The_Godfather" data-rel="external">The Godfather</a></td>
          <td>1972</td>
          <td>97%</td>
          <td>87</td>
        </tr>
        <tr>
          <th>4</th>
          <td><a href="http://en.wikipedia.org/wiki/Gone_with_the_Wind_(film)" data-rel="external">Gone with the Wind</a></td>
          <td>1939</td>
          <td>96%</td>
          <td>87</td>
        </tr>
        <tr>
          <th>5</th>
          <td><a href="http://en.wikipedia.org/wiki/Lawrence_of_Arabia_(film)" data-rel="external">Lawrence of Arabia</a></td>
          <td>1962</td>
          <td>94%</td>
          <td>87</td>
        </tr>
        <tr>
          <th>6</th>
          <td><a href="http://en.wikipedia.org/wiki/Dr._Strangelove" data-rel="external">Dr. Strangelove Or How I Learned to Stop Worrying and Love the Bomb</a></td>
          <td>1964</td>
          <td>92%</td>
          <td>74</td>
        </tr>
        <tr>
          <th>7</th>
          <td><a href="http://en.wikipedia.org/wiki/The_Graduate" data-rel="external">The Graduate</a></td>
          <td>1967</td>
          <td>91%</td>
          <td>122</td>
        </tr>
        <tr>
          <th>8</th>
          <td><a href="http://en.wikipedia.org/wiki/The_Wizard_of_Oz_(1939_film)" data-rel="external">The Wizard of Oz</a></td>
          <td>1939</td>
          <td>90%</td>
          <td>72</td>
        </tr>
        <tr>
          <th>9</th>
          <td><a href="http://en.wikipedia.org/wiki/Singin%27_in_the_Rain" data-rel="external">Singin' in the Rain</a></td>
          <td>1952</td>
          <td>89%</td>
          <td>85</td>
        </tr>
        <tr>
          <th>10</th>
          <td class="title"><a href="http://en.wikipedia.org/wiki/Inception" data-rel="external">Inception</a></td>
          <td>2010</td>
          <td>84%</td>
          <td>78</td>
        </tr>
      </tbody>
    </table>
 
  </div>
</div>
 
</body>
</html>

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquerymobile.com/table-reflow

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API