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

前端内容黑白处理、轮播图、奇妙的头像特效

1、内容黑白处理

(1)filter:滤镜

可以把包裹的区域中每一个像素点,经过固定的算法转换成另一种颜色来呈现

(2)grayscale:灰阶滤镜

  • 取值范围:0~1
  • 取0:原图
  • 去1:完全黑白
filter: grayscale(1)

(3)hue-rotate:阴间滤镜

filter: hue-rotate(45deg);

2、轮播图

代码示例用较原始的方式实现

(1)快速编写标签

div.item*4>a>img[src=./img/$.jpg]
<div class="item"><a href=""><img src="./img/1.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/2.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/3.jpg" alt=""></a></div>
<div class="item"><a href=""><img src="./img/4.jpg" alt=""></a></div>

(2)静态轮播图

<!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;box-sizing: border-box;}.container {width: 500px;height: 300px;margin: 10px auto;overflow: hidden;position: relative;}.carousel {width: 100%;height: 100%;display: flex;transition: 0.5s;/* css3动画效果 */}.container .carousel img {width: 500px;height: 300px;}.indicator {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);/* css3横向偏移,50%:元素自身的一半 */display: flex;/* 边框 *//* outline: 1px solid #fff; */}.indicator span {width: 20px;height: 20px;border: 2px solid #c466ef;border-radius: 50%;margin: 0 3px;}.indicator span.active {background-color: #c466ef;border-color: #c466ef;}</style>
</head><body><div class="container"><!-- 轮播图 --><div class="carousel"><div class="item"><a href=""><img src="./img/1.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/2.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/3.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/4.jpg" alt="" /></a></div></div><!-- 指示器 --><div class="indicator"><span class="active"></span><span></span><span></span><span></span></div></div><script>var doms = {carousel: document.querySelector(".carousel"),indicators: document.querySelectorAll(".indicator span"),};/*** 移动轮播图到第几个板块* @param {Number} index 板块的索引*/function moveTo(index) {curIndex = index;doms.carousel.style.transform = `translateX(-${index}00%)`;// 去除当前选中的指示器var active = document.querySelector(".indicator span.active");active.classList.remove("active");// 重新设置要选中的指示器doms.indicators[index].classList.add("active");}// 绑定指示器点击事件doms.indicators.forEach(function (item, index) {item.onclick = function () {moveTo(index);};});</script>
</body></html>

(3)定时器轮播

<!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;box-sizing: border-box;}.container {width: 500px;height: 300px;margin: 10px auto;overflow: hidden;position: relative;}.carousel {width: 100%;height: 100%;display: flex;transition: 0.5s;/* css3动画效果 */}.container .carousel img {width: 500px;height: 300px;}.indicator {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);/* css3横向偏移,50%:元素自身的一半 */display: flex;/* 边框 *//* outline: 1px solid #fff; */}.indicator span {width: 20px;height: 20px;border: 2px solid #c466ef;border-radius: 50%;margin: 0 3px;}.indicator span.active {background-color: #c466ef;border-color: #c466ef;}</style>
</head><body><div class="container"><!-- 轮播图 --><div class="carousel"><div class="item"><a href=""><img src="./img/1.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/2.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/3.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/4.jpg" alt="" /></a></div></div><!-- 指示器 --><div class="indicator"><span class="active"></span><span></span><span></span><span></span></div></div><script>var doms = {carousel: document.querySelector(".carousel"),indicators: document.querySelectorAll(".indicator span"),};var curIndex = 0,timer;/*** 移动轮播图到第几个板块* @param {Number} index 板块的索引*/function moveTo(index) {curIndex = index;doms.carousel.style.transform = `translateX(-${index}00%)`;// 去除当前选中的指示器var active = document.querySelector(".indicator span.active");active.classList.remove("active");// 重新设置要选中的指示器doms.indicators[index].classList.add("active");}// 绑定指示器点击事件doms.indicators.forEach(function (item, index) {item.onclick = function () {moveTo(index);};});// 定时器自动轮播function autoPlay() {timer = setInterval(function () {if (curIndex == doms.indicators.length - 1) {curIndex = 0;} else {curIndex++;}moveTo(curIndex);}, 2000);}autoPlay()</script>
</body></html>

(4)鼠标移入移出

<!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;box-sizing: border-box;}.container {width: 500px;height: 300px;margin: 10px auto;overflow: hidden;position: relative;}.carousel {width: 100%;height: 100%;display: flex;transition: 0.5s;/* css3动画效果 */}.container .carousel img {width: 500px;height: 300px;}.indicator {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);/* css3横向偏移,50%:元素自身的一半 */display: flex;/* 边框 *//* outline: 1px solid #fff; */}.indicator span {width: 20px;height: 20px;border: 2px solid #c466ef;border-radius: 50%;margin: 0 3px;}.indicator span.active {background-color: #c466ef;border-color: #c466ef;}</style>
</head><body><div class="container"><!-- 轮播图 --><div class="carousel"><div class="item"><a href=""><img src="./img/1.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/2.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/3.jpg" alt="" /></a></div><div class="item"><a href=""><img src="./img/4.jpg" alt="" /></a></div></div><!-- 指示器 --><div class="indicator"><span class="active"></span><span></span><span></span><span></span></div></div><script>var doms = {carousel: document.querySelector(".carousel"),indicators: document.querySelectorAll(".indicator span"),};var curIndex = 0,timer;/*** 移动轮播图到第几个板块* @param {Number} index 板块的索引*/function moveTo(index) {curIndex = index;doms.carousel.style.transform = `translateX(-${index}00%)`;// 去除当前选中的指示器var active = document.querySelector(".indicator span.active");active.classList.remove("active");// 重新设置要选中的指示器doms.indicators[index].classList.add("active");}// 绑定指示器点击事件doms.indicators.forEach(function (item, index) {item.onclick = function () {moveTo(index);};});// 定时器自动轮播function autoPlay() {timer = setInterval(function () {if (curIndex == doms.indicators.length - 1) {curIndex = 0;} else {curIndex++;}moveTo(curIndex);}, 2000);}autoPlay()doms.carousel.onmouseover = function () {clearInterval(timer);}doms.carousel.onmouseout = function () {autoPlay();}</script>
</body></html>

3、奇妙的头像特效

(1)初始化代码

<!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>body {padding: 0;margin: 0;min-height: 100vh;display: grid;place-content: center;background: #e8e4cc;margin-top: -200px;}img {--s: 200px;--c1: #c82942;--c2: #ecd878;width: var(--s);height: var(--s);cursor: pointer;transition: 0.5s;}img:hover {transform: scale(1.35);}</style>
</head>
<body><div><img src="./img/头像.png" alt=""></div>
</body>
</html>

(2)背景、背景边框

①背景渐变
background: radial-gradient(var(--c2), var(--c1));

②配置比例,形成背景边框
  • 没有设置100%:解决背景与背景边框出现锯齿
--b: 5px;background: radial-gradient(circle closest-side, var(--c2) calc(99% - var(--b)), var(--c1) calc(100% - var(--b)) 99%,transparent
);

③保持背景不放大
img {--s: 200px;--c1: #c82942;--c2: #ecd878;--b: 5px;--f: 1;transform: scale(var(--f));width: var(--s);height: var(--s);cursor: pointer;transition: 0.5s;/* ①背景渐变 */background: radial-gradient(circle closest-side, var(--c2) calc(99% - var(--b)), var(--c1) calc(100% - var(--b)) 99%,transparent)no-repeat center / calc(100% / var(--f));
}img:hover {--f: 1.35;
}

(3)外边框

①绘制外边框
outline: var(--b) solid var(--c1);
border-radius: 0 0 50% 50%;
outline-offset: calc(0px - var(--b));

②外边框内缩
outline-offset: calc((1 / var(--f) - 1) * var(--s) / 2 - var(--b));

③顶部线被遮挡
  • padding-top
  • border-radius设置大些
  • content-box:因为padding-top导致整个背景偏移,所以要加这个属性
background: radial-gradient(circle closest-side, var(--c2) calc(99% - var(--b)), var(--c1) calc(100% - var(--b)) 99%,transparent
)
content-box no-repeat center / calc(100% / var(--f));
outline: var(--b) solid var(--c1);
border-radius: 0 0 999px 999px;
outline-offset: calc((1 / var(--f) - 1) * var(--s) / 2 - var(--b));
padding-top: calc(var(--s) / 5);

(4)蒙层

①蒙层一
--bgOption: content-box no-repeat center / calc(100% / var(--f));background: radial-gradient(circle closest-side, var(--c2) calc(99% - var(--b)), var(--c1) calc(100% - var(--b)) 99%,transparent
) var(--bgOption);
mask: radial-gradient(circle closest-side, #000 99%,transparent
) var(--bgOption);

②蒙层二
mask: linear-gradient(#000 0 0) no-repeat 50% calc(10px - (1 / var(--f) - 1) * var(--s) / 2 - var(--b)) / calc(100% / var(--f) - 3 * var(--b)) 50%,radial-gradient(circle closest-side, #000 99%,transparent
) var(--bgOption);

http://www.xdnf.cn/news/9035.html

相关文章:

  • Android开发namespace奇葩bug
  • 鸿蒙OSUniApp 开发实时天气查询应用 —— 鸿蒙生态下的跨端实践#三方框架 #Uniapp
  • Git 初次推送远程仓库
  • NL2SQL代表,Vanna
  • 【笔记】解决启动Anaconda Toolbox报错ModuleNotFoundError: No module named ‘pysqlite2‘
  • 从万有引力到深度学习,认识模型思维
  • ADS学习笔记(五) 谐波平衡仿真
  • 身份认证: JWT和Session是什么?
  • 深入解析 BlockingQueue:并发编程面试中的高频考点!
  • SDL2常用函数:SDL_RendererSDL_CreateRendererSDL_RenderCopySDL_RenderPresent
  • 数据库工程师备考
  • 第三届京麒CTF Web
  • ClickHouse性能优化技术深度解析与实践指南
  • (4)-Fiddler抓包-会话面板和HTTP会话数据操作
  • 多模态大语言模型arxiv论文略读(九十三)
  • Odoo 自动化规则全面深度解析
  • 探秘谷歌Gemini:开启人工智能新纪元
  • 基于树莓派的贪吃蛇游戏机
  • 【科研绘图系列】R语言绘制气泡图(bubble plot)
  • 噪声建模在一小时:最小化准备工作的自监督低光RAW图像去噪
  • ArcGIS 与 HEC-RAS 协同:流域水文分析与洪水模拟全流程
  • 数字展厅建设需融合创意设计与实用功能,打造多维用户体验!
  • 动态规划(7):背包问题
  • 解决 docker pull镜像失败
  • DEC Global:技术赋能如何重塑投资者决策模式?
  • Three.js搭建小米SU7三维汽车实战(5)su7登场
  • 深度解析新能源汽车结构与工作原理
  • 多端一体开发:iVX 如何让「一次开发,全平台部署」从理想照进现实
  • Android中一次完整的ipc通信过程
  • Vue 3.0中复杂状态如何管理