Recursive mixins help you repeat a style or calculation many times without writing it over and over. They save time and keep your code clean.
Recursive mixins in SASS
@mixin mixin-name($count) { @if $count > 0 { // Your styles here @include mixin-name($count - 1); } }
The mixin calls itself with a smaller number until it reaches zero.
Use @if to stop the recursion and avoid infinite loops.
box-shadow with decreasing blur radius ($count * 2px) each time. However, only the final declaration (smallest blur when $count=1) applies, as later ones override earlier ones.@mixin box-shadow-recursive($count) { @if $count > 0 { box-shadow: 0 0 #{ $count * 2 }px rgba(0, 0, 0, 0.1); @include box-shadow-recursive($count - 1); } }
padding values ($count rem). However, only the final (smallest) padding applies due to overriding.@mixin padding-recursive($count) { @if $count > 0 { padding: #{ $count }rem; @include padding-recursive($count - 1); } }
@mixin empty-recursive($count) { @if $count > 0 { // No styles here @include empty-recursive($count - 1); } }
This code applies a recursive mixin to create multiple border and padding declarations with lightness scaled by $count (higher count = lighter). Due to CSS overriding, only the deepest recursion's styles apply: 1px solid border at ~10% lightness (dark gray) and 0.5rem padding.
@use "sass:color"; @mixin recursive-border($count) { @if $count > 0 { border: 1px solid color.scale(black, $lightness: $count * 10%); padding: 0.5rem; @include recursive-border($count - 1); } } .box { @include recursive-border(3); background-color: #eee; width: 10rem; height: 10rem; }
Recursive mixins run until the stop condition is met, so always include a condition like @if $count > 0.
Too many recursive calls can slow down your CSS compilation.
Use recursion when you want to generate repeated styles that depend on a number, but for simple repeats, loops might be easier.
Recursive mixins call themselves to repeat styles multiple times.
Always include a stop condition to avoid infinite loops.
Useful for creating layered or repeated styles that change step by step.