搜索

CSS 教学

基本介绍

认识 CSS 开始使用 CSS CSS 语法规则 CSS 命名原则 CSS 常用样式属性

CSS 选择器

认识 CSS 选择器 优先级 ( 权重 ) 样式继承与联集 使用巢状结构语法 元素选择器 ID 和 Class 选择器 属性选择器 文件结构选择器 虚拟类别选择器 ( 结构 ) 虚拟类别选择器 ( 类型 ) 虚拟类别选择器 ( 输入 ) 虚拟类别选择器 ( 行为 ) 虚拟类别选择器 ( 超链接 ) 虚拟类别选择器 ( 逻辑 ) 虚拟类别选择器 ( 其他 ) 虚拟元素选择器 群组与组合选择器

数值与单位

全域关键字与文字数值 长度与角度单位 位置名称与时间单位 特殊样式属性 ( all、appearance)

规则与定义

变数 ( Variables ) 媒体查询 ( @media ) 容器查询 ( @container ) 自订属性值 ( @property ) 导入样式 ( @import ) 分层优先级 ( @layer ) 选择器作用域 ( @scope ) 定义字型 ( @font-face ) 计数规则 ( @counter-style ) 打印网页 ( @page )

函数类型

数学计算 文字与清单计数 形状与线段 路径 ( path )

颜色与滤镜

颜色单位 色彩模型 相对颜色 渐层色 图像滤镜 ( filter ) 背景滤镜 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字与段落

设定字型 ( font-family ) 使用外部字型 文字尺寸 文字样式 ( 常用 ) 文字样式 ( 其他实用 ) 文字样式 ( 特殊用途 ) 文字换行 文字空白与 Tab 大小 文字行高与缩排 文字水平与垂直对齐 文字书写方向 文字自动分栏 使用 Color Font ( 彩色字型 ) 使用 Icon Font ( 图示文字 ) 制作自己的 Icon Font 显示生成内容与引号

元素容器

容器显示类型 ( display ) 元素 display 对照表 盒子模型 ( Box Model ) 宽高尺寸 ( width、height ) 显示与比例 ( box-sizing、aspect-ratio ) 内边距 ( padding ) 外边界 ( margin ) 边框 ( border ) 边框圆角 ( border-radius ) 图像边框 ( border-image ) 轮廓 ( outline ) 内容溢出与裁切 ( overflow ) 内容范围 ( contain ) 可见性与透明度 缩放与调整 ( zoom、resize )

背景与阴影

背景 ( 背景色、背景裁切 ) 背景图 ( 定位、尺寸 ) 背景图 ( 固定、重复 ) 背景图 ( 多重背景、混合 ) 背景缩写 ( background ) 容器阴影 ( box-shadow )

清单与表格

清单样式 清单计数器 表格基本样式 表格边框重叠与间距 表格内容宽度与对齐

基本排版与定位

元素排版方式 浮动 ( float ) 浮动形状 ( shape-* ) 定位 ( position ) 逻辑属性 ( logical properties ) 重置 CSS ( Reset CSS ) 水平置中技巧 垂直置中技巧

Flex 弹性排版

Flexbox 弹性盒子 Flex 对齐方式 Flex 弹性伸缩

Grid 网格排版

Grid 网格容器与格线 Grid 网格空间与命名 Grid 网格流向与间距 Grid 排列网格项目 Grid 项目对齐与顺序

转场与动画

转场 ( transition ) 转场触发事件 动画 ( animation ) 自订动画路径 ( offset ) 动画触发事件 多重动画的权重与顺序 动画进度控制 ( timeline )

变形、裁切与遮罩

裁切路径 ( clip-path ) 图像遮罩 ( mask ) 对象填满方式与定位 转换函数 ( transform ) 平移、旋转与缩放 3D 转换与透视

视窗与用户行为

卷轴样式 ( scrollbar ) 拉霸、滑杆样式 ( slider ) 鼠标光标图示 ( cursor ) 鼠标事件 ( pointer-events ) 用户选取 ( user-select ) 卷动行为 ( scroll、overscroll ) 打印换页 ( break-* )

CSS 预处理器

认识 CSS 预处理器 Less ( 安装、开始使用 ) Less ( 巢状结构、选择器 ) Less ( 变数、import ) Less ( Extend、Mixin ) Less ( 逻辑、循环、函数 )

