当前位置: 首页 > news >正文

css mask 案例

文章目录

  • 一、基本用法
  • 二、图案遮罩
  • 二、文字阴影效果
  • 三、日历探照灯效果

CSS的mask属性用于定义一个可重复使用的遮罩,可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性,可以创建独特的效果,比如圆形、渐变或图案性的遮罩。

一、基本用法

mask和background属性基本是一致的,主要有以下:

  • mask-image:用于指定要用作遮罩的图像。可以是任何有效的图像路径。
  • mask-mode:设置遮罩的模式,例如alpha、luminance或luminance-inverted。这决定了遮罩如何影响元素。
  • mask-position:确定遮罩的位置,例如center、top、left等。
  • mask-size:指定遮罩的尺寸。可以是具体的数值或关键字,如cover、contain等。

想要了解更多值可以参考MDN官网。本篇博客主要讲mask案例效果

二、图案遮罩

在这里我们会用到两张图片,即下面的猫图片和爱心图片。我们想实现的效果即是将猫放入爱心中,爱心之外的图片剪切掉。

基本图片
在这里插入图片描述
在这里插入图片描述
实现效果

在这里插入图片描述

案例代码

<template><div class="mask"><img src="@/assets/cat.png" alt="" /></div>
</template><script setup lang="ts">
import { ref, reactive } from "vue";
</script>
<style scoped>
.mask {width: 1200px;height: 780px;-webkit-mask-image: url("../../assets/love.png");-webkit-mask-repeat: no-repeat;-webkit-mask-size: 100% 100%;
}
img {width: 1200px;height: 780px;
}
</style>

二、文字阴影效果

在这里插入图片描述
如上图所示,文字的阴影从远到近看起来有种由虚到实的效果。我们也可以采用mask-image来实现

<template><div class="reflection"><span> HELLO WORLD </span></div>
</template><script setup lang="ts">
import { ref, reactive } from "vue";
</script>
<style scoped lang="scss">
.reflection {display: flex;justify-content: center;align-items: center;width: 500px;height: 200px;color: #fff;background-color: #f5e1da;span {position: relative;z-index: 2;font-size: 50px;font-weight: bolder;&::before {position: absolute;left: 0px;bottom: 0px;z-index: -1;content: "HELLO WORLD";transform: translate(-18px, 7px) scaleY(0.5) skew(45deg);color: #000;filter: blur(2px);   //模糊-webkit-mask-image: linear-gradient(0deg, black, transparent);}}
}
</style>

在上面案例中,阴影部分采用的是伪类进行实现,并对阴影进行缩放倾斜等效果。最后采用模糊,遮罩实现由虚到实的效果

三、日历探照灯效果

在这里插入图片描述
我们可以看见,鼠标位置变化照亮周围的边框,这个实现也可以采用mask-image来实现

<template><div ref="gridBody" class="grid-body"><div ref="gridMask" class="grid-mask"><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div></div><div class="grid-item">1</div><div class="grid-item">2</div><div class="grid-item">3</div><div class="grid-item">4</div><div class="grid-item">5</div><div class="grid-item">6</div><div class="grid-item">7</div><div class="grid-item">8</div><div class="grid-item">9</div></div><router-view></router-view>
</template>
<script setup lang="ts">
import { ref, onMounted } from "vue";const gridBody = ref<any>(null);
const gridMask = ref<any>(null);onMounted(() => {let bounding = gridMask.value?.getBoundingClientRect();gridBody.value?.addEventListener("mousemove", (e: MouseEvent): void => {let x = e.pageX;let y = e.pageY;gridMask.value.style.webkitMaskPosition = `${x - bounding.x - 80}px ${y - bounding.y - 80}px`;});
});
</script><style scoped lang="scss">
.grid-body {width: 300px;height: 300px;padding: 10px;box-sizing: border-box;position: relative;display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;cursor: default;color: rgba(255, 255, 255, 0.8);background-color: rgb(60, 60, 60);
}.grid-item {display: flex;align-items: center;justify-content: center;border: 3px solid rgba(255, 255, 255, 0);
}.grid-mask {width: 100%;height: 100%;padding: 10px;box-sizing: border-box;position: absolute;display: grid;grid-template-columns: repeat(3, 1fr);gap: 10px;background: transparent;-webkit-mask-image: radial-gradient(circle at center,white 0%,transparent 80px);-webkit-mask-repeat: no-repeat;-webkit-mask-size: 160px 160px;pointer-events: none;
}.grid-mask div {border: 3px solid rgba(255, 255, 255, 0.5);
}
</style>

日历探照灯案例是参考了另一位博主,在这里实现过程我就不过多赘述,效果不错,小伙伴们也可以自己动手实现一下
想要看日历探照灯具体实现思路,可以跳转至https://blog.csdn.net/weixin_42662269/article/details/119859827

相关文章:

  • 13章总结
  • python哈希算法实现
  • 智慧工地项目端监管端一体化SaaS云平台源码(微服务架构)
  • uni-app 命令行创建
  • 《软件需求分析报告》
  • [RISCV] 为android14添加一个新的riscv device
  • C语言中switch语句中的case后()
  • React TSX 从一组二维数据中,重新挑选数组组成新数组示例:
  • 实现 Spring Boot 项目热重载,无需重启,省时省力
  • DDOS攻击简介——什么是DDOS
  • PyQt5实现学生管理系统第三天(下)
  • 无法获取前置摄像头的预览图像?【Bug已解决-鸿蒙开发】
  • JavaScript 数组【详解】
  • LabVIEW在横向辅助驾驶系统开发中的应用
  • Spring中的上下文工具你写的可能有bug
  • 【347天】每日项目总结系列085(2018.01.18)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • mongodb--安装和初步使用教程
  • PHP 小技巧
  • PHP面试之三:MySQL数据库
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring Cloud Feign的两种使用姿势
  • tweak 支持第三方库
  • 不上全站https的网站你们就等着被恶心死吧
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零开始学习部署
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聚类分析——Kmeans
  • 开源SQL-on-Hadoop系统一览
  • 通过几道题目学习二叉搜索树
  • 微信小程序开发问题汇总
  • 无服务器化是企业 IT 架构的未来吗?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • ionic异常记录
  • 选择阿里云数据库HBase版十大理由
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (Forward) Music Player: From UI Proposal to Code
  • (Git) gitignore基础使用
  • (理论篇)httpmoudle和httphandler一览
  • .bat文件调用java类的main方法
  • .FileZilla的使用和主动模式被动模式介绍
  • .htaccess配置重写url引擎
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .Net 代码性能 - (1)
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 设置默认首页
  • .net开发时的诡异问题,button的onclick事件无效
  • [ C++ ] STL---stack与queue
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • []指针