Материал Shadows Mixin онлайн урок.


Материальный дизайн был повсюду в последнее время. Одна его часть состоит в укладке слоев поверх других, таких как реальные бумажные листы. Чтобы добиться такого эффекта в CSS, нам нужно использовать свойствоbox-shadow.

Чтобы избежать необходимости вручную писать тени каждый раз, мы можем создать для него немного Sass mixin. Единственное, что сделает этот mixin, это вывести объявлениеbox-shadowна основе заданной$ depth(от 0 до 5). Тени фактически будут вычисляться двумя функциями:нижняя теньиверх-тень.

/// 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 < 1 {
box-shadow: none;
} @else if $depth > 5 {
@warn "Invalid $depth `#{$depth}` for mixin `card`.";
} @else {
box-shadow: bottom-shadow($depth), top-shadow($depth);
}
}

Давайте не будем забывать о двух наших функциях:

/// 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;
}