Como criar: Galeria de portfólio com filtro

Aprenda a criar uma galeria de portfólio com filtro.

Meu portfólio

Clique no botão para filtrar uma categoria:

Montanhas
Montanhas

Lorem ipsum dolor..

Aurora
Luzes

Lorem ipsum dolor..

Natureza
Floresta

Lorem ipsum dolor..

Carro
Clássico

Lorem ipsum dolor..

Carro
Rápido

Lorem ipsum dolor..

Carro
Retro

Lorem ipsum dolor..

Carro
Menina

Lorem ipsum dolor..

Carro
Mulher

Lorem ipsum dolor..

Carro
Homem

Lorem ipsum dolor..

Try it yourself

Como criar um site de portfólio

Primeiro passo - Adicionar HTML:

<h2>PORTFÓLIO</h2>
<div id="myBtnContainer">
  <button class="btn active" onclick="filterSelection('all')">Mostrar tudo</button>
  <button class="btn" onclick="filterSelection('nature')">Natureza</button>
  <button class="btn" onclick="filterSelection('cars')">Carros</button>
  <button class="btn" onclick="filterSelection('people')">Pessoas</button>
</div>
<!-- Galeria de portfólio em grade -->
<div class="row">
  <div class="column nature">
    <div class="content">
      <img src="/w3images/mountains.jpg" alt="Montanhas" style="width:100%">
      <h4>Montanhas</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/lights.jpg" alt="Luzes" style="width:100%">
      <h4>Luzes</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column nature">
    <div class="content">
      <img src="/w3images/nature.jpg" alt="Natureza" style="width:100%">
      <h4>Floresta</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars1.jpg" alt="Carro" 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="Carro" style="width:100%">
      <h4>Rápido</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column cars">
    <div class="content">
      <img src="/w3images/cars3.jpg" alt="Carro" style="width:100%">
      <h4>Clássico</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people1.jpg" alt="Pessoas" style="width:100%">
      <h4>Mulher</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people2.jpg" alt="Pessoas" style="width:100%">
      <h4>Homem</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
  <div class="column people">
    <div class="content">
      <img src="/w3images/people3.jpg" alt="Pessoas" style="width:100%">
      <h4>Mulher</h4>
      <p>Lorem ipsum dolor..</p>
    </div>
  </div>
<!-- Fim da grade -->
</div>

Segundo passo - Adicionar CSS:

* {
  box-sizing: border-box;
}
body {
  background-color: #f1f1f1;
  padding: 20px;
  padding: 20px;
}
font-family: Arial;
/* Centralizar o site */
  .main {
  max-width: 1000px;
}
margin: auto;
  h1 {
  font-size: 50px;
}
word-break: break-all;
  margin: 8px -16px;
}
/* Adicionar margem interna entre colunas (se necessário) */
.row {
.row > .column {
  padding: 8px;
}
/* Criar três colunas adjacentes e iguais */
.column {
  float: left;
  width: 33.33%;
  display: none; /* Ocultar colunas por padrão */
}
/* Remover flutuação após a linha */
.row:after {
  content: "";
  display: table;
  clear: both;
}
/* Conteúdo */
.content {
  background-color: white;
  padding: 10px;
}
/* A classe "show" é adicionada aos elementos filtrados */
.show {
  display: block;
}
/* Definir estilo do botão */
.btn {
  border: none;
  outline: none;
  padding: 12px 16px;
  background-color: white;
  cursor: pointer;
}
/* Adicionar cor de fundo cinza ao passar o mouse sobre o botão */
.btn:hover {
  background-color: #ddd;
}
/* Adicionar cor de fundo escura à botoão ativo */
.btn.active {
  background-color: #666;
   color: white;
}

Terceiro passo - Adicionar JavaScript:

filterSelection("all") // Executar a função e mostrar todas as colunas
function filterSelection(c) {
  var x, i;
  x = document.getElementsByClassName("column");
  if (c == "all") c = "";
  // Adicionar a classe "show" (display:block) aos elementos filtrados e remover a classe "show" dos elementos não selecionados
  for (i = 0; i < x.length; i++) {
    w3RemoveClass(x[i], "show");
    if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
  }
}
// Show filtered elements
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];
    }
  }
}
// Hide unselected elements
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(" ");
}
// Add the active class to the current button (highlight it)
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";
  });
}

Try it yourself

Related pages

Tutorial:Como criar a biblioteca de portfólio de obras