box-shadow 属性详解

box-shadow 是一个 CSS3 属性,它让我们几乎能在任意元素上添加阴影效果,就像我们在设计软件中的可添加的下拉阴影(drop shadow)一样。这种阴影效果让我们能在原本是平面的 2 维页面上创造出立体感。

语法

box-shadow 属性接受值最多由五个不同的部分组成。


   
   
  1. box-shadow: offset-x offset-y blur spread color position;

不像其它的属性,比如 border,它们的接受值可以被拆分为一系列子属性,box-shadow 属性没有子属性。这意味着记住这些组成部分的顺序更加重要,尤其是那些长度值。

offset-x

第一个长度值指明了阴影水平方向的偏移,即阴影在 x 轴的位置。值为正数时,阴影在元素的右侧;值为负数时,阴影在元素的左侧。


   
   
  1. .left { box-shadow: 20px 0px 10px 0px rgba(0,0,0,0.5) }
  2. .right { box-shadow: -20px 0px 10px 0px rgba(0,0,0,0.5) }

offset-y

第二个长度值指明了阴影竖直方向的偏移,即阴影在 y 轴的位置。值为正数时,阴影在元素的下方;值为负数时,阴影在元素的上方。


   
   
  1. .left { box-shadow: 0px 20px 10px 0px rgba(0,0,0,0.5) }
  2. .right { box-shadow: 0px -20px 10px 0px rgba(0,0,0,0.5) }

blur

第三个长度值代表了阴影的模糊半径,举例来说,就是你在设计软件中使用 高斯模糊 滤波器带来的效果。值为 0 意味着该阴影是固态而锋利的,完全完全没有模糊效果。blur 值越大,阴影则更不锋利而更朦胧 / 模糊。负值是不合法的,会被修正成 0


   
   
  1. .left { box-shadow: 0px 0px 0px 0px rgba(0,0,0,0.5) }
  2. .middle { box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.5) }
  3. .right { box-shadow: 0px 0px 50px 0px rgba(0,0,0,0.5) }

color

color 部分的值正如你所预料的,是指阴影的颜色。它可以是任意的颜色单元 (见 在 CSS 中与颜色打交道)。


   
   
  1. .left { box-shadow: 0px 0px 20px 10px #67b3dd }
  2. .right { box-shadow: 0px 0px 20px 10px rgba(0,0,0,0.5) }

多重阴影

box-shadow 属性在一个元素上能接受多个阴影值。添加至 box-shadow 的阴影以逗号分离。


   
   
  1. .foo {
  2.     box-shadow: 20px 20px 10px 0px rgba(0,0,0,0.5) inset, /* inner shadow */
  3.     20px 20px 10px 0px rgba(0,0,0,0.5); /* outer shadow */
  4. }

圆形阴影

box-shadow 属性的边缘半径由同个元素上的 border-radius 所控制。


   
   
  1. .foo {
  2.     box-shadow: 20px 20px 10px 0px rgba(0,0,0,0.5);
  3.     border-radius: 50%;
  4. }

大杂烩

把这些部分放在一起,我们能通过使用 box-shadow 创造出一些非常惊人的效果。

一个可选的非布局边框

我们可以使用 box-shadow 属性创造元素的边框,而不会影响盒模型或者页面的其他布局。而且,使用多重阴影,我们可以给元素的不同边框创造不一样的效果。


   
   
  1. .simple {
  2.     box-shadow: 0px 0px 0px 40px indianred;
  3. }
  4.  
  5. .multiple {
  6.     box-shadow: 20px 20px 0px 20px lightcoral,
  7.                 -20px -20px 0px 20px mediumvioletred,
  8.                 0px 0px 0px 40px rgb(200,200,200);
  9. }

弹出效果

在 box-shadow (与 transform) 上使用转换,我们可以做出元素移近或移远的视觉效果。


   
   
  1. .popup {
  2.     transform: scale(1);
  3.     box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.3);
  4.     transition: box-shadow 0.5s, transform 0.5s;
  5. }
  6. .popup:hover {
  7.     transform: scale(1.3);
  8.     box-shadow: 0px 0px 50px 10px rgba(0, 0, 0, 0.3);
  9.     transition: box-shadow 0.5s, transform 0.5s;
  10. }

浮动效果

我们也能给 :after 为元素添加 box-shadow 属性。利用这点,我们能在元素下面做出阴影,提供被举起与丢下的视觉效果。


   
   
  1. .floating {
  2.     position: relative;
  3.  
  4.     transform: translateY(0);
  5.     transition: transform 1s;
  6. }
  7.  
  8. .floating:after {
  9.     content: "";
  10.     display: block;
  11.     position: absolute;
  12.     bottom: -30px;
  13.     left: 50%;
  14.     height: 8px;
  15.     width: 100%;
  16.     box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.4);
  17.     border-radius: 50%;
  18.     background-color: rgba(0, 0, 0, 0.2);
  19.  
  20.     transform: translate(-50%, 0);
  21.     transition: transform 1s;
  22. }
  23.  
  24. /* Hover States */
  25. .floating:hover {
  26.     transform: translateY(-40px);
  27.     transition: transform 1s;
  28. }
  29. .floating:hover:after {
  30.     transform: translate(-50%, 40px) scale(0.75);
  31.     transition: transform 1s;
  32. }

还有很多能利用 box-shadow 实现的效果。例如,这个有名的 pen 就使用它做出了 8 种纸张效果。尽管它表面上只是一个创造简单下拉阴影(drop shadow)的工具,但它可比那强多了。

原文链接:https://bitsofco.de/the-box-shadow-property/
众成翻译:http://www.zcfy.cc/article/373

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值