css让背景图片显示透明遮罩_CSS项目测试(支持深色模式)

*事先声明:本文章教程教学、文章封面来源自[CSS]聚光灯项目 by CodingStartup起码课,且已经CodingStartup起码课授权允许转载!

为了保持原有风格,本文始终保持与@CodingStartup起码课的视频风格一致

*在出现同样的代码块时,灰色为原有代码,彩色为新增/修改代码

Hello,Everybody

今天我们不讲别的,就来讲讲利用CSS做一个聚光灯。

先给大家放个例子:https://itmanchina.github.io/css-test(复制到浏览器打开)

到这里,有的小伙伴会问啦,这是怎么做到的?好神奇!

其实很简单,一层灰色的底层文字;顶层文字为彩色,套用css的圆形遮罩(Mask),再加上css animation(移动效果)就可以了。

OK,回归正题:

项目总共分成两个部分

1.html

2.css*

因为html只占少量内容,我们重点把放在css上

(以下内容推荐到codepen.io或者其它代码实时预览网站测试!)

html部分:

<h1>TestTexth1>

css部分:

html {  font-size: 15px; }/*这里把文字【TestText】的大小设定为15px(不懂px的小伙伴请百度Picture  Element 【Pixel】) */
body{  background-color: #222;  /*背景颜色设为灰色*/  display: flex;  justify-content: center;  align-items: center;  min-height: 100vh;  }  /*这一段css把文字【TestText】固定在html最中间的位置*/
h1{  color: #333; /*这里设定字体的颜色为灰黑色*/  font-family: Helvetica; /*这里设置字体为Helvetica(常用于西方语言字母)*/  margin: 0;  padding: 0;  font-size: 8rem; /*文字大小设定*/  letter-spacing: -0.2rem; /*文字间距设定*/}/*知识点1:rem 它是CSS3中新增加的一个尺寸(度量)单位,根节点(html)的font-size决定了rem的尺寸,也就是说它是一个相对单位,相对于(html)。*//*知识点2:margin 这个简写属性设置一个元素所有外边距的宽度,或者设置各边上外边距的宽度;块级元素的垂直相邻外边距会合并,而行内元素实际上不占上下外边距。行内元素的的左右外边距不会合并。同样地,浮动元素的外边距也不会合并。允许指定负的外边距值,不过使用时要小心。(允许存在负值)*//*知识点3:padding 简写属性在一个声明中设置所有内边距属性;这个简写属性设置元素所有内边距的宽度,或者设置各边上内边距的宽度。行内非替换元素上设置的内边距不会影响行高计算;因此,如果一个元素既有内边距又有背景,从视觉上看可能会延伸到其他行,有可能还会与其他内容重叠。元素的背景会延伸穿过内边距。不允许指定负边距值。*/

↓写到这里,你的成果应该是这样的哦

976f79f4bd4eff2ab1eb62f1dc673f96.png

(底部文字示例)

到这里,第一步算是完成了(长叹一口气)

(接着还是CSS的内容)

css部分(敲重点):

h1::after{  content: 'TestText'; /*顶端文字的文字内容(与底端文字一致才能达到重叠效果)*/  color: yellow; /*顶端文字颜色设为“黄色”*/  position: absolute; /*css绝对定位(百度有较详细的介绍,这里不多赘述)*/  top: 0; /*顶端文字顶部距离*/  left: 0; /*顶端文字左端距离*/}
/*这时候,底部文字居中,顶部文字被固定在左上角*/

要将它(被设黄色的底部文字)与底部文字重叠起来,将h1字段(新增)position设定为relative就可以达到(顶部文字和底部文字)重叠的效果了

@CodingStartup起码课

也就是将上面的h1字段变成:

h1{  /*color: #333;*/  /*font-family: Helvetica;*/  /*margin: 0;*/  /*padding: 0;*/  /*font-size: 8rem;*/  /*letter-spacing: -0.2rem;*/  position: relative;  }

文字重叠完成!

效果图↓

9f6824fb12a3133878cf0cc3c2b66f8b.png

(顶部文字与底部文字结合后示例)

紧接着,继续修改h1::after部分(套用圆形mask【遮罩】)【也是重点!!!】

h1::after{  /*content: 'TestText';*/ /*顶端文字的文字内容(与底端文字一致才能达到重叠效果)*/  /*color: yellow;*/ /*顶端文字颜色设为“黄色”*/  /*position: absolute;*/ /*css绝对定位(百度有较详细的介绍,这里不多赘述)*/  /*top: 0;*/ /*顶端文字顶部距离*/  /*left: 0;*/ /*顶端文字左端距离*/  -webkit-clip-path: ellipse(100px 100px at 0% 50%); /*刻画一个直径为100px的正圆形,位置处于重叠文字的最左端、水平垂直的1/2处*/  clip-path: ellipse(100px 100px at 0% 50%); }/*由于浏览器的支援性问题,Safari、Chrome等浏览器需要一段前缀【-webkit-】才能支持clip-path的属性*//*使用前缀时一定要保留原来的属性*//*为了防止已经支持clip-path属性的浏览器(FireFox等)出错,保留原来的clip-path属性*/

到了这一步,黄色的小聚光灯应该会出现在最左边的【Te】处

这时候,尝试把clip-path的0%修改为50%(-webkit-和原来的都修改一下)看看聚光灯是不是被移动到了文字的中间。如果是的话,证明代码有效。如果不变的话,请检查代码是否有误!

【记得修改成功后重新把左边的50%改回0%哦!!!】

【右边的50%是定值,不要动!!!】

↓(效果图)↓

29f4c1448cdd77ed83a09fd5a21e7a49.png

(聚光灯居中示例)

好的,接下来继续创建新的区块:

@keyframes spotlight {  0% {    -webkit-clip-path: ellipse(100px 100px at 00% 50%);    clip-path: ellipse(100px 100px at 0% 50%);    /*这里直接套用完整的clip-path区块,下面的100%与0%用同样的数据*/  }  50% {    -webkit-clip-path: ellipse(100px 100px at 100% 50%);    clip-path: ellipse(100px 100px at 100% 50%);    /*50%的clip-path要把原本的0%改为100%,让mask(遮罩)到达文字的最右端*/  }  100% {    -webkit-clip-path: ellipse(100px 100px at 00% 50%);    clip-path: ellipse(100px 100px at 0% 50%);  }}/*keyframes的animation(动画)部分完成*/

动画部分完成得差不多啦,但还差一个重要的步骤!现在让我们继续将animation写入到h1::after中

h1::after{  /*content: 'TestText';*/ /*顶端文字的文字内容(与底端文字一致才能达到重叠效果)*/  /*color: yellow;*/ /*顶端文字颜色设为“黄色”*/  /*position: absolute;*/ /*css绝对定位(百度有较详细的介绍,这里不多赘述)*/  /*top: 0;*/ /*顶端文字顶部距离*/  /*left: 0;*/ /*顶端文字左端距离*/  /*-webkit-clip-path: ellipse(100px 100px at 0% 50%);*/ /*刻画一个直径为100px的正圆形,位置处于重叠文字的最左端、水平垂直的1/2处*/  /*clip-path: ellipse(100px 100px at 0% 50%);*/  animation: spotlight 5s infinite; /*让@keyframes里的动画5秒循环一次,动画永久循环*/  }

接下来有两个地方想修饰一下,第一,黄色的(顶端)文字是直接写在了h1::after里的content内,想把值设定在HTML里面

@CodingStartup起码课

①(终于)要对html部分动手了

<h1 data-spotlight="TestText">TestTexth1>

②继续改h1::after的内容

h1::after{  content: attr(data-spotlight); /*这部分直接从h1中读取顶部文字的值而不用在这里设定一个值了*/  /*color: "yellow";*/ /*顶端文字颜色设为“黄色”*/  /*position: absolute;*/ /*css绝对定位(百度有较详细的介绍,这里不多赘述)*/  /*top: 0;*/ /*顶端文字顶部距离*/  /*left: 0;*/ /*顶端文字左端距离*/  /*-webkit-clip-path: ellipse(100px 100px at 0% 50%);*/ /*刻画一个直径为100px的正圆形,位置处于重叠文字的最左端、水平垂直的1/2处*/  /*clip-path: ellipse(100px 100px at 0% 50%);*/  /*animation: spotlight 5s infinite;*/ /*让@keyframes里的动画5秒循环一次,动画永久循环*/  }

第二,大家会发制作成品的文字(TestText)是彩色的而不是黄色(纯色)的

@CodingStartup起码课

方法是用上背景图片,把文字当做一个mask(遮罩)【彩色图片地址:https://i.loli.net/2020/03/22/OhAmBwFYpfe25sL.jpg】

继续对h1::after动手

h1::after{  /*content: attr(data-spotlight);*/ /*这部分直接从h1中读取顶部文字的值而不用在这里设定一个值了*/  color: transparent; /*重中之重:顶端文字颜色设为“透明”*/  /*position: absolute;*/ /*css绝对定位(百度有较详细的介绍,这里不多赘述)*/  /*top: 0;*/ /*顶端文字顶部距离*/  /*left: 0;*/ /*顶端文字左端距离*/  /*-webkit-clip-path: ellipse(100px 100px at 0% 50%);*/ /*刻画一个直径为100px的正圆形,位置处于重叠文字的最左端、水平垂直的1/2处*/  /*clip-path: ellipse(100px 100px at 0% 50%);*/  /*animation: spotlight 5s infinite;*/ /*让@keyframes里的动画5秒循环一次,动画永久循环*/  background-image: url(https://i.loli.net/2020/03/22/OhAmBwFYpfe25sL.jpg);  /*这里把背景设置为url内图片的链接*/  background-size: 150%; /*经背景放大为原来的1.5倍*/  background-position: center center; /*将背景图置中*/  -webkit-background-clip: text; /*详细介绍查看上文有关【-webkit-】的介绍*/  background-clip: text; /*将背景的绘图区域设定在文字中*/  }

ff7eb89ad7984fca0275c9d51aaf1c8f.gif

到了这里,总算是搞定聚光灯效果的构建了

但是!因为这只是预览阶段的内容,所以暂时还不能直接发布到网络上!

Q:怎么办?

A:在html加入css的位置就可以了。

html部分(记得把这些代码保存到.html文件内):

<html><head><title>CSS 测试title> <link href="1.css" rel="stylesheet" type="text/css" media="all" /> head><body><h1 data-spotlight="TestText">TestTexth1>body>html>

来一遍没有注释的完整的css:

html{  font-size:15px;}body{  background-color: #222;  display: flex;  justify-content: center;  align-items: center;  min-height: 100vh;}h1{  color: #333;  font-family: Helvetica;  margin: 0;  padding: 0;  font-size: 8rem;  letter-spacing: -0.2rem;  position: relative;}h1::after{  content: attr(data-spotlight);  color: transparent;  position: absolute;  left: 0;  top: 0;  -webkit-clip-path: ellipse(100px 100px at 0% 50%);  clip-path: ellipse(100px 100px at 0% 50%);  animation: spotlight 6s infinite;  background-image: url(https://i.loli.net/2020/03/22/OhAmBwFYpfe25sL.jpg);  background-size: 150%;  background-position: center center;  -webkit-background-clip: text;  background-clip: text;}@keyframes spotlight {  0% {    -webkit-clip-path: ellipse(100px 100px at 00% 50%);    clip-path: ellipse(100px 100px at 0% 50%);  }  50% {    -webkit-clip-path: ellipse(100px 100px at 100% 50%);    clip-path: ellipse(100px 100px at 100% 50%);  }  100% {    -webkit-clip-path: ellipse(100px 100px at 00% 50%);    clip-path: ellipse(100px 100px at 0% 50%);  }}

最后,将这两个文件放置在服务器(或者Github Pages)的同一个目录下即可发布到网络上啦

~\(≧▽≦)/~

OK,以上就是关于CSS聚光灯项目的全部内容,觉得不错的话点个“在看吧”!

(也要记得关注CodingStartup起码课哦)

↓打赏一下

09e0954488a4e5ee6648cd878fcd9623.png

关注CodingStartup起码课↓32891ef0ab2fe6d8ca585f3ac432c4d2.png

点个“在看”就是对我们最大的支持!?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂阿里云直播技术是如何实现的

简介&#xff1a; 东京奥运会已落下帷幕。比赛期间&#xff0c;全球亿万观众蜂拥至各大转播平台观看奥运赛事&#xff0c;平台直播能力显的尤为重要。阿里云作为视频直播平台的技术提供商&#xff0c;凭借在产品技术、资源带宽、服务保障等方面优势&#xff0c;可为各大转播平台…

低代码发展专访系列之七:低代码的火爆需要不一样的声音么?

编辑 | 曹芊芊话题&#xff1a;低代码发展系列专访前言&#xff1a;2019年开始&#xff0c;低代码爆火。有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。CSDN随后展开…

java 自定义 钩子_使用现有钩子的函数不能使用自定义do_action钩子

我知道add_action用于在钩子的位置调用函数 . 我使用了下面的add_action&#xff0c;它给了我需要的输出(这是WooCommerce中产品的价格)&#xff1a;add_action( woocommerce_before_variations_form, woocommerce_single_variation, 10 );我在我构建的自定义插件中使用了上面的…

启动、内存、卡顿三大分析,用户体验就用它?

简介&#xff1a; 启动分析支持通过预置采集和个性化自定义两种方式定义启动阶段&#xff0c;可以分别查询首次启动、冷启动、热启动的情况效果&#xff0c;并可以与设备、系统、版本、地域等维度做交叉筛选查询。 随着大量应用涌入市场加入“App内卷之战”&#xff0c;终端用…

adb echo shell 覆盖_一次写shell脚本的经历记录

点击上方“我的小碗汤”&#xff0c;选择“置顶公众号”精品文章&#xff0c;第一时间送达redis在容器化的过程中&#xff0c;涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值&#xff0c;statefulset管理的pod需要重启。所以把redis集群的状态检查放到了健康检查中&a…

当新零售遇上 Serverless

简介&#xff1a; Serverless 的出现给传统企业数字化转型带了更多机遇。 某零售商超行业的龙头企业&#xff0c;其主要业务涵盖购物中心、大卖场、综合超市、标准超市、精品超市、便利店及无人值守智慧商店等零售业态&#xff0c;涉及全渠道零售、仓储物流、餐饮、消费服务、…

如果还不懂如何使用 Consumer 接口,就来看这篇!

作者 | 阿Q来源 | 阿Q说代码背景在开发过程中我遇到这么一个问题&#xff1a;表结构&#xff1a;一张主表A &#xff0c;一张关联表B &#xff0c;表 A 中存储着表 B 记录的状态。场景&#xff1a;第一步创建主表数据&#xff0c;插入A表&#xff1b;第二步调用第三方接口插入B…

java实验册_Java实验报告册Java实验报告册.doc

Java实验报告册Java实验报告册《面向对象程序设计》实验报告与习题册2013 / 2014 学年 第1学期系 别 计算机科学与技术系专 业 班 级 姓 名 指导教师目 录项 目成 绩批改时间实验一 开发环境的搭建及使用实验二 JAVA程序设计基本语法实验三 面向对象程序设计实验四 输入和输出流…

学python就业到底如何_学习python后,就业如何?

Python技术相关人才&#xff0c;正是迎合了目前人工智能时代的发展趋势&#xff0c;Python作为人工智能的首选语言&#xff0c;其发展前景那是大大的好。学习python原因1、python是脚本语言&#xff0c;作为程序员至少应该掌握一本通用脚本语言&#xff0c;因为脚本语言与编译语…

京东:Flink SQL 优化实战

简介&#xff1a; 本文着重从 shuffle、join 方式的选择、对象重用、UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施。 本文作者为京东算法服务部的张颖和段学浩&#xff0c;并由 Apache Hive PMC&#xff0c;阿里巴巴技术专家李锐帮忙校对。主要内容为&#xff1…

Spring Boot参数校验以及分组校验的使用

简介&#xff1a; 做web开发基本上每个接口都要对参数进行校验&#xff0c;如果参数比较少&#xff0c;还比较容易处理&#xff0c;一但参数比较多了的话代码中就会出现大量的if-else语句。虽然这种方式简单直接&#xff0c;但会大大降低开发效率和代码可读性。所以我们可以使用…

fetch() php,PHP:使用fetch()发送数据

我试图使用fetch()发送一些数据,但作为回报,我得到SyntaxError:意外的标记,在JSON中的位置23这就是我要做的fetch(/api.php, {method: POST,body: JSON.stringify({nom : "Issa",prenom: "Oule"}),headers : {"Content-Type" : "applicatio…

python商品总价_【Python基础 | 列表】小实验:实现显示商品,选择商品,将商品加入购物车,得到总价格...

B站学习《Python爬虫技术5天速成》时遇到的小作业&#xff0c;原视频点我题目如下&#xff1a;代码如下&#xff1a;products [["iPhone", 6888], ["MBP", 14800], ["Coffee", 31], ["xiaomi6", 2499], ["Book", 60], [&qu…

长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?

简介&#xff1a; io_uring 作为一种新型高性能异步编程框架&#xff0c;代表着 Linux 内核未来的方向&#xff0c;当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课&#xff0c;围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存…

Orion:谷歌的新一代SDN控制器

作者 | 魏煌松来源 | 鲜枣课堂时至今日&#xff0c;谷歌在2015年公布的成果&#xff0c;“利用SDN将广域网带宽利用率提升至接近100%”&#xff0c;仍然是SDN的一个标杆案列&#xff0c;也是难以逾越的巅峰。但事实上&#xff0c;当时使用的SDN控制器Onix&#xff0c;早已退出了…

移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统

简介&#xff1a; 2020年12月CentOS项目组宣布CentOS 8将于2021年12月31日结束支持&#xff0c;这意味着从2022年开始&#xff0c;使用CentOS 8的用户&#xff0c;将无法得到来自官方的新硬件支持、bug修复和安全补丁。针对这一情况&#xff0c;移动云大云操作系统团队基于国内…

php _trait,php Trait的使用

1、php中的trait是啥?看上去既像类又像接口&#xff0c;其实都不是&#xff0c;Trait可以看做类的部分实现&#xff0c;可以混入一个或多个现有的PHP类中&#xff0c;其作用有两个&#xff1a;表明类可以做什么&#xff1b;提供模块化实现。Trait是一种代码复用技术&#xff0…

python业余项目_学会这8个优秀 Python 库用于业余项目,将大大减少程序员耗费的精力...

在数据库中即时保存数据&#xff1a;Dataset当我们想要在不知道最终数据库表长什么样的情况下&#xff0c;快速收集数据并保存到数据库中的时候&#xff0c;Dataset 库将是我们的最佳选择。Dataset 库有一个简单但功能强大的 API&#xff0c;因此我们可以很容易的把数据保存下来…

java 绘图

文章目录 Java绘图 Java绘图类 绘图颜色与画笔属性 设置颜色 设置画笔 绘制文本 显示图片 图像处理 1、放大与缩小 2、图像翻转 3、图像旋转 4、图像倾斜 End Java绘图 Java绘图是指在Java程序中创建和显示图形的过程。Java提供了许多类和方法来支持绘图。 Jav…

干掉讨厌的 CPU 限流,让容器跑得更快

简介&#xff1a; 让人讨厌的 CPU 限流影响容器运行&#xff0c;有时人们不得不牺牲容器部署密度来避免 CPU 限流出现。本文介绍的 CPU Burst 技术可以帮助您既能保证容器运行服务质量&#xff0c;又不降低容器部署密度。文章分为上下两篇&#xff0c;该文为上篇&#xff0c;下…