材质设计 近来无处不在。它的一部分是将图层叠加在一起,就像真正的纸张一样。为了在 CSS 中实现这种效果,我们需要使用 box-shadow
属性。
为了避免每次都手动编写阴影,我们可以为其构建一个小的 Sass mixin。这个 mixin 唯一要做的事情是根据给定的 $depth
(从 0 到 5)输出 box-shadow
声明。阴影实际上将由两个函数计算:bottom-shadow
和 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);
}
}
不要忘记我们的两个函数
/// 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;
}
那么,如何将其用于 Div 而不是 li 呢?我只是开始学习这些东西……我可以让它来设置 div 中的 li 的样式。
啊,没事了。我只是在类中添加了
@include card(5);
。真的很喜欢它。谢谢
真的很喜欢这个!我会做
@mixin card($depth:1) {
以鼓励在可能的情况下保持阴影深度较低 :)
太棒了!这个小小的 mixin 非常有用且强大,谢谢。
哇!太棒了!天哪!正是我想要的 :)
一个愚蠢的问题,但是“神奇数字”(用于偏移量、模糊级别、颜色等)来自哪里?
另外,阴影之一不应该有负内嵌吗?
谢谢
不透明度需要为一半,否则看起来太暗了。
请让您的网站比索引卡更宽好吗?人们不会在 TI-89 上阅读您的博客
这正是我正在做的一个项目所需要的。
我为您快速构建了一个 CodePen,在那里我将您的 mixin 应用于
z-n
类,以便可以通过 HTML 快速应用阴影,即<div class="z-2 myBox">
您可以在此处找到它