范例效果

CSS 多重绕圈 3D 动画 CSS 圆饼图 CSS 跑马灯 Google 加载动画 电子时钟数字 渐层色的转场与动画 渐层色制作星空背景 渐层色边框 渐层色制作图案背景 不规则形状动画 弹跳的正方形动画 3D 正多面体 超链接底线动画效果 恶心黏黏球效果 CSS 视差滚动效果 卷轴控制放射形选单 卷轴改变文字背景色 CSS 页面卷动进度条 CSS 水波效果 圆点加载动画 ( 阴影动画 ) 字母翻牌效果 探照灯动画 立体双色跑马灯 楼梯文字动态效果 渐层色文字、双色文字 流动色彩文字 空心文字、文字水波背景 左右倾斜的背景效果 Icon 图示形状变换 故障文字效果 按钮的多种 hover 效果 点击展开或收折的选单 点击爱心图案放射效果 纯 CSS 数字加载进度条 纯 CSS 码表 ( 可计时 )

容器阴影 ( box-shadow )

CSS 有三种设定阴影的方法,一种是使用图像滤镜函数,一种是文字阴影,而这篇教学会介绍最基本的“容器阴影 box-shadow”,简单又快速的替元素加上阴影,甚至做出多重阴影的效果。

快速导览:

CSS 教学 - CSS box-shadow 容器阴影

教学影片

搭配教学影片一起阅读,效果会更好!欢迎大家订阅 STEAM 教育学习网的 Youtube 频道。

前往:https://www.youtube.com/@steam.oxxostudio

使用 box-shadow

box-shadow 可以设定元素的“容器阴影”,没有继承特性,box-shadow 的属性值为多种属性值的组合,各个属性值之间使用空白分隔,下方列出支援的属性值:

属性值 默认值 说明
inset - 关键字属性值,出现该属性值后,阴影变成内阴影。
offset-x 必填数值 第一个数值为阴影的 x 位移 ( 使用 px ),正往右,负往左。
offset-y 必填数值 第二个数值为阴影的 y 位移 ( 使用 px ),正往下,负往上。
blur-radius 0 第三个数值为阴影的模糊半径 ( 使用 px ),最小为 0,数值越大越模糊。
spread-radius 0 第四个数值为阴影的缩放半径 ( 使用 px ),正变大,负变小。
color 元素文字颜色 阴影颜色,支援 CSS 所有色彩单位写法。

下方列出一些符合规范写法的 box-shadow 范例:

线上展示:https://codepen.io/oxxo/pen/KKjMoPw

