box-shadow 的值定义为 none | [ inset? && <length>{2,4} && <color>?]#,默认是 none. 后半部分 [ inset? && <length>{2,4} && <color>?]# 的理解是

  1. # 指前面的实体可以出现一次也可以多次,当是多次的时候需要用逗号隔开,
  2. && 指两边的实体都必须出现但是可以是任意顺序,
  3. ? 指前面的实体是可有可无的,当有的时候只能出现一次,
  4. {2,4} 指前面的实体至少出现2次至多出现4次。

当有多个 shadow 即使用了逗号时,后面声明的将在前面声明的底部画,即我们人眼看到的就是前面声明的把后面声明的一部分给遮盖了。

优先级 ? 高于 &&,详见这。简而言之就是 inset<color> 是可选的,<length> 类型的值可以出现二到四次,inset<length>{2,4}<color>可以是任意顺序。

当没有 inset 时,shadow 就是 outset 的即在边框 (border) 的外边,inset、outset 指边框的内外。没有 <color> 值时默认为 currentColor,简单理解就是那个元素的 color ( background-color) 值,如果那个元素没有设置 color 值那么就取 browser/user agent stylesheet 里的 color 值,如果还没有就从父/祖先元素继承。这里有一点需要注意的是 currentColor 是指那个元素生效color 值,对同一元素可能存在多个 color 声明,那么权重高的 (higher specificity) 或者权重相同后来声明的将会生效。

<length> 类型的值出现两次的时候依次指 h-offsetv-offset,当出现三次的时候就再加一个 blur-distance,第四次的时候再加一个 spread-distance,可以参考这 (本文档的用词并不完全与引用的文档一样)。

我们知道在写 CSS 的时候,下面声明的相同属性会覆盖上面声明的,浏览器的 devtool 把 CSS 文件里下面写的 CSS 放在了最上面,见下图。

创建下面的按钮

用到的 HTML 是在 body 元素里添加

<button class="button">热干面</button>

CSS 是

body {margin: 0;background-color: lightgray;color:  white !important; /* here !important is just a distraction */
}button {margin-top: 1em;border: 0;padding: 1.5em 2em;font-size: 2em;color: rgba(255, 0, 0, .7); /* red */border-radius: .25em;background-color: rgba(0, 255, 0, .7); /* green */box-shadow: 0 -0.4em 0 currentColor, rgba(0, 0, 255, .7) /* blue */ 0 -0.8em 0;
}

其中 box-shadow 里的 currentColor 取自该元素的 color 值。当去掉 color 声明时,颜色变为黑色而不是 body 元素里的白色,这是因为 browser/user agent stylesheet 里对按钮设置的 color 为黑色。

button 样式里 <length> 单位用的 em 是相对于该元素 font-size 的大小而言的,而 font-size 里的 em 是继承父/祖先元素 font-size 的大小,详细解释见这。对此例子而言,buttonfont-size1em 等于根元素 (html) 的 font-size 大小即默认的16px,所以 buttonfont-size 是32px,padding 转换过来就是 48px 64px,我们可以从 devtool 里的 computed 标签里的剖析看出来,见下图。

为什么给 button 添加 margin-top: 1em; 呢,因为 outset 的 box-shadow 是在 border 的外边画的,不加这条声明的话 shadow 将会被浏览器的菜单栏 (menu bar) 遮住。border: 0; 是为了避开 browser/user agent stylesheet 的影响。

