<ul>
<li>
<a href="#">
<ion-icon name="home-outline"></ion-icon>
</a>
</li>
<li>
<a href="#">
<ion-icon name="person-outline"></ion-icon>
</a>
</li>
<li class="active">
<a href="#">
<ion-icon name="add-circle-outline"></ion-icon>
</a>
</li>
<li>
<a href="#">
<ion-icon name="settings-outline"></ion-icon>
</a>
</li>
<li>
<a href="#">
<ion-icon name="chatbubble-outline"></ion-icon>
</a>
</li>
<div id="marker"></div>
</ul>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #1e2759;
}
ul {
position: relative;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10px;
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
}
ul li {
list-style: none;
}
ul li a {
position: relative;
color: #fff;
text-decoration: none;
display: inline-block;
padding: 20px 30px;
z-index: 1000;
backdrop-filter: blur(15px);
}
ul li a ion-icon {
font-size: 1.5em;
pointer-events: none;
opacity: 0.25;
transition: 0.25s;
}
ul li.active a ion-icon {
opacity: 1;
}
#marker {
position: absolute;
top: 0;
transition: 0.5s;
z-index: 1;
}
#marker::before {
content: '';
position: absolute;
top: -10px;
left: 50%;
transform: translateX(-50%);
width: 50px;
height: 40px;
border-radius: 8px;
background: #5da6ff;
box-shadow: 0 0 15px #5da6ff,
0 0 30px #5da6ff,
0 0 40px #5da6ff,
0 0 60px #5da6ff
}
ul li:nth-child(1).active~#marker::before {
background: #5da6ff;
box-shadow: 0 0 15px #5da6ff,
0 0 30px #5da6ff,
0 0 40px #5da6ff,
0 0 60px #5da6ff
}
ul li:nth-child(2).active~#marker::before {
background: #ff0;
box-shadow: 0 0 15px #ff0,
0 0 30px #ff0,
0 0 40px #ff0,
0 0 60px #ff0
}
ul li:nth-child(3).active~#marker::before {
background: #df2fff;
box-shadow: 0 0 15px #df2fff,
0 0 30px #df2fff,
0 0 40px #df2fff,
0 0 60px #df2fff
}
ul li:nth-child(4).active~#marker::before {
background: #0f0;
box-shadow: 0 0 15px #0f0,
0 0 30px #0f0,
0 0 40px #0f0,
0 0 60px #0f0
}
ul li:nth-child(5).active~#marker::before {
background: #ff308f;
box-shadow: 0 0 15px #ff308f,
0 0 30px #ff308f,
0 0 40px #ff308f,
0 0 60px #ff308f
}
let marker = document.querySelector('#marker');
let list = document.querySelectorAll('ul li');
function moveIndicator(e) {
marker.style.left = e.offsetLeft + 'px';
marker.style.width = e.offsetWidth + 'px';
}
list.forEach(link => {
link.addEventListener('mousemove', (e) => {
moveIndicator(e.target);
})
})
function activeLink() {
list.forEach((item) =>
item.classList.remove('active'));
this.classList.add('active');
}
list.forEach((item) =>
item.addEventListener('mouseover', activeLink));
This Pen doesn't use any external CSS resources.