<!-- HTML 程式碼 -->
<div class="a">box-shadow: 10px 10px;</div>
<div class="b">box-shadow: 10px 10px 10px;</div>
<div class="c">box-shadow:  10px 10px -6px;</div>
<div class="d">box-shadow: 10px 10px 10px -6px;</div>
<div class="e">box-shadow: 10px 10px 10px -6px red;</div>
<div class="f">box-shadow: 10px 10px 10px 5px #0005;</div>
<div class="g">box-shadow: inset 10px 10px 5px #0005;</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 300px;
    height: 30px;
    border: 1px solid #000;
    margin: 20px;
    padding: 5px;
    font-size:14px;
  }
  .a {box-shadow: 10px 10px;}           /* 沒有模糊的黑色陰影 */
  .b {box-shadow: 10px 10px 10px;}      /* 模糊的黑色陰影 */
  .c {box-shadow: 10px 10px 10px -6px;} /* 模糊的縮小黑色陰影 */
  .d {
    color: red;
    box-shadow: 10px 10px 10px -6px;    /* 使用元素文字顏色的模糊又縮小的紅色陰影 */
  }
  .e {box-shadow: 10px 10px 10px -6px red;}    /* 模糊的縮小紅色陰影 */
  .f {box-shadow: 10px 10px 10px 5px #0005;}   /* 模糊的放大黑色半透明陰影 */
  .g {box-shadow: inset 10px 10px 5px #0005;}  /* 模糊的黑色半透明內陰影 */
</style>

CSS 教学 - 容器阴影 box-shadow - 使用 box-shadow

box-shadow 的显示行为

因为 box-shadow 是“容器”外部的阴影,所以有下列的显示行为:

  • 外阴影从容器 border 外缘向外延伸,内阴影从容器 border 内缘向内延伸。
  • 阴影只会呈现“矩形、圆角矩形”的形状。
  • 元素内容区域里不会显示阴影 ( 就算元素设定为透明背景或没有背景图 )。
  • 阴影不会影响 padding、margin 或 border 等容器边界范围。
  • 阴影的图层和元素相同,在上层的元素阴影会覆盖下层元素。

下方列出使用三个 div 作为范例,表现圆角阴影、透明背景元素的阴影以及阴影图层的关系:

线上展示:https://codepen.io/oxxo/pen/zYVBWOZ

<!-- HTML 程式碼 -->
<div class="a">背景透明,元素裡沒有陰影,<br/>圓角陰影</div>
<div class="b">不會被前面元素的陰影覆蓋,<br/>但會被後面元素的陰影覆蓋</div>
<div class="c">元素位於最上層,陰影也就在最上層</div>


<!-- CSS 程式碼 -->
<style>
  main {
    background: orange;
    padding: 20px;
  }
  div {
    width: 200px;
    height: 50px;
    border: 1px solid #000;
    margin: 10px;
    padding: 5px;
    font-size:13px;
    box-shadow: 20px 20px 5px #000a;
    background: #fff;
  }
  .a {
    background: none;     /* 設定元素沒有背景,可以看到下方是 main 的背景色而沒有陰影 */
    border-radius: 20px;  /* 陰影變成圓角 */
  }
  .b {border-radius: 50px;}  /* 陰影變成圓角 */
  .c {box-shadow: 50px -20px 10px #f00a;}  /* 讓陰影往上移動,遮住上面的元素 */
</style>

CSS 教学 - 容器阴影 box-shadow - box-shadow 的显示行为

多重阴影

box-shadow 可以使用“逗号 ,”分隔不同的阴影,创造出阴影“叠加”的“多重阴影”的效果,写在越上方的阴影所在图层越高,会遮蔽写在下方的阴影,使用时需要注意,只要某一项阴影格式写错,就会发生样式错误而无法显示阴影。

下方的范例实作多重阴影的效果。

线上展示:https://codepen.io/oxxo/pen/VwJjXZx

<!-- HTML 程式碼 -->
<div class="a">Apple</div>
<div class="b">Banana</div>
<div class="c">OXXO</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 50px;
    border: 1px solid #000;
    margin: 30px;
    padding: 5px;
    text-align: center;
  }
  .a {
    box-shadow:
      2px 2px red,
      4px 4px orange,
      6px 6px yellow,
      8px 8px green,
      10px 10px blue,
      12px 12px purple;
  }
  .b {
    box-shadow:
      2px 2px 2px red,
      4px 4px 4px orange,
      6px 6px 6px yellow,
      8px 8px 8px  green,
      10px 10px 10px blue,
      12px 12px 12px purple;
  }
  .c {
    box-shadow:
      0 5px 0 -2px #555,
      0 10px 0 -4px #555,
      0 15px 0 -6px  #444,
      0 20px 0 -8px #333,
      0 25px 0 -10px #222,
      0 30px 0 -12px #222,
      0 35px 0 -14px #222,
      0 40px 0 -16px #111,
      0 45px 0 -18px #111,
      0 50px 0 -20px #111,
      0 55px 20px -15px #000b;
  }
</style>

CSS 教学 - 容器阴影 box-shadow - box-shadow 多重阴影

不可置换行内容器的阴影

虽然不可置换行内容器无法调整宽高 ( 文字样式的显示类型大多都是 inline ),但却可以透过 padding 或 border 增加元素容器的范围,又因为阴影是从 border 外缘开始扩展,如果有设定不可置换行内容器的 padding 或 border,就会发生阴影覆盖到其他内容,或元素内容换行后阴影断开等奇妙效果。

不可置换行内容器表示不会透过 src 等属性改变元素内容。

下方的范例设定了 strong 和 em 这两个行内容器元素的 padding 数值,最后就会呈现奇妙的阴影效果。

线上展示:https://codepen.io/oxxo/pen/wvLWmwb

<!-- HTML 程式碼 -->
<div>
  <span><strong>STEAM 教育學習網</strong>透過免費且高品質的<em>教學與範例</em>讓所有人都能輕鬆跨入 STEAM 的學習領域。</span>
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 50px;
    border: 1px solid #000;
    margin: 50px;
    padding: 5px;
  }
  strong {
    padding: 30px 10px;
    box-shadow: 2px 2px 5px 5px red;
  }
  em {
    padding: 30px 10px;
    box-shadow: 2px 2px 5px 5px blue;
  }
</style>

CSS 教学 - 容器阴影 box-shadow - 不可置换行内容器的阴影

可置换行内容器的阴影

网页中的图片元素 img 或 svg 都属于“可置换”行内容器 ( 显示类型大多都是 inline-block ),这些元素都是矩形的容器,套用阴影后的效果大致上和其他元素套用阴影的效果相同,但内阴影会被图片本身遮住,需要注意透明背景的图片,套用阴影后仍然会使用“矩形”方式呈现阴影,如果要完美呈现阴影,可以参考“drop-shadow()”。

下方的范例会替图片加入阴影,可以观察透明背景图片使用阴影和内阴影产生的有趣效果。

线上展示:https://codepen.io/oxxo/pen/MWMeVWy

<!-- HTML 程式碼 -->
<img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.png">
<img src="https://steam.oxxostudio.tw/image/index-css.jpg">
<img class="a" src="https://steam.oxxostudio.tw/download/css/function-filter-demo.png">


<!-- CSS 程式碼 -->
<style>
  body {
    background: yellow;
  }
  img {
    margin: 10px;
    width: 200px;
    box-shadow: 5px 5px 10px;
  }
  .a {
    box-shadow: inset 5px 5px 40px 10px;
  }
</style>

CSS 教学 - 容器阴影 box-shadow - 可置换行内容器的阴影

将阴影当作边框使用

在网页排版时,因为“边框宽度”会影响容器范围,进而造成排版的连锁反应 ( 一个推挤一个 ),如果要避开边框宽度的影响,也能使用“不具有模糊的阴影”,就能让阴影伪装成边框,这种做法甚至可以使用多重阴影的效果,做出混合多种颜色的边框。

下方范例会使用阴影代替边框,做出三种不同的“伪”边框。

线上展示:https://codepen.io/oxxo/pen/eYwzMmd

<!-- HTML 程式碼 -->
<div class="a">Apple</div>
<div class="b">Banana</div>
<div class="c">OXXO</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 100px;
    height: 50px;
    padding: 5px;
    margin: 30px;
  }
  .a {box-shadow: 0 0 0 2px;}
  .b {box-shadow: 0 0 0 8px pink;}
  .c {
    box-shadow: 
      0 0 0 2px red,
      0 0 0 4px orange,
      0 0 0 6px yellow,
      0 0 0 8px green,
      0 0 0 10px blue,
      0 0 0 12px purple;
  }
