Performance: Media query mixin patterns
MEDIUM IMPACT
This affects how CSS is loaded and applied, impacting page load speed and rendering efficiency.
@mixin respond($breakpoint) { $queries: ( small: '(max-width: 600px)', medium: '(max-width: 900px)', large: '(max-width: 1200px)' ); @media #{map-get($queries, $breakpoint)} { @content; } } .element { @include respond(small) { font-size: 1rem; } @include respond(medium) { font-size: 1.2rem; } @include respond(large) { font-size: 1.5rem; } }
@mixin respond-bad($breakpoint) { @if $breakpoint == small { @media (max-width: 600px) { @content; } } @if $breakpoint == medium { @media (max-width: 900px) { @content; } } @if $breakpoint == large { @media (max-width: 1200px) { @content; } } } .element { @include respond-bad(small) { font-size: 1rem; } @include respond-bad(medium) { font-size: 1.2rem; } @include respond-bad(large) { font-size: 1.5rem; } }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Repeated media queries in mixins | No extra DOM nodes | Multiple reflows due to duplicated styles | Higher paint cost from redundant styles | [X] Bad |
| Centralized media query map in mixin | No extra DOM nodes | Single reflow per breakpoint | Lower paint cost with minimal CSS | [OK] Good |