<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
<header class="masthead">
<h1 class="site-title">Interactive Grid Gallery</h1>
<div class="intro">
<p>Interactive gallery using CSS Grid for both overall layout and individual card layout. This layout was inspired by the <a href="https://twitter.com/i/moments" target="_blank" rel="nofollow">Twitter Moments</a> page and showcases how CSS Grid allows for advanced responsive card-based layouts at multiple levels.</p>
<p>This example is based on one of the exercises from my upcoming <a href="https://lnkd.in/mor10" target="_blank" rel="nofollow">LinkedIn Learning</a> and <a href="https://lynda.com/mor10" target="_blank" rel="nofollow">Lynda.com</a> course "Advanced Layouts with CSS Grid."
</div>
</header><!-- .masthead -->
<main id="content" class="main-area">
<ul class="cards">
<li class="card-item double">
<a href="https://unsplash.com/@andozo?photo=crVO0UMdoVU" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/crVO0UMdoVU/600x600" alt="Beach. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Beach</h3>
<div class="location">Mølen, Nevlunghamn, Norway</div>
<p>This grid item spans one column and three rows to create focus. This is achieved by setting <code>grid-column: span 3;</code>.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=xkMArBuwK44" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/xkMArBuwK44/600x600" alt="Pyramid. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Louvre Museum Pyramid</h3>
<div class="location">Paris, France</div>
<p>This grid item spans one column and one row. The card contains its own grid which lays out the contents for consistent display.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=w3lQVmuK8fw" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/w3lQVmuK8fw/600x600" alt="Fox. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">What Does the Fox Say?</h3>
<div class="location">Hovedøya, Norway</div>
<p>I was surprised to learn there are foxes on Hovedøya. Then again, there are rabbits, so it makes sense.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=lr81rOg-gys" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/lr81rOg-gys/600x600" alt="Owl. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Brown Barn Owl</h3>
<div class="location">Bamble, Norway</div>
<p>Unlike the fox, everyone knows what the owl says: "Did you do that?"</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=KUfkX6gVwBU" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/KUfkX6gVwBU/600x600" alt="Oslo. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Little Oslo Is Its Own Planet</h3>
<div class="location">Oslo, Norway</div>
<p>All the streets are different nations, each block a continent.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item double">
<a href="https://unsplash.com/@andozo?photo=8hRYTck6LBQ" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/8hRYTck6LBQ/600x600" alt="Sunset. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Sunset Lake</h3>
<div class="location">Somewhere, Earth</div>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=i9FLJwYhVQs" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/i9FLJwYhVQs/600x600" alt="Lake. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Bonfire by the Lake</h3>
<div class="location">Øyungen, Norway</div>
<p>Low light over a lake as three friends warm themselves by the fire.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=5d2ETacuSgw" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/5d2ETacuSgw/600x600" alt="Jump. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Jumping</h3>
<div class="location">Geiranger, Norway</div>
<p>Jumping behind a fence overlooking the Geiranger fjord.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=vMRMYoLQzwo" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/vMRMYoLQzwo/600x600" alt="Oslo Fjord. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">In the Bay</h3>
<div class="location">Oslo, Norway</div>
<p>Greeting the ships sailing in on a late summer evening.</p>
</figcaption>
</figure>
</a>
</li>
<li class="card-item">
<a href="https://unsplash.com/@andozo?photo=S2YssLw97l4" target="_blank" rel="nofollow">
<figure class="card">
<img src="https://source.unsplash.com/S2YssLw97l4/600x600" alt="Oslo Fjord. Photo by Andreas Rønningen">
<figcaption class="caption">
<h3 class="caption-title">Sparklers and Warm Souls</h3>
<div class="location">Porsgrunn, Norway</div>
<p>A couple enjoys the sparkles of warm friendship.</p>
</figcaption>
</figure>
</a>
</li>
</ul>
</main>
<footer class="colophon grid">
<aside>Content, layout, design: <a href="https://twitter.com/mor10" target="_blank" rel="nofollow">Morten Rand-Hendriksen</a>.</aside>
<aside>All photos: <a href="https://unsplash.com/@andozo" target="_blank" rel="nofollow">Andreas Rønningen</a>.</aside>
</footer>
/*--------------------------------------------------------------
Accessibility
--------------------------------------------------------------*/
/* Text meant only for screen readers */
.screen-reader-text {
clip: rect(1px, 1px, 1px, 1px);
position: absolute !important;
height: 1px;
width: 1px;
overflow: hidden;
}
.screen-reader-text:hover,
.screen-reader-text:active,
.screen-reader-text:focus {
background-color: #f1f1f1;
border-radius: 3px;
box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
clip: auto !important;
color: #21759b;
display: block;
font-size: 14px;
font-weight: bold;
height: auto;
left: 5px;
line-height: normal;
padding: 15px 23px 14px;
text-decoration: none;
top: 5px;
width: auto;
z-index: 100000; /* Above WP toolbar */
}
/*--------------------------------------------------------------
General styling
--------------------------------------------------------------*/
body {
margin: 0;
font-family: 'Helvetica', 'Arial', sans-serif;
font-size: 100%;
font-size: 1.2em;
}
img {
display: block;
border: 0;
width: 100%;
height: auto;
}
code {
font: 15px Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
font-weight: bold;
}
/* Header */
.masthead {
text-align: center;
border-bottom: 1px solid hsl(0, 0%, 90%);
}
.intro {
margin: 0 auto;
padding: 1em 1em 2em;
max-width: 50em;
font-size: 90%;
text-align: left;
line-height: 1.4em;
columns: 2;
column-gap: 2em;
}
.intro p {
margin: 0 0 1em;
}
/* Colophon section */
.colophon {
padding: 2em;
background: hsl(0, 0%, 10%);
color: white;
font-size: 90%;
text-align: center;
line-height: 1.8em;
}
.colophon a {
color: white;
}
.colophon a:hover,
.colophon a:focus {
border-bottom: 1px solid white;
}
/*--------------------------------------------------------------
Cards:
--------------------------------------------------------------*/
.cards {
max-width: 25em;
margin: 1em auto;
padding: 0;
list-style-type: none;
}
.cards a {
display: block;
margin-bottom: 1em;
text-decoration: none;
}
.caption {
padding: 1em;
font-size: 90%;
color: black;
}
.caption-title {
margin: 0;
font-size: 1.4em;
line-height: 1em;
}
.location {
padding: .5em 0;
color: hsl(0, 0%, 40%);
}
.caption p {
margin-top: .5em;
margin-bottom: 0;
line-height: 1.3em;
}
.cards a:focus .caption,
.cards a:hover .caption {
background: hsl(0, 0%, 97%);
}
/*--------------------------------------------------------------
CSS Grid layout for wider screens, when browser supports grid:
--------------------------------------------------------------*/
@supports (grid-area: auto) {
@media screen and (min-width: 27em) {
.cards {
margin: 0 auto;
padding: 1em;
}
.card-item,
.card-item a {
display: flex;
align-items: stretch;
width: 100%;
}
.cards a:focus,
.cards a:hover {
outline: 1px solid hsl(0, 0%, 80%);
}
.cards a:focus .caption,
.cards a:hover .caption {
background: white;
}
.card {
margin: .5em;
display: grid;
grid-template-columns: 8em auto;
overflow: hidden;
}
.card img {
/* height: 100%;
width: auto; */
}
.caption {
background: white;
}
}
@media screen and (min-width: 62em) {
.cards {
max-width: none;
margin: 1em 0;
padding: 0 1em;
display: grid;
grid-template-columns: repeat(auto-fit, 25em);
grid-gap: 1em;
justify-content: center;
}
.double {
grid-row: span 3;
}
.double .card {
display: block;
}
.double img {
height: calc( (100% / 3) * 2 + .5em);
}
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.