Галерея для портфолио с фильтрацией

Здесь вы узнаете, как сделать галерею для портфолио с фильтрацией на CSS и JavaScript.


Попробовать самому »

Как сделать сайт портфолио

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

Пример


<h2>ПОРТФОЛИО</h2>
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')"> Все</button>
  <button class="btn" onclick="filterSelection('nature')"> Природа</button>
  <button class="btn" onclick="filterSelection('cars')"> Машины</button>
  <button class="btn" onclick="filterSelection('people')"> Люди</button>
</div>

<!-- Сетка галереи портфолио -->
<div class="row">
  <div class="column nature">
    <div class="content">
      <img src="mountains.jpg" alt="Mountains" style="width:100%">
      <h4>Горы</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="lights.jpg" alt="Lights" style="width:100%">
      <h4>Огни</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>

  <div class="column cars">
    <div class="content">
      <img src="cars1.jpg" alt="Car" style="width:100%">
      <h4>Ретро</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="cars2.jpg" alt="Car" style="width:100%">
      <h4>Скорость</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>

  <div class="column people">
    <div class="content">
      <img src="people1.jpg" alt="People" style="width:100%">
      <h4>Девушка</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="people2.jpg" alt="People" style="width:100%">
      <h4>Мужчина</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
<!-- КОНЕЦ СЕТКИ -->
</div>

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

Пример


* {
  box-sizing: border-box;
}

body {
  background-color: #f1f1f1;
  padding: 20px;
  font-family: Arial;
}

/* Устанавливаем веб-сайт по центру */
.main {
  max-width: 1000px;
  margin: auto;
}

h1 {
  font-size: 50px;
  word-break: break-all;
}

.row {
  margin: 8px -16px;
}

/* Добавляем отступы между каждой колонкой (если хотите) */
.row,
.row > .column {
  padding: 8px;
}

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

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

/* Контент */
.content {
  background-color: white;
  padding: 10px;
}

/* Класс "show" добавляется для отфильтрованных элементов */
.show {
  display: block;
}

/* Стили кнопок */
.btn {
  border: none;
  outline: none;
  padding: 12px 16px;
  background-color: white;
  cursor: pointer;
}

/* Серый фон при наведении на кнопку */
.btn:hover {
  background-color: #ddd;
}

/* Черный фон у активной кнопке */
.btn.active {
  background-color: #666;
   color: white;
}

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

Пример


filterSelection("all") // Запускаем функцию и показываем все колонки
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("column");
  if (c == "all") c = "";
  // Добавляем класс "show" к отфильтрованным элементам,
  // и убираем класс "show" у не выбранных элементов
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}

// Показываем отфильтрованные элементы
function w3AddClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    if (arr1.indexOf(arr2[i]) == -1) {
      element.className += " " + arr2[i];
    }
  }
}

// Скрываем не выбранные элементы
function w3RemoveClass(element, name) {
  var i, arr1, arr2;
  arr1 = element.className.split(" ");
  arr2 = name.split(" ");
  for (i = 0; i < arr2.length; i++) {
    while (arr1.indexOf(arr2[i]) > -1) {
      arr1.splice(arr1.indexOf(arr2[i]), 1);
    }
  }
  element.className = arr1.join(" ");
}

// Добавляем класс "active" к активной кнопке (подсвечиваем ее)
var btnContainer = document.getElementById("myBtnContainer");
var btns = btnContainer.getElementsByClassName("btn");
for (var i = 0; i < btns.length; i++) {
  btns[i].addEventListener("click", function(){
    var current = document.getElementsByClassName("active");
    current[0].className = current[0].className.replace(" active", "");
    this.className += " active";
  });
}

Попробовать самому »