Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 效果

    • 让人眼前一亮的 hover 效果
    • CSS 实现鼠标滑过卡片上浮效果
      • 📖. 原理
      • 一. 鼠标悬浮仿纸张折起的样式
      • 二. 鼠标悬浮仿纸张聚焦的样式
      • 三. 鼠标悬浮仿纸张抬起的样式
      • 四. 鼠标悬浮仿纸张升起的样式(动画实现)
  • 属性

  • 其他

  • 《CSS》笔记
  • 效果
Jamey
2020-01-06
目录

CSS 实现鼠标滑过卡片上浮效果

# CSS 实现鼠标滑过卡片上浮效果

几行简单的 CSS 代码,实现页面元素在鼠标悬停时的浮起特效,类似于纸张折起的效果。

# 📖. 原理

hover 的时候对元素设置阴影:box-shadow,使其样式与常态不同。

box-shadow 表达式参见 MDN (opens new window):

/* x偏移量 | y偏移量 | 阴影颜色 */
box-shadow: 60px -16px teal;

/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影颜色 */
box-shadow: 10px 5px 5px black;

/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

/* 插页(阴影向内) | x偏移量 | y偏移量 | 阴影颜色 */
box-shadow: inset 5em 1em gold;

/* 任意数量的阴影,以逗号分隔 */
box-shadow: 3px 3px red, -1em 0 0.4em olive;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

指定单个 box-shadow 的用法:

  • 给出两个、三个或四个数字值的情况。
    • 如果只给出两个值,这两个值将被浏览器解释为 x 轴上的偏移量 和 y 轴上的偏移量。
    • 如果给出了第三个值,这第三个值将被解释为模糊半径的大小。
    • 如果给出了第四个值,这第四个值将被解释为扩展半径的大小。
  • 可选,插页(阴影向内) inset。
  • 可选,颜色值。

声明多个 shadows 时,用逗号将 shadows 隔开。

下面列举几种样式,也是在本博客系统中多次用到的。

# 一. 鼠标悬浮仿纸张折起的样式

代码实现:

在 hover 状态增加了 transition 属性,从而产生渐变的效果。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>鼠标悬浮仿纸张折起的样式</title>
  <style type="text/css">
    /* 核心样式 */
    .card1 {
      width: 300px;
      height: 180px;
      border: 10px solid #FFF;
      border-bottom: 0 none;
      background-color: #FFF;
      box-shadow: 0 1px 1px 0 rgba(0, 0, 0, .15)
    }

    .card1:hover {
      box-shadow: 0 5px 5px 0 rgba(0, 0, 0, .25);
      transition: all .2s ease-in-out;
    }

    /* 非核心样式 */
    .card1-header {
      text-align: center;
    }

    .card1-body, .card1-footer {
      text-align: left;
    }
  </style>
</head>

<body style="background: #e3e3e3;">
  <div class="card1">
  <div class="card1-header">
    <p>这是一张卡片</p>
  </div>
  <div class="card1-body">
    <p>描述:鼠标悬浮时,类似纸张折起的效果</p>
  </div>
  <div class="card1-footer">
    <p>原理:改变 y 轴上的偏移和阴影扩散半径(第二、三个数字)</p>
  </div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 二. 鼠标悬浮仿纸张聚焦的样式

代码实现:

与上面的区别是调整了 box-shadow 属性的具体数值( y 轴上的偏移和阴影扩散半径,即第二、三个数字)。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>鼠标悬浮仿纸张聚焦的样式</title>
  <style type="text/css">
    /* 核心样式 */
    .card2 {
      padding: 10px;
      width: 300px;
      height: 180px;
      background-color: #FFF;
      box-shadow: none;
    }

    .card2:hover {
      box-shadow: 0 1px 6px 0 rgba(0, 0, 0, .2);
      border-color: #eee;
      transition: all .2s ease-in-out;
    }

    /* 非核心样式 */
    .card2-header {
      text-align: center;
    }

    .card2-body, .card2-footer {
      text-align: left;
    }
  </style>
