做一个HTML+CSS实现的头像遮罩散开特效,实用!

HTML+CSS实现的头像遮罩散开特效

在开发中我们经常会遇到一些奇奇怪怪的需求,比如头像的一些特效,比如我之前公司就有这个需求。 先看效果图

这个是不是看起来挺复杂,但其实写出来一点也不费劲,你把它想象成三层结构,其实最底层是一个图片,中间是遮罩,最后是一个图片我们只需要将鼠标hover的时候,设置一个动画效果让图片呈圆形散开就可以了。是不是听着挺简单,那么我们下面来实现它!

首先我们创建一个html文件,写出最基本的配置,需要一个容器添加即可。

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div class="avatar"></div>
  </body>
</html>

接下来重点来了,需要我们强大的css就可以实现的头像特效

css 复制代码
 <style>
      * {
        margin: 0;
        padding: 0;
      }
      .avatar {
        margin: 100px auto;
        background-image: url(./avatar.webp);
        background-size: 110%, 110%;
        background-position: center;
        background-repeat: no-repeat;
        width: 200px;
        height: 200px;
        cursor: pointer;
        position: relative;
        border-radius: 50%;
        border: 2px solid #000;
      }
    </style>

在这段代码中呢 我们只需要给页面把默认的Margin和padding去除,然后给容器一个居中显示的效果,引入自己的头像,为什么我这里大小设置了110%呢因为我这个图片铺不满索性就放大了。接下来设置宽高相对定位圆角即可。

然后我们接着给容器添加伪元素的after和before,以及添加动画效果和定位

css 复制代码
<style>
      * {
        margin: 0;
        padding: 0;
      }
      .avatar {
        margin: 100px auto;
        background-image: url(./avatar.webp);
        background-size: 110%, 110%;
        background-position: center;
        background-repeat: no-repeat;
        width: 200px;
        height: 200px;
        cursor: pointer;
        position: relative;
        border-radius: 50%;
        border: 2px solid #000;
      }
      .avatar::before,
      .avatar::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 100%;
        border-radius: 50%;
        transition: all 0.3s;
        left: 0;
        top: 0;
      }
    </style>

这下我们的三层结构就出来了

下面直接给鼠标添加hover的过渡效果即可

css 复制代码
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .avatar {
        margin: 100px auto;
        background-image: url(./avatar.webp);
        background-size: 110%, 110%;
        background-position: center;
        background-repeat: no-repeat;
        width: 200px;
        height: 200px;
        cursor: pointer;
        position: relative;
        border-radius: 50%;
        border: 2px solid #000;
      }
      .avatar::before,
      .avatar::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 100%;
        border-radius: 50%;
        transition: all 0.3s;
        left: 0;
        top: 0;
      }
      .avatar::before {
        background-color: rgba(0, 0, 0, 0.5);
      }
      .avatar::after {
        background: inherit;
        clip-path: circle(0% at 50% 50%);
      }
      .avatar:hover::after {
        clip-path: circle(50% at 50% 50%);
      }
    </style>

解释一下after中background是继承的父元素,clip-path是裁剪方式

现在跑一下效果就出来了

附上完整代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .avatar {
        margin: 100px auto;
        background-image: url(./avatar.webp);
        background-size: 110%, 110%;
        background-position: center;
        background-repeat: no-repeat;
        width: 200px;
        height: 200px;
        cursor: pointer;
        position: relative;
        border-radius: 50%;
        border: 2px solid #000;
      }
      .avatar::before,
      .avatar::after {
        content: "";
        position: absolute;
        width: 100%;
        height: 100%;
        border-radius: 50%;
        transition: all 0.3s;
        left: 0;
        top: 0;
      }
      .avatar::before {
        background-color: rgba(0, 0, 0, 0.5);
      }
      .avatar::after {
        background: inherit;
        clip-path: circle(0% at 50% 50%);
      }
      .avatar:hover::after {
        clip-path: circle(50% at 50% 50%);
      }
    </style>
  </head>
  <body>
    <div class="avatar"></div>
  </body>
</html>

觉得有所帮助的话,点击关注收藏不迷路哦~

相关推荐
想学后端的前端工程师9 分钟前
【浏览器工作原理与性能优化指南:深入理解Web性能】
前端·性能优化
程序员爱钓鱼14 分钟前
Node.js 编程实战:错误处理与安全防护
前端·后端·node.js
Geoffwo16 分钟前
Electron 打包后 exe 对应的 asar 解压 / 打包完整流程
前端·javascript·electron
柒@宝儿姐18 分钟前
vue3中使用element-plus的el-scrollbar实现自动滚动(横向/纵横滚动)
前端·javascript·vue.js
程序员爱钓鱼19 分钟前
Node.js 编程实战:模板引擎与静态资源
前端·后端·node.js
Geoffwo19 分钟前
Electron打包的软件如何使用浏览器插件
前端·javascript·electron
Sui_Network21 分钟前
Sui 2025→2026 直播回顾中文版
大数据·前端·人工智能·深度学习·区块链
打小就很皮...30 分钟前
网页包装为桌面应用(electron版)
前端·electron
用户91743965391 小时前
基于SqlSugar开发框架的基础上快速开发H5端的移动应用
前端·负载均衡
Yesterday不想说话1 小时前
Promise的总结
前端