Fancy Clickable List Items
For the WebGL slider
by Arjun Singh
HTML
<ul>
<li>
<span class="text">01</span>
<span class="O">•</span>
</li>
<li>
<span class="text">02</span>
<span class="O">•</span>
</li>
<li>
<span class="text">03</span>
<span class="O">•</span>
</li>
</ul>
CSS
ul{
padding: 8px;
background-color: black;
list-style-type: none;
display: flex;
gap: 8px;
color: white;
font-family: 'Helvetica';
font-size: 1.5rem;
perspective: 1000px;
}
li{
position: relative;
cursor: pointer;
user-select: none;
transform-style: preserve-3d;
}
li span{
display: inline-block;
transform-origin: center center;
}
li span.text{
transition: all 0.25s linear;
}
li span.O{
display: inline-flex;
align-items: center;
justify-content: center;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
transform: rotateX(90deg);
transition: all 0.25s linear;
transition-delay: 0.25s;
font-size: 2em;
}
li.clicked span.text{
transform: rotateX(90deg);
}
li.clicked span.O{
transform: rotateX(0);
}
JavaScript
const li = Array.from(document.querySelectorAll("li"));
li.forEach(elem => {
elem.onclick = () => elem.classList.toggle("clicked")
});