Данные с переключением вида список/сетка

 alexei 13/11/2020 - 17:23

Как сделать вывод данных в виде списка или сетки.

Нажмите на кнопку, чтобы выбрать отображение данных в виде списка или сетки.


Колонка 1

Какой-то текст..

Колонка 2

Какой-то текст..

Колонка 3

Какой-то текст..

Колонка 4

Какой-то текст..

Отображение в виде списка/сетки

Шаг 1) Добавляем HTML:


<!-- Загружаем библиотеку иконок Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<!-- Кнопки для переключения отображения список-сетка -->
<button onclick="listView()"><i class="fa fa-bars"></i> Список</button>
<button onclick="gridView()"><i class="fa fa-th-large"></i> Сетка</button>

<div class="row">
  <div class="column" style="background-color:#aaa;">
    <h2>Колонка 1</h2>
    <p>Какой-то текст..</p>
  </div>
  <div class="column" style="background-color:#bbb;">
    <h2>Колонка 2</h2>
    <p>Какой-то текст..</p>
  </div>
</div>

<div class="row">
  <div class="column" style="background-color:#ccc;">
    <h2>Колонка 3</h2>
    <p>Какой-то текст..</p>
  </div>
  <div class="column" style="background-color:#ddd;">
    <h2>Колонка 4</h2>
    <p>Какой-то текст..</p>
  </div>
</div>

Шаг 2) Добавляем CSS:


/* Создаем две одинаковые колонки, которые обтекают друг друга */
.column {
  float: left;
  width: 50%;
  padding: 10px;
}

/* Сбрасываем обтекание для элементов за колонками */
.row:after {
  content: "";
  display: table;
  clear: both;
}

Шаг 3) Добавляем JavaScript:


// Получаем элемент с атрибутом class="column"
var elements = document.getElementsByClassName("column");

// Декларируем переменную для цикла
var i;

// Отображение в виде списка
function listView() {
  for (i = 0; i < elements.length; i++) {
    elements[i].style.width = "100%";
  }
}

// Отображение в виде сетки
function gridView() {
  for (i = 0; i < elements.length; i++) {
    elements[i].style.width = "50%";
  }
}