Material Design har været overalt på det seneste. En del af det består i at stable lag oven på hinanden som ægte papirark. For at opnå en sådan effekt i CSS er vi nødt til at bruge box-shadow
ejendommen.
For at undgå at skulle skrive skyggerne manuelt hver gang, kan vi bygge et lille Sass mixin til det. Det eneste, denne mixin vil gøre, er at udsende en box-shadow
erklæring baseret på det givne $depth
(fra 0 til 5). Shadows beregnes faktisk af to funktioner: bottom-shadow
og top-shadow
.
/// Gives a card depth effect. /// @param (Number) $depth - depth level (between 1 and 5) /// @link http://www.google.com/design/spec/layout/layout-principles.html#layout-principles-dimensionality Google Design /// @requires (function) top-shadow /// @requires (function) bottom-shadow @mixin card($depth) ( @if $depth 5 ( @warn "Invalid $depth `#($depth)` for mixin `card`."; ) @else ( box-shadow: bottom-shadow($depth), top-shadow($depth); ) )
Lad os ikke glemme vores to funktioner:
/// Computes a top-shadow for a card effect. /// @param (Number) $depth - depth level /// @return (List) @function top-shadow($depth) ( $primary-offset: nth(1.5 3 10 14 19, $depth) * 1px; $blur: nth(1.5 3 10 14 19, $depth) * 4px; $color: rgba(black, nth(.12 .16 .19 .25 .30, $depth)); @return 0 $primary-offset $blur $color; ) /// Computes a bottom-shadow for a card effect. /// @param (Number) $depth - depth level /// @return (List) @function bottom-shadow($depth) ( $primary-offset: nth(1.5 3 6 10 15, $depth) * 1px; $blur: nth(1 3 3 5 6, $depth) * 4px; $color: rgba(black, nth(.24 .23 .23 .22 .22, $depth)); @return 0 $primary-offset $blur $color; )
Se Pen Material skygge af Hugo Giraudel (@HugoGiraudel) på CodePen.