<nav id="c-circle-nav" class="c-circle-nav">
<button id="c-circle-nav__toggle" class="c-circle-nav__toggle">
<span>Toggle</span>
</button>
<ul class="c-circle-nav__items">
<li class="c-circle-nav__item">
<a href="#" class="c-circle-nav__link">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48cGF0aCBkPSJNNjkuOTQgNTEuMDZjLS4xNDcuMTc1LS4zODYuMjk3LS42MjUuMzIzaC0uMDg2Yy0uMjQgMC0uNDUtLjA2LS42My0uMjA3TDQ3Ljk5OCAzNGwtMjAuNiAxNy4xNzZjLS4yMS4xNDgtLjQ0OC4yNC0uNzE1LjIwNy0uMjM3LS4wMjYtLjQ3NS0uMTQ4LS42MjctLjMyNEwyNC4yMSA0OC44NWMtLjMyNy0uMzg1LS4yNjctMS4wMS4xMi0xLjM0bDIxLjQwMy0xNy44M2MxLjI1NC0xLjA0MyAzLjI3Ni0xLjA0MyA0LjUyNyAwbDcuMjY2IDYuMDc0VjI5Ljk1YzAtLjUzNy40MTgtLjk1My45NS0uOTUzaDUuNzE2Yy41NCAwIC45NTYuNDE3Ljk1Ni45NTN2MTIuMTQ2bDYuNTIgNS40MThjLjM5LjMyOC40NDMuOTU1LjEyIDEuMzRsLTEuODQ4IDIuMjA1ek02NS4xNDggNjUuMmMwIDEuMDQtLjg2NSAxLjktMS45MDYgMS45SDUxLjgwOFY1NS42NzJoLTcuNjJ2MTEuNDNoLTExLjQzYy0xLjA0MyAwLTEuOTA2LS44NjItMS45MDYtMS45VjUwLjkwNmMwLS4wNTUuMDMtLjExMy4wMy0uMThsMTcuMTE2LTE0LjExIDE3LjExOCAxNC4xMWMuMDMyLjA2Ni4wMzIuMTI1LjAzMi4xOFY2NS4yeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg=="
alt="">
</a>
</li>
<li class="c-circle-nav__item">
<a href="#" class="c-circle-nav__link">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48ZyBmaWxsPSIjZmZmIj48cGF0aCBkPSJNNzAuMTI1IDM1LjQ3NWMtMS4yNS0xLjI1LTIuNzU4LTEuODc1LTQuNTI0LTEuODc1SDYwbC0xLjI3NC0zLjRjLS4zMTYtLjgxNy0uODk2LTEuNTItMS43MzctMi4xMTNzLTEuNzA3LS44ODctMi41OS0uODg3SDQxLjZjLS44ODQgMC0xLjc0Ni4yOTYtMi41ODguODg4cy0xLjQyIDEuMjk2LTEuNzM3IDIuMTEzTDM2IDMzLjZoLTUuNmMtMS43NjcgMC0zLjI3NS42MjUtNC41MjUgMS44NzVDMjQuNjI1IDM2LjcyNSAyNCAzOC4yMzMgMjQgNDB2MjIuNGMwIDEuNzY3LjYyNSAzLjI3NSAxLjg3NSA0LjUyNCAxLjI1IDEuMjUgMi43NTggMS44NzYgNC41MjUgMS44NzZoMzUuMmMxLjc2OCAwIDMuMjc1LS42MjUgNC41MjUtMS44NzZDNzEuMzc1IDY1LjY3NiA3MiA2NC4xNjcgNzIgNjIuNFY0MGMwLTEuNzY3LS42MjUtMy4yNzUtMS44NzUtNC41MjV6TTU1LjkxMyA1OS4xMTNDNTMuNzIgNjEuMzA1IDUxLjA4MyA2Mi40IDQ4IDYyLjRzLTUuNzItMS4wOTYtNy45MTMtMy4yODdTMzYuOCA1NC4yODMgMzYuOCA1MS4yYzAtMy4wODMgMS4wOTUtNS43MiAzLjI4Ny03LjkxMlM0NC45MTcgNDAgNDggNDBzNS43MiAxLjA5NiA3LjkxMyAzLjI4OGMyLjE5IDIuMTkgMy4yODcgNC44MyAzLjI4NyA3LjkxM3MtMS4wOTYgNS43Mi0zLjI4NyA3LjkxM3pNNDggNDRjLTEuOTgzIDAtMy42OC43MDQtNS4wODggMi4xMTMtMS40MDggMS40MS0yLjExMiAzLjEwNC0yLjExMiA1LjA4OCAwIDEuOTgzLjcwNCAzLjY4IDIuMTEyIDUuMDg4QzQ0LjMyMiA1Ny42OTYgNDYuMDE3IDU4LjQgNDggNTguNHMzLjY4LS43MDQgNS4wODgtMi4xMTJDNTQuNDk2IDU0Ljg4IDU1LjIgNTMuMTg0IDU1LjIgNTEuMmMwLTEuOTgzLS43MDQtMy42OC0yLjExMi01LjA4N0M1MS42NzggNDQuNzAzIDQ5Ljk4MyA0NCA0OCA0NHoiLz48L2c+PC9zdmc+"
alt="">
</a>
</li>
<li class="c-circle-nav__item">
<a href="#" class="c-circle-nav__link">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNTkuMzEzIDI4LjY4OEM1Ni4xODYgMjUuNTYyIDUyLjQxNyAyNCA0Ny45OTggMjRjLTQuNDE2IDAtOC4xODcgMS41NjItMTEuMzEyIDQuNjg4QzMzLjU2IDMxLjgxMyAzMiAzNS41ODMgMzIgMzkuOTk4YzAgMi4yNzIuMzQyIDQuMTM3IDEuMDMgNS41OTdMNDQuNDM1IDY5Ljc4Yy4zMTMuNjkuNzk3IDEuMjMgMS40NTMgMS42My42NTcuMzkgMS4zNi41OSAyLjExLjU5Ljc1IDAgMS40NTUtLjIgMi4xMS0uNTkyLjY1Ny0uMzk4IDEuMTUtLjkzOCAxLjQ4My0xLjYzbDExLjM4LTI0LjE4M0M2My42NTUgNDQuMTM1IDY0IDQyLjI3IDY0IDQwYzAtNC40MTctMS41NjQtOC4xODctNC42ODctMTEuMzEyem0tNS42NiAxNi45NjhDNTIuMDk0IDQ3LjIxOCA1MC4yMSA0OCA0OCA0OGMtMi4yMDggMC00LjA5My0uNzgyLTUuNjU1LTIuMzQ0QzQwLjc4IDQ0LjA5NCA0MCA0Mi4yMDggNDAgNDBjMC0yLjIwOC43OC00LjA5NCAyLjM0My01LjY1NUM0My45MDUgMzIuNzggNDUuNzkgMzIgNDcuOTk4IDMyYzIuMjEgMCA0LjA5Ny43OCA1LjY1NiAyLjM0NSAxLjU2MiAxLjU2MiAyLjM0NCAzLjQ0NyAyLjM0NCA1LjY1NHMtLjc4IDQuMDk0LTIuMzQ0IDUuNjU2eiIvPjwvc3ZnPg=="
alt="">
</a>
</li>
<li class="c-circle-nav__item">
<a href="#" class="c-circle-nav__link">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNzAuOTM1IDY1LjcxbC05Ljg5Ni05Ljg5NGMyLjM4NS0zLjQ0IDMuNTc3LTcuMjc3IDMuNTc3LTExLjUwOCAwLTIuNzUtLjUzNi01LjM4LTEuNi03Ljg5LTEuMDctMi41MS0yLjUxNS00LjY3My00LjMzLTYuNDktMS44MTUtMS44MTctMy45OC0zLjI2LTYuNDktNC4zMjctMi41MS0xLjA2OC01LjE0LTEuNi03Ljg5LTEuNnMtNS4zOC41My03Ljg5IDEuNmMtMi41MSAxLjA2Ni00LjY3IDIuNTEtNi40OSA0LjMyNy0xLjgxNiAxLjgxNy0zLjI2IDMuOTgtNC4zMjYgNi40OS0xLjA2NyAyLjUxLTEuNiA1LjE0Mi0xLjYgNy44OTJzLjUzMyA1LjM3OCAxLjYwMiA3Ljg4N2MxLjA2NiAyLjUxIDIuNTEgNC42NzYgNC4zMjcgNi40OXMzLjk4IDMuMjYgNi40OSA0LjMzYzIuNTEgMS4wNjQgNS4xNCAxLjYgNy44OSAxLjYgNC4yMyAwIDguMDY4LTEuMTkgMTEuNTA3LTMuNTc3bDkuODk1IDkuODYyYy42OTIuNzMyIDEuNTU4IDEuMDk4IDIuNiAxLjA5OC45OTUgMCAxLjg2NC0uMzY1IDIuNTkyLTEuMDk4LjczLS43MjcgMS4wOTYtMS41OTYgMS4wOTYtMi41OTIgMC0xLjAyLS4zNTMtMS44ODUtMS4wNjUtMi42ek01My40NCA1My40NGMtMi41MyAyLjUyNy01LjU3NSAzLjc5My05LjEzMiAzLjc5My0zLjU2IDAtNi42LTEuMjY1LTkuMTMtMy43OTItMi41MjgtMi41My0zLjc5NC01LjU3My0zLjc5NC05LjEzIDAtMy41NiAxLjI2Ni02LjYgMy43OTQtOS4xMyAyLjUzLTIuNTI4IDUuNTctMy43OTQgOS4xMy0zLjc5NCAzLjU1OCAwIDYuNiAxLjI2NiA5LjEzIDMuNzk0IDIuNTI3IDIuNTMgMy43OTMgNS41NyAzLjc5MyA5LjEzIDAgMy41NTgtMS4yNjQgNi42LTMuNzkgOS4xM3oiLz48L3N2Zz4="
alt="">
</a>
</li>
<li class="c-circle-nav__item">
<a href="#" class="c-circle-nav__link">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48ZyBmaWxsPSIjZmZmIj48cGF0aCBkPSJNNDUuMDMyIDQyLjU3M2wtMTkuOTIgMTkuOTJjLS43NC43NC0xLjExMiAxLjYzLTEuMTEyIDIuNjYgMCAxLjA1Ni4zNyAxLjkzMiAxLjExMyAyLjYzNWwzLjEgMy4xNTdjLjc2LjcyNCAxLjY0NyAxLjA4NCAyLjY2IDEuMDg0IDEuMDM0IDAgMS45MTItLjM2IDIuNjMzLTEuMDg1bDE5Ljk1LTE5Ljk0OGMtMS45MS0uNzYtMy42MDMtMS44NzUtNS4wNzUtMy4zNS0xLjQ3LTEuNDctMi41OS0zLjE2Mi0zLjM0OC01LjA3NHpNMzQuMDYyIDY0LjZjLS4zNy4zNy0uODEuNTU0LTEuMzE2LjU1NC0uNTA3IDAtLjk0Ni0uMTgzLTEuMzE2LS41NTMtLjM3LS4zNy0uNTU2LS44MS0uNTU2LTEuMzE2cy4xODUtLjk0Ny41NTYtMS4zMTdjLjM3LS4zNy44MS0uNTU1IDEuMzE2LS41NTVzLjk0Ni4xODUgMS4zMTcuNTU1Yy4zNy4zNy41NTUuODEyLjU1NSAxLjMxN3MtLjE4NC45NDYtLjU1NSAxLjMxN3pNNzEuNzUzIDM3LjU0M2MtLjE2OC0uMTk1LS4zOTYtLjI5Mi0uNjg4LS4yOTItLjE3NCAwLS44NjMuMzQ2LTIuMDYyIDEuMDQtMS4yLjY5LTIuNTIgMS40OC0zLjk2NCAyLjM3bC0yLjMxIDEuNDE3LTUuNjQ4LTMuMTN2LTYuNTVsOC41Ny00Ljk0NWMuMzEzLS4yMTUuNDY4LS40ODYuNDY4LS44MiAwLS4zMy0uMTU0LS42MDMtLjQ2OC0uODE4LS44NTgtLjU4NS0xLjkwNC0xLjA0LTMuMTQ0LTEuMzYtMS4yMzgtLjMyMy0yLjQyMi0uNDgyLTMuNTU0LS40ODItMy42MDcgMC02LjY5MiAxLjI4My05LjI1NiAzLjg0Ni0yLjU2NiAyLjU2NS0zLjg0OCA1LjY1LTMuODQ4IDkuMjU4IDAgMy42MDYgMS4yODMgNi42OTQgMy44NDggOS4yNTcgMi41NjMgMi41NjUgNS42NDggMy44NDYgOS4yNTYgMy44NDYgMi43NSAwIDUuMjctLjgxNSA3LjU2My0yLjQ0MyAyLjI4OC0xLjYzIDMuODk0LTMuNzUgNC44MS02LjM2Mi40NS0xLjMxLjY3My0yLjM0LjY3My0zLjEwMi4wMDItLjI5Mi0uMDgyLS41MzYtLjI0Ny0uNzN6Ii8+PC9nPjwvc3ZnPg=="
alt="">
</a>
</li>
<!-- more items here -->
</ul>
</nav>
.c-circle-nav {
position: fixed;
bottom: 12px;
right: 12px;
z-index: 1000;
width: 48px;
height: 48px;
border-radius: 24px;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav {
width: 96px;
height: 96px;
border-radius: 48px;
}
}
.c-circle-nav__items {
display: block;
list-style: none;
position: absolute;
z-index: 90;
margin: 0;
padding: 0;
}
.c-circle-nav__item {
display: block;
position: absolute;
top: 0;
left: 0;
width: 48px;
height: 48px;
border-radius: 24px;
opacity: 0;
-webkit-transition-property: -webkit-transform, opacity;
transition-property: transform, opacity;
-webkit-transition-duration: 0.3s, 0.3s;
transition-duration: 0.3s, 0.3s;
-webkit-transition-timing-function: cubic-bezier(0.35, -0.59, 0.47, 0.97);
transition-timing-function: cubic-bezier(0.35, -0.59, 0.47, 0.97);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__item {
width: 96px;
height: 96px;
border-radius: 48px;
}
}
/**
* Transisition delays at the default state.
*/
.c-circle-nav__item:nth-child(1) {
-webkit-transition-delay: 0.4s;
transition-delay: 0.4s;
}
.c-circle-nav__item:nth-child(2) {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s;
}
.c-circle-nav__item:nth-child(3) {
-webkit-transition-delay: 0.2s;
transition-delay: 0.2s;
}
.c-circle-nav__item:nth-child(4) {
-webkit-transition-delay: 0.1s;
transition-delay: 0.1s;
}
.c-circle-nav__item:nth-child(5) {
-webkit-transition-delay: 0s;
transition-delay: 0s;
}
/**
* We're using the .is-active class, which is added to the nav via JavaScript.
* Once the nav is active, the items inherit the properties below. We will
* manually write out the transform properties for first and last items, as we
* already know their position. For all items in between though, we'll use some
* polar-to-cartesian math and some Sass functions to get the positioning.
*/
.c-circle-nav.is-active .c-circle-nav__item {
-webkit-transition-timing-function: cubic-bezier(0.35, 0.03, 0.47, 1.59);
transition-timing-function: cubic-bezier(0.35, 0.03, 0.47, 1.59);
}
.c-circle-nav.is-active .c-circle-nav__item:nth-child(1) {
-webkit-transition-delay: 0s;
transition-delay: 0s;
-webkit-transform: translate(-144px, 0);
-ms-transform: translate(-144px, 0);
transform: translate(-144px, 0);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav.is-active .c-circle-nav__item: nth-child(1) {
-webkit-transform: translate(-288px, 0);
-ms-transform: translate(-288px, 0);
transform: translate(-288px, 0);
}
}
.c-circle-nav.is-active .c-circle-nav__item:nth-child(2) {
-webkit-transition-delay: 0.1s;
transition-delay: 0.1s;
-webkit-transform: translate(-134px, -56px);
-ms-transform: translate(-134px, -56px);
transform: translate(-134px, -56px);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav.is-active .c-circle-nav__item: nth-child(2) {
-webkit-transform: translate(-267px, -111px);
-ms-transform: translate(-267px, -111px);
transform: translate(-267px, -111px);
}
}
.c-circle-nav.is-active .c-circle-nav__item:nth-child(3) {
-webkit-transition-delay: 0.2s;
transition-delay: 0.2s;
-webkit-transform: translate(-102px, -102px);
-ms-transform: translate(-102px, -102px);
transform: translate(-102px, -102px);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav.is-active .c-circle-nav__item: nth-child(3) {
-webkit-transform: translate(-204px, -204px);
-ms-transform: translate(-204px, -204px);
transform: translate(-204px, -204px);
}
}
.c-circle-nav.is-active .c-circle-nav__item:nth-child(4) {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s;
-webkit-transform: translate(-56px, -134px);
-ms-transform: translate(-56px, -134px);
transform: translate(-56px, -134px);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav.is-active .c-circle-nav__item: nth-child(4) {
-webkit-transform: translate(-111px, -267px);
-ms-transform: translate(-111px, -267px);
transform: translate(-111px, -267px);
}
}
.c-circle-nav.is-active .c-circle-nav__item:nth-child(5) {
-webkit-transition-delay: 0.4s;
transition-delay: 0.4s;
-webkit-transform: translate(0, -144px);
-ms-transform: translate(0, -144px);
transform: translate(0, -144px);
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav.is-active .c-circle-nav__item: nth-child(5) {
-webkit-transform: translate(0, -288px);
-ms-transform: translate(0, -288px);
transform: translate(0, -288px);
}
}
/**
* Apart from the transform properties, we'll also make sure the items get
* the correct opacity.
*/
.c-circle-nav.is-active .c-circle-nav__item {
opacity: 1;
}
/**
* Let's style the links now. This is just boilerplate stuff, and of course,
* you'll probably want to change up the icons to match your needs. In any case,
* we'll do it here for the sake of completion.
*/
.c-circle-nav__link {
display: block;
width: 100%;
height: 100%;
border-radius: 24px;
box-shadow: inset 0 0 0 2px #fff;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__link {
border-radius: 48px;
}
}
.c-circle-nav__link img {
display: block;
max-width: 100%;
height: auto;
}
.c-circle-nav__link:hover {
box-shadow: inset 0 0 0 2px #ff283c;
}
/* -----------------------------------------------------------------------------
THE TOGGLE COMPONENT
----------------------------------------------------------------------------- */
/**
* The toggle is a button element, and as such requires some resets that are
* unique to buttons. This button also inherits some funky stuff from my
* CSS animating hamburger menu icons demo, which can be found at this url:
* https://github.com/callmenick/Animating-Hamburger-Icons
*/
.c-circle-nav__toggle {
display: block;
position: absolute;
z-index: 100;
margin: 0;
padding: 0;
width: 48px;
height: 48px;
background-color: #ff283c;
font: inherit;
font-size: 0;
text-indent: -9999px;
border-radius: 24px;
-webkit-transition: background 0.3s;
transition: background 0.3s;
/* reset some browser defaults */
cursor: pointer;
border: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
box-shadow: none;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__toggle {
width: 96px;
height: 96px;
border-radius: 48px;
}
}
.c-circle-nav__toggle:hover,
.c-circle-nav__toggle:focus,
.c-circle-nav__toggle.is-active {
outline: none;
background-color: #c10012;
}
.c-circle-nav__toggle span,
.c-circle-nav__toggle span::before,
.c-circle-nav__toggle span::after {
display: block;
position: absolute;
height: 4px;
background: #fff;
border-radius: 1px;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__toggle span, .c-circle-nav__toggle span::before, .c-circle-nav__toggle span::after {
height: 8px;
border-radius: 2px;
}
}
.c-circle-nav__toggle span {
top: 22px;
left: 10px;
right: 10px;
-webkit-transition: background 0.3s;
transition: background 0.3s;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__toggle span {
top: 44px;
left: 20px;
right: 20px;
}
}
.c-circle-nav__toggle span::before,
.c-circle-nav__toggle span::after {
left: 0;
width: 100%;
content: "";
-webkit-transition-duration: 0.3s, 0.3s;
transition-duration: 0.3s, 0.3s;
-webkit-transition-delay: 0.3s, 0s;
transition-delay: 0.3s, 0s;
}
.c-circle-nav__toggle span::before {
top: -8px;
-webkit-transition-property: top, -webkit-transform;
transition-property: top, transform;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__toggle span::before {
top: -16px;
}
}
.c-circle-nav__toggle span::after {
bottom: -8px;
-webkit-transition-property: bottom, -webkit-transform;
transition-property: bottom, transform;
}
@media (min-width: 480px) and (min-height: 480px) {
.c-circle-nav__toggle span::after {
bottom: -16px;
}
}
/* button active state */
.c-circle-nav__toggle.is-active span {
background: none;
}
.c-circle-nav__toggle.is-active span::before {
top: 0;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition-delay: 0s, 0.3s;
transition-delay: 0s, 0.3s;
}
.c-circle-nav__toggle.is-active span::after {
bottom: 0;
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
-webkit-transition-delay: 0s, 0.3s;
transition-delay: 0s, 0.3s;
}
/* -----------------------------------------------------------------------------
THE MASK COMPONENT
----------------------------------------------------------------------------- */
/**
* Here's the mask component, which actually gets created and inserted to the
* DOM via JavaScript. It simply acts as an overlay to draw attention to the
* navigation when it is active. It also uses the .is-acvite state class.
*/
.c-mask {
position: fixed;
top: 0;
left: 0;
z-index: 900;
visibility: hidden;
opacity: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
-webkit-transition: opacity 0.3s, visibility 0.3s;
transition: opacity 0.3s, visibility 0.3s;
}
.c-mask.is-active {
opacity: 1;
visibility: visible;
}
(function() {
"use strict";
/**
* Cache variables
*/
var menu = document.querySelector("#c-circle-nav");
var toggle = document.querySelector("#c-circle-nav__toggle");
var mask = document.createElement("div");
var activeClass = "is-active";
/**
* Create mask
*/
mask.classList.add("c-mask");
document.body.appendChild(mask);
/**
* Listen for clicks on the toggle
*/
toggle.addEventListener("click", function(e) {
e.preventDefault();
toggle.classList.contains(activeClass) ? deactivateMenu() : activateMenu();
});
/**
* Listen for clicks on the mask, which should close the menu
*/
mask.addEventListener("click", function() {
deactivateMenu();
console.log('click');
});
/**
* Activate the menu
*/
function activateMenu() {
menu.classList.add(activeClass);
toggle.classList.add(activeClass);
mask.classList.add(activeClass);
}
/**
* Deactivate the menu
*/
function deactivateMenu() {
menu.classList.remove(activeClass);
toggle.classList.remove(activeClass);
mask.classList.remove(activeClass);
}
})();
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.