Nested Parts
CSSA large square outline containing four smaller squares expands slightly, showing the nested hierarchy of components within an assembly.
- Tier
- CSS
- Dependencies
- None
- Duration
- 4 s, loops
- Categories
- Decorative and illustrative
- Use cases
- Hero and marketing
- Industries
- Manufacturing and industrial, Cross-industry
- Style
- Duotone · regular stroke
- Set
- bom
- Tags
- geometricscaleminimal
Companion assets
The same artwork, not animated. Derived from the entry’s own resting state, so it matches exactly.
Code
animation.svg
<svg xmlns="http://www.w3.org/2000/svg" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="pulsar pulsar-bom-nested-parts" data-pulsar="bom-nested-parts" viewBox="0 0 160 96"><rect width="56" height="56" x="52" y="20" stroke-width="1.5" class="bom-nest-housing" opacity=".35" rx="6"></rect><line x1="80" x2="80" y1="22" y2="74" stroke-dasharray="2 3" opacity=".25"></line><line x1="54" x2="106" y1="48" y2="48" stroke-dasharray="2 3" opacity=".25"></line><g class="bom-nest-cells"><rect width="18" height="18" x="58" y="26" fill="var(--pulsar-accent, currentColor)" fill-opacity=".12" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="cell c1" rx="3"></rect><rect width="18" height="18" x="84" y="26" fill="var(--pulsar-accent, currentColor)" fill-opacity=".12" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="cell c2" rx="3"></rect><rect width="18" height="18" x="58" y="52" fill="var(--pulsar-accent, currentColor)" fill-opacity=".12" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="cell c3" rx="3"></rect><rect width="18" height="18" x="84" y="52" fill="var(--pulsar-accent, currentColor)" fill-opacity=".12" stroke="var(--pulsar-accent, currentColor)" stroke-width="1.5" class="cell c4" rx="3"></rect></g></svg>
animation.css
.pulsar-bom-nested-parts {
display: block;
overflow: visible;
}
.pulsar-bom-nested-parts .bom-nest-housing {
animation: bom-nested-parts-housing 4000ms ease-in-out infinite;
}
.pulsar-bom-nested-parts .cell.c1 {
animation: bom-nested-parts-c1 4000ms ease-in-out infinite;
}
.pulsar-bom-nested-parts .cell.c2 {
animation: bom-nested-parts-c2 4000ms ease-in-out infinite;
}
.pulsar-bom-nested-parts .cell.c3 {
animation: bom-nested-parts-c3 4000ms ease-in-out infinite;
}
.pulsar-bom-nested-parts .cell.c4 {
animation: bom-nested-parts-c4 4000ms ease-in-out infinite;
}
@keyframes bom-nested-parts-housing {
0%,
100% {
transform: scale(1);
opacity: 0.35;
}
50% {
transform: scale(1.05);
opacity: 0.6;
}
}
@keyframes bom-nested-parts-c1 {
0%,
100% {
transform: translate(0, 0);
opacity: 0.7;
}
50% {
transform: translate(-3px, -3px);
opacity: 1;
}
}
@keyframes bom-nested-parts-c2 {
0%,
100% {
transform: translate(0, 0);
opacity: 0.7;
}
50% {
transform: translate(3px, -3px);
opacity: 1;
}
}
@keyframes bom-nested-parts-c3 {
0%,
100% {
transform: translate(0, 0);
opacity: 0.7;
}
50% {
transform: translate(-3px, 3px);
opacity: 1;
}
}
@keyframes bom-nested-parts-c4 {
0%,
100% {
transform: translate(0, 0);
opacity: 0.7;
}
50% {
transform: translate(3px, 3px);
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.pulsar-bom-nested-parts .bom-nest-housing,
.pulsar-bom-nested-parts .cell.c1,
.pulsar-bom-nested-parts .cell.c2,
.pulsar-bom-nested-parts .cell.c3,
.pulsar-bom-nested-parts .cell.c4 {
animation: none;
transform: none;
opacity: 1;
}
}