CSS3复杂动画效果

    |     2020年5月25日   |   web前端技术, 动画   |     0 条评论   |    822

电子简历里的「项目经验」卡片,常用一层裁切容器加一层可放大的背景图,再叠标题、说明和图标。 下面这组 CSS3 用 transform、transition 和半透明遮罩,做出鼠标移入后图片放大、文字从中心散开的效果。站点示例文案仍是「雨果学院 / 技术-HTML5-CSS3」。

结构很薄:最外 .container 负责 300×300 居中并 overflow: hidden;内层 .wrap 铺背景图;再内层 .bg-wrap 叠文字。动效全部写在 :hover 上,不必上 JavaScript。

animal

一、HTML 结构

三层盒子套在一起即可。注释里的尺寸要和 CSS 对上,否则裁切边会对不齐:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>电子简历-项目经验</title>
    <link rel="stylesheet" href="css/style-outer.css" />
    <link rel="stylesheet" href="css/font-style.css" />
  </head>
  <body>
    <!-- container 溢出隐藏 高宽:300px -->
    <div class="container">
      <!-- wrap 背景图片 高宽:280px -->
      <div class="wrap">
        <!-- bg-wrap 背景透明 -->
        <div class="bg-wrap">
          <h3>雨果学院</h3>
          <p>技术-HTML5-CSS3</p>
          <span class="icon-search"></span>
        </div>
      </div>
    </div>
  </body>
</html>

二、CSS 动效

body 用 flex 把卡片摆到视口正中。.wrap 的 transition: all .3s ease-out 让放大和遮罩都有过渡。注意选择器 .container .wrap .bg-wrap h3,p,span 里的 p,span 没有限定在 .bg-wrap 内,实际项目里建议写成 .bg-wrap h3, .bg-wrap p, .bg-wrap span,避免误伤页面其他段落。

*{padding: 0;margin: 0; font-size: 14px; color: rgb(214, 65, 65);}
a{text-decoration: none;}

/* 整个元素水平垂直居中 */
body{
    height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
}

/* 设置图片元素,水平垂直居中,溢出隐藏 */
.container{
    width: 300px;
    height: 300px;
    display: flex;
    justify-content: center;
    align-items: center;
    overflow: hidden;
}

/* 设置背景图片 */
.container .wrap{
    width: 280px;
    height: 280px;
    background: url('../image//01.jpg') no-repeat;
    transition: all .3s ease-out;
    background-size: cover;
}

/* 鼠标移入背景图放大效果 */
.container .wrap:hover{
    transform: scale(1.3);
}

/* 背景全透明,内部元素水平垂直居中 */
.container .wrap .bg-wrap{
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0);
    transition: all 0.3s ease-out;
    display: flex;
    justify-content: center;
    align-items: center;
    position: relative;
}
/* 背景透明显示 */
.container .wrap:hover .bg-wrap{
    background-color: rgba(0, 0, 0, .4);
}

/* 元素重叠效果 */
.container .wrap .bg-wrap h3,p,span{
    position: absolute;
    transition: all .3s ease-out;
    color: white;
    opacity: 0;
}

/* 上面元素向上移动,放大效果 */
.container .wrap:hover .bg-wrap h3{
    opacity: 1;
    transform: translateY(-40px) scale(1.3);
    font-size: 14px;
}

/* 中间元素放大效果 */
.container .wrap:hover .bg-wrap p{
    transform: translateY(0) scale(1.3);
    font-size: 12px;
    opacity: 1;
}

/* 下面元素向下移动,放大效果 */
.container .wrap:hover .bg-wrap span{
    transform: translateY(40px) scale(1.3);
    opacity: 1;
}

三、悬停时发生了什么

目标 默认 hover 后
.wrap 280×280 背景图 transform: scale(1.3) 放大,外层裁掉溢出
.bg-wrap 完全透明 半透明黑遮罩 rgba(0,0,0,.4)
标题 h3 绝对定位、透明 上移 40px 并放大
说明 p 绝对定位、透明 原位放大到可见
图标 span 绝对定位、透明 下移 40px 并放大

三层文字都 position: absolute,叠在同一中心;靠 translateY 往三个方向散开,才有「从中心爆开」的观感。overflow: hidden 是关键:图片放大后边缘被切掉,卡片外轮廓始终是正方形。

一句话总结:用裁切容器包住可缩放背景,hover 时加遮罩并用 translateY 把标题、说明、图标从中心散开,就是这套 CSS3 卡片动画。

转载请注明来源:CSS3复杂动画效果
本文链接地址:https://ai.zhousir.top/?p=2968
回复 取消