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

【前端demo】动态赋值CSS

文章目录

    • 效果
    • 过程
      • html实现
      • oninput与onchange事件
      • 统一配置CSS
    • 代码
      • HTML
      • CSS
      • JS

其他demo

效果

在这里插入图片描述
动态显示CSS样式,由:root统一配置。

效果预览:https://codepen.io/karshey/pen/BavLrwy

参考:

Dynamic CSS Variables(codepen.io)

漫谈document.documentElement与document.body - 简书 (jianshu.com)

过程

html实现

滑动滑块和滑动border-radius<input type='range'>实现,选择颜色由<input type='color'>实现

在这里插入图片描述
对于radius,四个角一起变化的最大值是50%。

oninput与onchange事件

oninput 事件在用户输入时触发。
该事件在 <input><textarea> 元素的值发生改变时触发。

该事件类似于 onchange事件。不同之处:oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。

在这里,显然滑块的滑动是不能失去焦点才触发的(滑块滑动的时候box要同步移动),但颜色的选择可以(可以试一试,改变颜色是选择颜色之后再点击空白区域,方块颜色才会发生改变)。

统一配置CSS

我们的目的是实现动态改变box的样式。因此,可以将box的样式统一在root处配置:

/* 统一配置box的样式 */
:root {--color: #000;--location: 0;--radius: 0;
}.box {height: 200px;width: 200px;background-color: var(--color);border-radius: var(--radius);/* 向右移动 */transform: translateX(var(--location));transition: width 2s;
}

因此,如果想改变box的样式,只需改变:root中的值即可。

注意,这里root中的变量名(colorlocationradius),正好对应方法changeValue的第一个参数。

在这里插入图片描述

因此可以通过将输入的type与--拼接直接形成CSS变量,然后直接赋值。

root.style.setProperty(`--${type}`, value + add)

注意,颜色的赋值是不用加%的,而border-radiustransform: translateX()的数值要加%

const root = document.documentElement;
function changeValue(type, value) {console.log(root)const add = (type != 'color' ? '%' : '');root.style.setProperty(`--${type}`, value + add)
}

这里的root是从html标签开始的整个文档树(DOM树)。我们使用root.style.setProperty将CSS变量直接赋值在文档树开头的style,就覆盖了原本CSS中的:root中的变量。

这样就可以动态赋值CSS。

在这里插入图片描述

参考:漫谈document.documentElement与document.body - 简书 (jianshu.com)

代码

HTML

<!-- author:https://blog.csdn.net/karshey -->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Dynamic CSS Variables</title><link rel="stylesheet" href="style.css">
</head><body><div class="container"><div class="location item"><p>滑动移动方块位置</p><input type="range" value="0" min="0" max="200" oninput="changeValue('location',this.value)"></div><div class="radius item"><p>滑动改变方块弧度</p><input type="range" value="0" min="0" max="50" oninput="changeValue('radius',this.value)"></div><div class="color item"><p>选择改变方块颜色</p><input type="color" value="#000000" onchange="changeValue('color',this.value)"></div><div class="box"></div></div>
</body></html><script src="index.js"></script>

CSS

/* 统一配置box的样式 */
:root {--color: #000;--location: 0;--radius: 0;
}.container {display: flex;flex-direction: column;justify-content: center;align-items: center;height: 100vh;background-image: linear-gradient(120deg, #84fab0 0%, #8fd3f4 100%);
}.item {display: flex;align-items: center;justify-content: center;
}.item p {margin-right: 10px;
}.box {height: 200px;width: 200px;background-color: var(--color);border-radius: var(--radius);/* 向右移动 */transform: translateX(var(--location));transition: width 2s;
}

JS

const root = document.documentElement;
function changeValue(type, value) {console.log(root)const add = (type != 'color' ? '%' : '');root.style.setProperty(`--${type}`, value + add)
}
http://www.lryc.cn/news/154125.html

相关文章:

  • BlockUI专栏目录
  • K8S获取连接token
  • CountDownLatch原理-(主线程等待子线程结束再执行)
  • mybatis源码学习-3-解析器模块
  • 解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题
  • 如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
  • 在 Node.js 中使用 MongoDB 事务
  • IntelliJ IDEA的远程开发(Remote Development)
  • 网络安全-信息收集简介
  • 页面页脚部分CSS分享
  • 微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽
  • l8-d6 socket套接字及TCP的实现框架
  • ChatGPT AIGC 完成动态堆积面积图实例
  • 虹科产线实时数采检测方案——高速采集助力智能化升级
  • 用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI
  • 低压配电室电力安全解决方案
  • 【Windows 常用工具系列 11 -- 笔记本F5亮度调节关闭】
  • Python小知识 - 【Python】如何使用Pytorch构建机器学习模型
  • 使用Akka的Actor模拟Spark的Master和Worker工作机制
  • 文心一言api接入如何在你的项目里使用文心一言
  • Python匿名函数lambda(R与Python第五篇)
  • 【2023校园招聘】 钉钉AI应用开发平台开始校招拉~
  • Linux系统gdb调试常用命令
  • Sumo中Traci.trafficlight详解(上)
  • 手写Mybatis:第13章-通过注解配置执行SQL语句
  • spring security - 快速整合 springboot
  • NPM 常用命令(二)
  • ctfhub ssrf(3关)
  • 跨源资源共享(CORS)Access-Control-Allow-Origin
  • 【嵌入式软件开发 】学习笔记