Portfolio Setup
Portfolio Setup
The portfolio is a filterable, isotope powered grid of project items. Each item is a .portfolio-item inside a #portfolio container, with an optional filter list above it. This page covers the base setup, item markup, and filtering.
Structure
The grid container carries #portfolio, the .portfolio class, the Bootstrap .row and Canvas .grid-container classes, gutter helpers, and a data-layout attribute for the isotope layout mode.
<div id="portfolio" class="portfolio row grid-container gutter-20 gutter-sm-50" data-layout="fitRows">
<!-- Portfolio Item -->
<article class="portfolio-item col-12 pf-media pf-icons">
<div class="grid-inner row g-0">
<!-- Image -->
<div class="portfolio-image">
<a href="portfolio-single.html">
<img src="images/portfolio/1/1.jpg" alt="Open Imagination">
</a>
<div class="bg-overlay">
<div class="bg-overlay-content dark" data-hover-animate="fadeIn">
<a href="images/portfolio/full/1.jpg" class="overlay-trigger-icon bg-light text-dark" data-lightbox="image" title="Image"><i class="uil uil-plus"></i></a>
<a href="portfolio-single.html" class="overlay-trigger-icon bg-light text-dark"><i class="uil uil-ellipsis-h"></i></a>
</div>
<div class="bg-overlay-bg dark" data-hover-animate="fadeIn"></div>
</div>
</div>
<!-- Description -->
<div class="portfolio-desc">
<h3><a href="portfolio-single.html">Open Imagination</a></h3>
<span><a href="#">Media</a>, <a href="#">Icons</a></span>
</div>
</div>
</article>
</div><!-- #portfolio end -->Filter
Add a .grid-filter list above the grid and point it at the grid with data-container. Each filter link uses data-filter to select a category class. The active filter is marked .activeFilter, and data-filter="*" shows everything.
<ul class="grid-filter" data-container="#portfolio">
<li class="activeFilter"><a href="#" data-filter="*">Show All</a></li>
<li><a href="#" data-filter=".pf-icons">Icons</a></li>
<li><a href="#" data-filter=".pf-illustrations">Illustrations</a></li>
<li><a href="#" data-filter=".pf-uielements">UI Elements</a></li>
<li><a href="#" data-filter=".pf-media">Media</a></li>
<li><a href="#" data-filter=".pf-graphics">Graphics</a></li>
</ul><!-- .grid-filter end -->Wrap the filter in .grid-filter-wrap when you need a styled container. Filter style variants are available:
<div class="grid-filter-wrap">
<ul class="grid-filter style-2 mb-0" data-container="#portfolio">
<li class="activeFilter"><a href="#" data-filter="*">All</a></li>
<li><a href="#" data-filter=".pf-icons">Icons</a></li>
</ul>
</div>Categories
Each .portfolio-item gets one or more category classes prefixed pf- (for example pf-media, pf-icons). These must match the data-filter selectors in the filter list.
<article class="portfolio-item col-lg-3 col-md-4 col-sm-6 col-12 pf-media pf-icons">
...
</article>Options
data-layouton#portfolio: isotope layout mode, for examplefitRowsormasonry..gutter-20,.gutter-sm-50: column gutter sizes at different breakpoints..grid-inner: inner wrapper of each item, often paired with.row .g-0for edge to edge image and description..portfolio-image: holds the thumbnail and the hover.bg-overlay..portfolio-desc: title<h3>and category<span>block..grid-filterwithdata-container: the filter list bound to a specific grid..style-2,.style-3: filter appearance variants.
Tips
- Column classes on each
.portfolio-item(likecol-lg-3 col-md-4) control how many items appear per row. - The
pf-*classes on items must exactly match thedata-filterselectors, otherwise a filter shows nothing. - Use
data-layout="masonry"for uneven heights, orfitRowsfor a clean grid of equal rows. - The hover overlay uses
.bg-overlaywith.overlay-trigger-iconlinks; adddata-lightbox="image"to open the full image in a lightbox.
How to Use
- 1
Setting up Portfolio Filter:
<div class="grid-filter-wrap"> <!-- Portfolio Filter ============================================= --> <ul class="grid-filter" data-container="#portfolio"> <li class="activeFilter"><a href="#" data-filter="*">Show All</a></li> <li><a href="#" data-filter=".pf-icons">Icons</a></li> <li><a href="#" data-filter=".pf-illustrations">Illustrations</a></li> <li><a href="#" data-filter=".pf-uielements">UI Elements</a></li> <li><a href="#" data-filter=".pf-media">Media</a></li> <li><a href="#" data-filter=".pf-graphics">Graphics</a></li> </ul><!-- .grid-filter end --> <div class="grid-shuffle rounded" data-container="#portfolio"> <i class="icon-random"></i> </div> </div> - 2
Setting up Portfolio Items:
<!-- Portfolio Items ============================================= --> <div id="portfolio" class="portfolio row grid-container gutter-20" data-layout="fitRows"> <!-- Portfolio Item: Start --> <article class="portfolio-item col-lg-3 col-md-4 col-sm-6 col-12 pf-media pf-icons"> <!-- Grid Inner: Start --> <div class="grid-inner"> <!-- Image: Start --> <div class="portfolio-image"> <a href="portfolio-single.html"> <img src="images/portfolio/4/1.jpg" alt="Open Imagination"> </a> <!-- Overlay: Start --> <div class="bg-overlay"> <div class="bg-overlay-content dark" data-hover-animate="fadeIn"> <a href="images/portfolio/full/1.jpg" class="overlay-trigger-icon bg-light text-dark" data-hover-animate="fadeInDownSmall" data-hover-animate-out="fadeOutUpSmall" data-hover-speed="350" data-lightbox="image" title="Image"><i class="icon-line-plus"></i></a> <a href="portfolio-single.html" class="overlay-trigger-icon bg-light text-dark" data-hover-animate="fadeInDownSmall" data-hover-animate-out="fadeOutUpSmall" data-hover-speed="350"><i class="icon-line-ellipsis"></i></a> </div> <div class="bg-overlay-bg dark" data-hover-animate="fadeIn"></div> </div> <!-- Overlay: End --> </div> <!-- Image: End --> <!-- Decription: Start --> <div class="portfolio-desc"> <h3><a href="portfolio-single.html">Open Imagination</a></h3> <span><a href="#">Media</a>, <a href="#">Icons</a></span> </div> <!-- Description: End --> </div> <!-- Grid Inner: End --> </article> <!-- Portfolio Item: End --> ... </div>
