Как создать: галерею портфолио с фильтрацией

Узнайте, как создать галерею портфолио с фильтрацией.

Мое портфолио

Нажмите кнопку, чтобы фильтровать категорию:

Горы
Горы

Lorem ipsum dolor..

Аурора
Свет

Lorem ipsum dolor..

Природа
Лес

Lorem ipsum dolor..

Автомобиль
Классический

Lorem ipsum dolor..

Автомобиль
Быстрый

Lorem ipsum dolor..

Автомобиль
Ретро

Lorem ipsum dolor..

Автомобиль
Девочка

Lorem ipsum dolor..

Автомобиль
Женщина

Lorem ipsum dolor..

Автомобиль
Мужчина

Lorem ipsum dolor..

Попробуйте сами

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

Шаг 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="/w3images/mountains.jpg" alt="Mountains" style="width:100%">
      <h4>Mountains</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/lights.jpg" alt="Lights" style="width:100%">
      <h4>Lights</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/nature.jpg" alt="Nature" style="width:100%">
      <h4>Forest</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars1.jpg" alt="Car" style="width:100%">
      <h4>Retro</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars2.jpg" alt="Car" style="width:100%">
      <h4>Fast</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars3.jpg" alt="Car" style="width:100%">
      <h4>Classic</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people1.jpg" alt="People" style="width:100%">
      <h4>Girl</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people2.jpg" alt="People" style="width:100%">
      <h4>Man</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people3.jpg" alt="People" style="width:100%">
      <h4>Woman</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
<!-- Конец сетки -->
</div>

Шаг 2 - Добавить CSS:

* {
  box-sizing: border-box;
}
body {
  background-color: #f1f1f1;
  padding: 20px;
  padding: 20px;
}
font-family: Arial;
/* Центрировать сайт */
  .main {
  max-width: 1000px;
}
margin: auto;
  h1 {
  font-size: 50px;
}
word-break: break-all;
  margin: 8px -16px;
}
/* Добавить внутренний отступ между колонками (если необходимо) */
.row {
.row > .column {
  padding: 8px;
}
/* Создать три相邻ские колонки с одинаковой шириной */
.column {
  float: left;
  width: 33.33%;
  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;
}

Третий шаг - добавить JavaScript:

filterSelection("all") // Выполнить функцию и показать все столбцы
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("column");
  if (c == "all") c = "";
  // Добавить класс "show" (display:block) к фильтрованным элементам и удалить класс "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(" ");
}
// Добавить класс активности к текущей кнопке (выделить её)
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";
  });
}

Попробуйте сами

Соответствующие страницы

Учебное пособие:Как создать галерею портфолио