Material Design ist in letzter Zeit überall präsent. Ein Teil davon besteht darin, Schichten wie echte Papierbögen übereinander zu stapeln. Um einen solchen Effekt in CSS zu erzielen, müssen wir die Eigenschaft box-shadow verwenden.
Um zu vermeiden, dass die Schatten jedes Mal manuell geschrieben werden müssen, können wir dafür einen kleinen Sass-Mixin erstellen. Dieser Mixin gibt lediglich eine box-shadow-Deklaration aus, basierend auf der angegebenen $depth (von 0 bis 5). Schatten werden tatsächlich von zwei Funktionen berechnet: bottom-shadow und 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 < 1 {
box-shadow: none;
} @else if $depth > 5 {
@warn "Invalid $depth `#{$depth}` for mixin `card`.";
} @else {
box-shadow: bottom-shadow($depth), top-shadow($depth);
}
}
Vergessen wir nicht unsere beiden Funktionen
/// 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;
}
Wie verwende ich es für Divs anstelle von Lis? Ich fange gerade an, das Zeug zu lernen. Ich kann es schaffen, die Lis im Div zu stylen.
Ach, schon gut. ich habe einfach @include card(5); zur Klasse hinzugefügt.
Wirklich gut gefallen. Danke
Wirklich gut gefallen! Ich würde Folgendes tun
@mixin card($depth:1) {Um die Verwendung von geringen Schattenintensitäten zu fördern, wo immer möglich :)
Großartig! Dies ist ein wirklich hilfreicher und mächtiger kleiner Mixin, vielen Dank.
WOO! FANTASTISCH HEILIGER KAKADU! Genau das, was ich wollte :)
Dumme Frage, aber woher kommen die "magischen Zahlen" (für Offset, Weichzeichnerstufe, Farben usw.)?
Sollte nicht einer der Schatten einen negativen Inneneffekt haben?
Danke
Die Deckkraft muss halb sein, sonst sieht es zu dunkel aus.
Könnten Sie bitte Ihre Website breiter als eine Postkarte machen? Die Leute lesen Ihren Blog nicht auf einem TI-89
Das ist genau das, was ich für ein Projekt brauchte, an dem ich arbeite.
Ich habe schnell einen CodePen für Sie zusammengestellt, bei dem ich Ihren Mixin auf eine
z-n-Klasse anwende, damit die Schatten schnell über HTML angewendet werden können, vis-à-vis<div class="z-2 myBox">Sie finden ihn hier