Page 168 - css揭秘
P. 168

加一层投影:

                        background: #58a;
                        color: white;
                        text-shadow: 0 1px hsl(0,0%,85%),
                                     0 2px hsl(0,0%,80%),
                                     0 3px hsl(0,0%,75%),                                图 5-39
                                     0 4px hsl(0,0%,70%),                                已经十分接近了,但看起来还不
                                     0 5px hsl(0,0%,65%),                                够真实
                                     0 5px 10px black;

                     试一试 play.csssecrets.io/extruded


                        这种繁琐冗长的代码正是 CSS 预处理器的 mixin 功能所要解决的问题。
                    我们在 SCSS 中可以这样来做:

                        @mixin text-3d($color: white, $depth: 5) {              SCSS
                            $shadows: ();
                            $shadow-color: $color;

                            @for $i from 1 through $depth {
                                $shadow-color: darken($shadow-color, 10%);
                                $shadows: append($shadows,
                                            0 ($i * 1px) $shadow-color, comma);
                            }

                            color: $color;
                            text-shadow: append($shadows,
                                            0 ($depth * 1px) 10px black, comma);
                        }

                        h1 { @include text-3d(#eee, 4); }

                        这种效果还有很多变种。比如把所有的投影都设成黑色,并且去掉最
                    底层的投影,就可以模拟出一种在复古标志牌中常见的文字效果(参见图
                    5-40):

                        color: white;
                        background: hsl(0,50%,45%);
                        text-shadow: 1px 1px black, 2px 2px black,
                                     3px 3px black, 4px 4px black,
                                     5px 5px black, 6px 6px black,
                                     7px 7px black, 8px 8px black;
                                                                                         图 5-40
                        把这些代码转换成 mixin 甚至比前面的例子更加容易,不过在这个例子
                                                                                         复古风格的排印效果
                    中用函数来组织代码可能更合适:

                                                                                SCSS
                        @function text-retro($color: black, $depth: 8) {
                            $shadows: (1px 1px $color,);

                            @for $i from 2 through $depth {
                                $shadows: append($shadows,
                                            ($i*1px) ($i*1px) $color, comma);



                                                                                       27 现实中的文字效果            137







          ඀ࠡ  JOEC
   163   164   165   166   167   168   169   170   171   172   173