</style>

CSS 教学 - 容器阴影 box-shadow - 将阴影当作边框使用

下方范例中的第一组选单使用边框 ( 黄色背景 ) ,可以发现鼠标移动上去时,会产生不顺畅的推挤现象,而第二组选单使用阴影代替边框 ( 橘色背景 ),就不会有这种状况。

线上展示:https://codepen.io/oxxo/pen/YzoWaPv

<!-- HTML 程式碼 -->
<div class="a">
  <a href="">apple</a>
  <a href="">banana</a>
  <a href="">oxxo</a>  
</div>
<div class="b">
  <a href="">apple</a>
  <a href="">banana</a>
  <a href="">oxxo</a>  
</div>

<!-- CSS 程式碼 -->
<style>
  div {
    margin: 30px;
  }
  .a a {
    background: yellow;
    padding: 10px;
    border: 1px solid #000;
    transition: .3s;
  }
  .a a:hover {
    border: 5px solid #000;
  }
  .b a {
    background: orange;
    padding: 10px;
    box-shadow: 0 0 0 1px #000;
    transition: .3s;
  }
  .b a:hover {
    box-shadow: 0 0 0 5px #000;
  }
</style>

CSS 教学 - 容器阴影 box-shadow - 避开边框宽度的影响排版

小结

使用 box-shadow 可以很快速的替元素添加阴影效果,是许多网站常用的样式属性,不论是鼠标悬停或凸显特殊元素,都常常会看见 box-shadow 的身影。

意见反馈

微信二维码 微信扫码关注 抖音二维码 抖音扫码关注