Travel
HTML
<nav class="flex-nav">
<div class="container">
<div class="grid">
<div class="column-xs-9 column-md-8">
<p id="logo">Japan<span id="highlight">.</span></p>
</div>
<div class="column-xs-3 column-md-4">
<a href="#" class="toggle-nav">Menu <i class="ion-navicon-round"></i></a>
<ul>
<li><a href="#">About</a></li>
<li><a href="#">Discover</a></li>
<li><a href="#">Plan Your Trip</a></li>
</ul>
</div>
</div>
</div>
</nav>
<main class="intro-section">
<div class="container">
<div class="grid">
<div class="column-xs-12">
<ul class="slider">
<li class="slider-item active">
<div class="grid vertical">
<div class="column-xs-12 column-md-2 hide-mobile">
<div class="intro">
<a href="#">
<h1 class="title"><span class="underline">Explore Tokyo</span></h1>
</a>
</div>
</div>
<div class="column-xs-12 column-md-10">
<div class="image-holder">
<img class="test" src="https://source.unsplash.com/cddaZDt6uRw">
</div>
<div class="grid">
<div class="column-xs-12 column-md-9">
<div class="intro show-mobile">
<a href="#">
<h1 class="title"><span class="underline">Explore Tokyo</span></h1>
</a>
</div>
<p class="description">Tokyo, Japan’s busy capital, mixes the ultramodern and the traditional, from neon-lit skyscrapers to historic temples.</p>
</div>
</div>
</div>
</div>
</li>
<li class="slider-item">
<div class="grid vertical">
<div class="column-xs-12 column-md-2 hide-mobile">
<div class="intro">
<a href="#">
<h1 class="title"><span class="underline">Explore Kyoto</span></h1>
</a>
</div>
</div>
<div class="column-xs-12 column-md-10">
<div class="image-holder">
<img src="https://source.unsplash.com/Pz3EHf-KJfc">
</div>
<div class="grid">
<div class="column-xs-12 column-md-9">
<div class="intro show-mobile">
<a href="#">
<h1 class="title"><span class="underline">Explore Kyoto</span></h1>
</a>
</div>
<p class="description">Kyoto is famous for its numerous classical Buddhist temples, gardens, imperial palaces, Shinto shrines and traditional wooden houses.</p>
</div>
</div>
</div>
</div>
</li>
<li class="slider-item">
<div class="grid vertical">
<div class="column-xs-12 column-md-2 hide-mobile">
<div class="intro">
<a href="#">
<h1 class="title"><span class="underline">Explore Osaka</span></h1>
</a>
</div>
</div>
<div class="column-xs-12 column-md-10">
<div class="image-holder">
<img src="https://source.unsplash.com/peYW3VwICpE">
</div>
<div class="grid">
<div class="column-xs-12 column-md-9">
<div class="intro show-mobile">
<a href="#">
<h1 class="title"><span class="underline">Explore Osaka</span></h1>
</a>
</div>
<p class="description">Osaka is a large port city and commercial center known for its modern architecture, nightlife and hearty street food.</p>
</div>
</div>
</div>
</div>
</li>
<li class="slider-item">
<div class="grid vertical">
<div class="column-xs-12 column-md-2 hide-mobile">
<div class="intro">
<a href="#">
<h1 class="title"><span class="underline">Explore Hokkaido</span></h1>
</a>
</div>
</div>
<div class="column-xs-12 column-md-10">
<div class="image-holder">
<img src="https://source.unsplash.com/VmeOZQjTVGE">
</div>
<div class="grid">
<div class="column-xs-12 column-md-9">
<div class="intro show-mobile">
<a href="#">
<h1 class="title"><span class="underline">Explore Hokkaido</span></h1>
</a>
</div>
<p class="description">Hokkaido, the northernmost of Japan’s main islands, is known for its volcanoes, natural hot springs ("onsen") and ski areas.</p>
</div>
</div>
</div>
</div>
</li>
</ul>
<div class="grid">
<div class="column-xs-12">
<div class="controls">
<a class="previous">
<i class="ion-ios-arrow-thin-left"></i>
</a>
<a class="next">
<i class="ion-ios-arrow-thin-right"></i>
</a>
</div>
</div>
</div>
</div>
</div>
</main>
SCSS
@import url('https://fonts.googleapis.com/css?family=Barlow:400,500,700');
$white: #fff;
$black: #232323;
$gray: #8d8d8d;
$red: #e83f43;
* {
box-sizing: border-box;
&::before, &::after {
box-sizing: border-box;
}
}
body {
font-family: 'Barlow', sans-serif;
font-size: 1.125rem;
font-weight: 400;
line-height: 1.6;
color: $gray;
background: $white;
text-rendering: optimizeLegibility;
overflow-x: hidden;
}
a {
color: $gray;
text-decoration: none;
&:hover {
color: $black;
}
}
nav {
position: relative;
z-index: 2;
padding: 1.25rem 0 1.25rem 0;
ul {
line-height: 2.2;
display: flex;
justify-content: flex-start;
li {
margin: 0.325rem 0;
}
}
}
#logo {
color: $black;
font-weight: 700;
font-size: 1.125rem;
}
#highlight {
color: $red;
}
img {
width: 100%;
height: 43vh;
object-fit: cover;
}
@keyframes scaleX {
0% {
transform: scaleX(0);
}
100% {
transform: scaleX(1);
}
}
.vertical {
flex-direction: column;
justify-content: center;
align-items: center;
}
.intro {
position: relative;
z-index: 2;
opacity: 0;
animation: fadeIn 0.8s 0.4s ease forwards;
.title {
display: inline-block;
font-size: 2rem;
font-weight: 500;
line-height: 1.1;
text-decoration: underline;
color: $red;
.underline {
color: $black;
}
}
}
.description {
position: relative;
z-index: 1;
margin: 1rem 0 1.5rem 0;
font-size: 1rem;
opacity: 0;
animation: fadeIn 0.8s 0.6s ease forwards;
}
.slider-item {
display: none;
&.active {
display: block;
.hide-mobile {
display: none;
}
.show-mobile {
display: block;
margin: 1rem 0;
}
}
}
.controls {
position: relative;
z-index: 1;
display: flex;
justify-content: flex-end;
padding: 0.25rem 0 0.25rem 0;
.previous {
border: 1px solid $black;
&:hover i {
transform: scale(1.5);
}
}
.next {
border-top: 1px solid $black;
border-right: 1px solid $black;
border-bottom: 1px solid $black;
&:hover i {
transform: scale(1.5);
}
}
}
.previous, .next {
display: flex;
align-content: center;
justify-content: center;
flex-basis: 15%;
font-size: 2rem;
color: $black;
i {
transition: all 0.1s ease;
}
}
.active .image-holder::before {
position: absolute;
content: '';
z-index: 1;
display: block;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: $white;
transform-origin: 100% 50%;
animation: revealRight 1s cubic-bezier(0.23,1,0.75,1) forwards;
}
@keyframes revealRight {
0% {
transform: scaleX(1);
}
100% {
transform: scaleX(0);
}
}
@keyframes fadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fadeInLeft {
0% {
opacity: 0;
transform: translateX(20%);
}
100% {
opacity: 1;
transform: translate(0);
}
}
.toggle-nav {
display: flex;
justify-content: flex-end;
font-size: 1rem;
line-height: 1.9;
i {
font-size: 1.5rem;
line-height: 1.3;
margin: 0 0 0 0.5rem;
}
}
.flex-nav ul {
position: absolute;
z-index: 1;
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-wrap: wrap;
flex-direction: column;
display: none;
width: 100%;
left: 0;
padding: 1rem;
background: $white;
text-align: center;
&.active {
display: flex;
}
}
@media (min-width: $md) {
nav ul {
justify-content: flex-end;
}
#logo {
font-size: 1.25rem;
}
.controls {
padding: 1.75rem 0 1.75rem 0;
}
.intro {
animation: fadeInLeft 0.8s 0.4s ease forwards;
.title {
font-size: 4.25rem;
padding: 2.5rem 2.5rem 3rem 2.5rem;
background: $white;
}
}
img {
height: 60vh;
}
.description {
font-size: 1.25rem;
margin: 1rem 0 0 0;
}
.previous, .next {
flex-basis: 8.33%;
}
.slider-item.active .hide-mobile {
display: block;
}
.slider-item.active .show-mobile {
display: none;
}
.toggle-nav {
display: none;
}
.flex-nav ul {
display: flex;
flex-direction: row;
position: relative;
padding: 0;
justify-content: flex-end;
}
nav {
padding: 1.75rem 0 1.75rem 0;
ul {
line-height: 2.2;
display: flex;
justify-content: flex-start;
li {
font-size: 1rem;
text-transform: uppercase;
margin: 0 2rem 0 0;
&:nth-child(3) {
margin: 0;
}
}
}
}
}
JAVASCRIPT
const items = document.querySelectorAll('.slider-item');
const itemCount = items.length;
const nextItem = document.querySelector('.next');
const previousItem = document.querySelector('.previous');
const navItem = document.querySelector('a.toggle-nav');
let count = 0;
function showNextItem() {
items[count].classList.remove('active');
if(count < itemCount - 1) {
count++;
} else {
count = 0;
}
items[count].classList.add('active');
console.log(count);
}
function showPreviousItem() {
items[count].classList.remove('active');
if(count > 0) {
count--;
} else {
count = itemCount - 1;
}
items[count].classList.add('active');
// Check if working...
console.log(count);
}
function toggleNavigation(){
this.nextElementSibling.classList.toggle('active');
}
nextItem.addEventListener('click', showNextItem);
previousItem.addEventListener('click', showPreviousItem);
navItem.addEventListener('click', toggleNavigation);