</head>

<body style="background: #e3e3e3;">
  <div class="card2">
  <div class="card2-header">
    <p>这是一张卡片</p>
  </div>
  <div class="card2-body">
    <p>描述:鼠标悬浮时,整张纸聚焦的效果</p>
  </div>
  <div class="card2-footer">
    <p>原理:改变 y 轴上的偏移和阴影扩散半径(第二、三个数字)</p>
  </div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

# 三. 鼠标悬浮仿纸张抬起的样式

代码实现:

通过 box-shadow 属性和 transform 属性相结合。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>鼠标悬浮仿纸张抬起的样式</title>
  <style type="text/css">
    /* 核心样式 */
    .card3 {
      padding: 10px;
      width: 300px;
      height: 180px;
      background-color: #FFF;
      border: none;
      border-radius: 6px;
      -webkit-transition: all 250ms cubic-bezier(0.02, 0.01, 0.47, 1);
      transition: all 250ms cubic-bezier(.02, .01, .47, 1);
    }

    .card3:hover {
      box-shadow: 0 16px 32px 0 rgba(48, 55, 66, 0.15);
      transform: translate(0,-5px);
      transition-delay: 0s !important;
    }

    .box3-shadow {
      -webkit-box-shadow: 0 0.25rem 1rem rgba(48, 55, 66, 0.15);
      box-shadow: 0 4px 16px rgba(48, 55, 66, 0.15);
    }

    /* 非核心样式 */
    .card3-header {
      text-align: center;
    }

    .card3-body, .card3-footer {
      text-align: left;
    }
  </style>
</head>

<body style="background: #e3e3e3;">
  <div class="card3 box3-shadow">
  <div class="card3-header">
    <p>这是一张卡片</p>
  </div>
  <div class="card3-body">
    <p>描述:鼠标悬浮时,整张纸抬起的效果</p>
  </div>
  <div class="card3-footer">
    <p>原理:增加 transform 属性</p>
  </div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

# 四. 鼠标悬浮仿纸张升起的样式(动画实现)

代码实现:

使用 @keyframes 规则创建动画,将一套 CSS 样式逐渐变化为另一套样式。

在悬浮状态下执行动画。

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title>鼠标悬浮仿纸张升起的样式</title>
  <style type="text/css">
    /* 核心样式 */
    .card4 {
      padding: 10px;
      width: 300px;
      height: 180px;
      background-color: #FFF;
      border: none;
      border-radius: 6px;
      -webkit-transition: all 250ms cubic-bezier(0.02, 0.01, 0.47, 1);
      transition: all 250ms cubic-bezier(.02, .01, .47, 1);
    }

    .card4:hover {
      animation: fly 0.0001s linear;
      animation-fill-mode: both;
    }

    @keyframes fly {
      0% {
        box-shadow: 2px 2px 2px #e2dede, -2px 2px 2px #e2dede;
      }
      100% {
        box-shadow: 6px 8px 12px #e2dede, -6px 8px 12px #e2dede;
      }
    }

    /* 非核心样式 */
    .card4-header {
      text-align: center;
    }

    .card4-body, .card4-footer {
      text-align: left;
    }
  </style>
</head>

<body style="background: #e3e3e3;">
  <div class="card4 box-shadow">
  <div class="card4-header">
    <p>这是一张卡片</p>
  </div>
  <div class="card4-body">
    <p>描述:鼠标悬浮时,整张纸升起的效果</p>
  </div>
  <div class="card4-footer">
    <p>原理:使用 @keyframes 规则创建动画</p>
  </div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#CSS
上次更新: 2022/07/01, 17:34:19
让人眼前一亮的 hover 效果
要用却记不住的 CSS 属性

← 让人眼前一亮的 hover 效果 要用却记不住的 CSS 属性→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式