Hoe te maken: Portfolio galerij met filterfunctie

Leer hoe je een filterende portfolio galerij kunt maken.

Mijn portfolio

Klik op de knop om een categorie te filteren:

Bergen
Bergen

Lorem ipsum dolor..

Aurora
Lichten

Lorem ipsum dolor..

Natuur
Woud

Lorem ipsum dolor..

Auto
Klassiek

Lorem ipsum dolor..

Auto
Snel

Lorem ipsum dolor..

Auto
Retro

Lorem ipsum dolor..

Auto
Meisje

Lorem ipsum dolor..

Auto
Vrouw

Lorem ipsum dolor..

Auto
Man

Lorem ipsum dolor..

Probeer het zelf

Hoe een portfolio website te maken

Stap 1 - Voeg HTML toe:

<h2>PORTFOLIO</h2>
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')">Toon alles</button>
  <button class="btn" onclick="filterSelection('nature')">Natuur</button>
  <button class="btn" onclick="filterSelection('cars')">Auto</button>
  <button class="btn" onclick="filterSelection('people')">Mensen</button>
</div>
<!-- 作品集画廊网格 -->
<div class="row">
  <div class="column nature">
    <div class="content">
      <img src="/w3images/mountains.jpg" alt="Bergen" style="width:100%">
      <h4>Bergen</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/lights.jpg" alt="Verlichting" style="width:100%">
      <h4>Lichten</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/nature.jpg" alt="Natuur" style="width:100%">
      <h4>Woud</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars1.jpg" alt="Auto" 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="Auto" style="width:100%">
      <h4>Snel</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars3.jpg" alt="Auto" 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="Mensen" style="width:100%">
      <h4>Meisje</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people2.jpg" alt="Mensen" 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="Mensen" style="width:100%">
      <h4>Vrouw</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
<!-- Einde raster -->
</div>

Tweede stap - Voeg CSS toe:

* {
  box-sizing: border-box;
}
body {
  background-color: #f1f1f1;
  padding: 20px;
  font-family: Arial;
}
/* Centreer de website */
.main {
  max-width: 1000px;
  margin: auto;
}
h1 {
  font-size: 50px;
  word-break: break-all;
}
.row {
  margin: 8px -16px;
}
/* Voeg interlineair ruimte tussen kolommen toe (indien nodig) */
.row,
.row > .column {
  padding: 8px;
}
/* Maak drie naast elkaar liggende gelijke breedte kolommen */
.column {
  float: left;
  width: 33.33%;
  display: none; /* Standaard verbergen van kolommen */
}
/* Wis de float achter de rij */
.row:after {
  content: "";
  display: table;
  clear: both;
}
/* Inhoud */
.content {
  background-color: white;
  padding: 10px;
}
/* De "show"-klasse wordt toegevoegd aan de gefilterde elementen */
.show {
  display: block;
}
/* Stel de stijl van de knop in */
.btn {
  border: none;
  outline: none;
  padding: 12px 16px;
  background-color: white;
  cursor: pointer;
}
/* Voeg een grijs achtergrondkleur toe bij muisovergang */
.btn:hover {
  background-color: #ddd;
}
/* Voeg een donkere achtergrondkleur toe aan de actieve knop */
.btn.active {
  background-color: #666;
   color: white;
}

Derde stap - Voeg JavaScript toe:

filterSelection("all") // Voer de functie uit en toon alle kolommen
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("column");
  if (c == "all") c = "";
  // Voeg de "show"-klasse (display:block) toe aan de gefilterde elementen en verwijder de "show"-klasse van de ongekozen elementen
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}
// Toon de gefilterde elementen
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];
    }
  }
}
// Verberg de ongekozen elementen
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(" ");
}
// Voeg de actieve klasse toe aan de huidige knop (het highlighten ervan)
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";
  });
}

Probeer het zelf

Gerelateerde pagina's

Handleiding:Hoe te maken: portfolio bibliotheek