CSS box-shadow 详解相关推荐

  1. CSS vw vh详解

    CSS vw vh详解 简介 适配原理 简介 vw vh是一种相对单位 相对视口的宽度计算结果 vw viewport width 1vw=1/100视口宽度 vh viewport height 1 ...

  2. CSS盒子模型详解(清除无序列表的项目符号)

    CSS盒子模型详解(清除无序列表的项目符号) 网页的布局过程 准备好相关的网页元素(盒子) 利用CSS设置好盒子的样式以及在网页中的摆放位置 往盒子里面装东西 盒子模型(box model) 网页中, ...

  3. [转]CSS hack大全详解

    转自:CSS hack大全&详解 1.什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的, ...

  4. Bounding box regression详解

    Bounding box regression详解 转载 http://blog.csdn.net/u011534057/article/details/51235964 Reference link ...

  5. CSS属性vertical-align详解(CSS之五)

    CSS属性vertical-align详解 作用对象 vertical-align的意思是在垂直方向进行对齐.它主要对以下属性的元素有效 inline元素.inline-block元素和普通的文本. ...

  6. css background-attachment属性详解

    css background-attachment属性详解 background-attachment属性用途 background-attachment属性用于设置背景图片定位的参照方式 backg ...

  7. html右侧浮动菜单,HTML+CSS:css元素浮动详解,使用浮动制作导航栏菜单

    原标题:HTML+CSS:css元素浮动详解,使用浮动制作导航栏菜单 今天这篇文章我们来说一下css的浮动属性(float),给块状元素添加float属性可以使其转变为行内元素,也就是我们所说标签对象 ...

  8. 基于HTTP浏览器缓存机制全面解析看Table表格的css样式代码详解

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 漂亮的table表格样式 ...

  9. CSS超链接样式详解

    CSS超链接样式详解 1.超链接伪类 2.深入了解:hover :hover用于div :hover用于img 3.鼠标样式 浏览器鼠标样式 自定义鼠标样式 1.超链接伪类 在CSS中,我们可以使用& ...

  10. css input 内容换行显示,CSS文本换行详解

    还记不记得昨天发表的<table表格那点事儿>最后的一个问题不?先撇开问题,我们从头说起. 在网页排版中,有些时候是需要文本自动换行的,对于中文来讲,无需设置属性即可自动实现换行,但是对于 ...

最新文章

  1. 我会手动创建线程,为什么让我使用线程池?
  2. C语言,C#语言求100-999内的水仙花数源程序
  3. win7让任务管理器pid显示出来的方法
  4. ode45 matlab 出错,请问,Matlab用ODE45解微分方程,出错
  5. HTML颜色代码表/颜色名(网摘)
  6. C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?
  7. 子矩阵最大累加和(详解)
  8. java servlet ajax_javaweb中ajax请求后台servlet(实例)
  9. python数据模型和各种实用小技巧,保证让你更PYTHONIC
  10. 运行c语言程序显示已停止运行程序,c – “此应用程序已请求运行时以不寻常的方式终止它.”...
  11. 对AI产品经理的一知半解
  12. 百度地图api 城市代码(citycode)
  13. 路飞学城Python-Day1
  14. 转载 ADB logcat 过滤方法(抓取日志)
  15. 关于Chrome的谷歌翻译和IDEA中的Translation翻译插件无法使用的解决方法
  16. pytorch 显存逐渐增大
  17. 雷霆战机的java代码_JavaSwing雷霆战机(飞机大战)源代码
  18. 服务器怎么做虚拟ip,如何在服务器上添加虚拟IP?看完原来如此简单!!
  19. OGG故障集锦(一)
  20. 【Little Demo】从简单的Tab标签到Tab图片切换

热门文章

  1. 学习KNN(一) 图像分类与KNN原理
  2. 使用patch给代码打补丁,快速高效、patch -p1 和p0 的区别
  3. 机构视角筛选底部平台突破股票
  4. lr各种问题以及解决办法
  5. Caffe base_lr递减
  6. java广告排期系统_广告排期管理系统哪个好,或者有什么好的解决方案来管理排期?...
  7. 以下名字 不能作为c语言标识符的是,(完整版)《C语言程序设计》复习参考答案...
  8. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例69
  9. 国外创业者分享之一个iOS游戏赚了多少钱?普通 iOS 应用的收入能否养活自己
  10. Nvidia Agx Xavier平台10Gb PCIE网卡速度限制为1Gb问题调试记录