Back
Learn how to build a sophisticated hexagonal loader with counter-rotating elements using CSS clip-path and transforms.
<div class="hexagon-loader">
<div class="hexagon outer-hex"></div>
<div class="hexagon middle-hex"></div>
<div class="hexagon inner-hex"></div>
</div>
.hexagon-loader {
position: relative;
width: 80px;
height: 80px;
display: flex;
justify-content: center;
align-items: center;
}
Next, we define the common properties for all hexagonal elements. The key to creating the hexagon shape is the CSS clip-path property, which allows us to define a polygon shape using a series of x,y coordinate pairs.
This approach offers precise control over the shape without needing images or extra markup.
.hexagon {
position: absolute;
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
Now we style each hexagon individually, defining their sizes and colors. We use a gradient of teal shades from dark for the outer hexagon to light for the inner hexagon.
The outer hexagon is the largest at 80px by 80px with a deep teal color. It rotates clockwise with a 3-second animation cycle.
.outer-hex {
width: 80px;
height: 80px;
background-color: #0F766E;
animation: spin-clockwise 3s linear infinite;
}
The middle hexagon is 60px by 60px with a medium teal color. It rotates counter-clockwise with a 2.5-second animation cycle, creating an interesting counterflow effect against the other hexagons.
.middle-hex {
width: 60px;
height: 60px;
background-color: #14B8A6;
animation: spin-counter 2.5s linear infinite;
}
The inner hexagon is the smallest at 40px by 40px with a light teal color. It rotates clockwise like the outer hexagon but with a faster 2-second animation cycle.
.inner-hex {
width: 40px;
height: 40px;
background-color: #5EEAD4;
animation: spin-clockwise 2s linear infinite;
}
We define two rotation animations - one for clockwise spin and one for counter-clockwise. Both use the linear timing function to ensure constant rotation speed without acceleration or deceleration.
@keyframes spin-clockwise {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes spin-counter {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(-360deg);
}
}
The combination of different sizes, rotation directions, and speeds creates a mesmerizing and complex animation despite the relatively simple code. The nested hexagons appear to interact with each other as they rotate in opposite directions.
The contrasting rotation directions create a mechanical, gear-like quality that suggests precision and technical sophistication.
This hexagon spinner loader offers several unique advantages:
- Geometric precision: The hexagonal shape creates a sense of mathematical precision and engineered design, making it appropriate for technical or scientific applications.
- Mechanical metaphor: The counter-rotating elements evoke gears or machinery in motion, suggesting complex work being performed.
- Visual distinction: The hexagon shape stands out compared to more common circular spinners, creating a memorable and distinctive loading indicator.
- Scalability: The loader maintains its visual appeal at various sizes and works well in both small and large implementations.
- Modern technique showcase: The use of CSS clip-path demonstrates modern front-end capabilities, signaling a technically current application.
This sophisticated geometric animation combines visual interest with a sense of precision, making it ideal for applications where technical excellence is a key value.<div class="hexagon-loader">
<div class="hexagon outer-hex"></div>
<div class="hexagon middle-hex"></div>
<div class="hexagon inner-hex"></div>
</div>
<style>
.hexagon-loader {
position: relative;
width: 80px;
height: 80px;
display: flex;
justify-content: center;
align-items: center;
}
.hexagon {
position: absolute;
clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
}
.outer-hex {
width: 80px;
height: 80px;
background-color: #0F766E;
animation: spin-clockwise 3s linear infinite;
}
.middle-hex {
width: 60px;
height: 60px;
background-color: #14B8A6;
animation: spin-counter 2.5s linear infinite;
}
.inner-hex {
width: 40px;
height: 40px;
background-color: #5EEAD4;
animation: spin-clockwise 2s linear infinite;
}
@keyframes spin-clockwise {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes spin-counter {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(-360deg);
}
}
</style>
Thank you for reading this article.
Comments
No comments yet. Be the first to comment!