您现在的位置是:网站首页> 编程资料编程资料
CSS变量对JS交互组件开发带来的提升与变革示例代码详解通过CSS变量修改样式的方法示例你真的需要了解一下CSS变量 var()的用法css文件中的样式类被覆盖,js文件中的变量未定义问题
2021-09-03
924人已围观
简介 这篇文章主要介绍了CSS变量对JS交互组件开发带来的提升与变革示例代码详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
一、CSS变量带来的质变
CSS变量带来的提升绝不仅仅是节约点CSS代码,以及降低CSS开发和维护成本。
更重要的是,把组件中众多的交互开发从原来的JS转移到了CSS代码中,让组件代码更简洁,同时让视觉表现实现更加灵活了。
我们通过几个案例来说明这一变化。
二、简化了JS对DOM设置的介入
案例1:loading进度效果
例如实现下图所示的变量效果:

外面有一层背景层,然后里面有进度条,还有进度值。
在过去,会使用两层div元素,然后JS去改变里面有颜色条条的宽度,同时设置进度值。
也就是,loading的进度效果和进度值全部都是JS直接设置的,JS同时对应多个HTML信息。
现在,有了CSS变量,JS所做的工作就非常简单,仅仅在容器元素上设置loading进度值即可,其他什么都不需要做,至于样式表现,或者进度值如何显示,全部都是CSS的事情。
相关代码如下:
.bar { height: 20px; width: 300px; background-color: #f5f5f5; } .bar::before { display: block; counter-reset: progress var(--percent); content: counter(progress) '%\2002'; width: calc(1% * var(--percent)); color: #fff; background-color: #2486ff; text-align: right; white-space: nowrap; overflow: hidden; }可以看到,我们只需要一层div标签,DOM层级简单了,然后,需要修改的HTML变化项仅仅是一个 --percent 自定义属性而已。
眼见为实,您可以狠狠地点击这里: CSS百分比变量与进度条demo
三、CSS变量成为了CSS API接口
过去点击出现提示,切换等效果都需要JS针对特定的元素进行样式设置,现在有了CSS变量,我们只需要一段通用的非常简单的全局JS就可以了,JS就可以自己玩耍去了,其他效果,全部交给JS处理。
这段JS如下:
/** * @author zhangxinxu(.com) * @description 点击页面任意位置,标记坐标位置 */ document.addEventListener('mousedown', function (event) { var target = event.target; var body = document.body; var html = document.documentElement; // 设置自定义属性值 body.style.setProperty('--pagex', event.pageX); body.style.setProperty('--pagey', event.pageY); html.style.setProperty('--clientx', event.clientX); html.style.setProperty('--clienty', event.clientY); html.style.setProperty('--scrolly', window.pageYOffset); target.style.setProperty('--offsetx', event.offsetX); target.style.setProperty('--offsety', event.offsetY); target.parentElement.style.setProperty('--target-width', target.clientWidth); target.parentElement.style.setProperty('--target-height', target.clientHeight); target.parentElement.style.setProperty('--target-left', target.offsetLeft); target.parentElement.style.setProperty('--target-top', target.offsetTop); });可以看到,JavaScript代码再也不负责任何与交互行为相关的逻辑,直接变成了工具人,一个单纯地传递点击坐标位置,以及点击元素偏移和尺寸信息的工具人。
CSS得到了什么呢?
得到了一个巨大的宝藏,一个随时可以拿来使用的宝藏。
我想要点击按钮的时候有什么花哨的反馈,或者点击页面空白也来个创意的交互提示,完全不成问题,随用随取,无比方便,无比自由。
可以说,上面这段JS,或者类似的JS代码是未来web开发的标配。
我们来看看上面的代码可以实现怎样的效果。
案例2:按钮点击圈圈效果
点击按钮的时候有个圈圈放大的效果,圈圈放大的中心点就是点击的位置。
效果如下GIF所示:

核心CSS代码如下:
.btn:not([disabled]):active::after { transform: translate(-50%,-50%) scale(0); opacity: .3; transition: 0s; } .btn::after { content: ""; display: block; position: absolute; width: 100%; height: 100%; left: var(--x, 0); top: var(--y, 0); pointer-events: none; background: radial-gradient(circle, currentColor 10%, transparent 10.01%) no-repeat 50%; transform: translate(-50%,-50%) scale(10); opacity: 0; transition: transform .3s, opacity .8s; }:active 时候隐藏,同时设置过渡时间为0。于是,点击释放的时候,就会有过渡效果。
大家可以访问这个地址进行体验: https://xy-ui.codelabo.cn/docs/#/xy-button
案例3:点击页面出现文字效果
又例如,点击本文页面任意位置都会出现下图所示的提示信息。

就是下面上面那段万能工具人JS加下面这段CSS实现的:
body:active::after { transform: translate(-50%, -100%); opacity: 0.5; transition: 0s; left: -999px; } body::after { content: 'zhangxinxu.com'; position:fixed; z-index: 999; left: calc(var(--clientx, -999) * 1px); top: calc(var(--clienty, -999) * 1px); transform: translate(-50%, calc(-100% - 20px)); opacity: 0; transition: transform .3s, opacity .5s; }案例3:两个按钮下划线滑来滑去效果
以前,下图这种点击选项卡按钮,然后下划线滑来滑去,尺寸还变化效果,使用纯CSS实现很考验功力,几乎99.99%的开发都是借助JS去查询对应DOM元素,然后设置宽高和位置实现的交互效果。

现在,有了工具人JS,只需要一段CSS就可以搞定了,甚至文字的高亮切换都可以纯CSS搞定,就是这么神奇。
下面这里的效果就是实现的实时效果(若没有效果,请访问原文 张鑫旭 https://www.zhangxinxu.com/wordpress/?p=9477 ):
点击任意的选项卡元素,就可以看到下划线滑到对应位置,同时为高亮的效果。
相关代码如下:
.yw-tab-tab { position: relative; display: flex; max-width: 414px; justify-content: space-between; border-bottom: 1px solid #717678; background-color: #fff; margin: 30px auto; } .yw-tab-tab::before, .yw-tab-tab::after { position: absolute; width: calc(var(--target-width, 0) * 1px); left: calc(var(--target-left, -299) * 1px); color: #2a80eb; } .yw-tab-tab[style]::before, .yw-tab-tab[style]::after { content: ''; } .yw-tab-tab::before { background-color: currentColor; height: calc(var(--target-height) * 1px); mix-blend-mode: overlay; } .yw-tab-tab::after { border-bottom: solid; bottom: -2px; transition: left .2s, width .2s; } .yw-tab-a { color: #717678; padding: 10px 0; }如果是移动端访问,需要 mousedown 事件修改成 touchstart ,我就懒得调整了。
四、web组件的很多API接口可以拜拜了
以前web组件有一个什么功能,就新增一个API接口,看上去很厉害,实际上,加着加着,API越来越多,组件也越来越重,学习成本也越来越高,最后走向了死胡同,变得笨重,迎来了灭亡。
现在,可以改变思路了。
那些与交互表现密切相关的功能,事实上仅仅在组件容器元素上传递CSS自定义属性就可以了,无需负责具体的定位,显隐,或者样式变化,全部交给CSS。
因为设计表现的东西是上层的,灵活的,个性的,应该在CSS层面进行驾驭才是合理的,匹配的。
例如上面提到的loading组件,无论是条状的还是饼状的都是这样的处理逻辑,只负责传递进度值,样式无需关心。
又例如滑条框(如下图Ant Design中的滑条的位置和提示效果)、popup提示框等都可以通过一个CSS自定义属性完成,JS仅传参不负责UI样式。

实在太晚了,已经0:56了,我就不出demo演示了,大家领会去精神即可。
五、结语
结语个鬼大头啊,眼睛都睁不开了。
总之,交互开发实现的思路可以发展转变了,CSS变量,真香!
感谢阅读,欢迎分享!
然后行文匆忙,迷迷糊糊下码的字,如有错误,欢迎指正。

本文地址: https://www.zhangxinxu.com/wordpress/?p=9477
到此这篇关于CSS变量对JS交互组件开发带来的提升与变革示例代码详解的文章就介绍到这了,更多相关css 变量 js交互组件 内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 完美解决webpack打包css背景图片路径问题使用CSS cross-fade()实现背景图像半透明效果的示例代码CSS3为背景图设置遮罩并解决遮罩样式继承问题CSS设置div背景图的实现代码CSS背景图片设置的6个有趣的技巧CSS3 实现响应鼠标移动背景图片漂移效果的用户介绍卡片源码使用css写带纹理渐变背景图的示例代码
- 纯CSS实现选中商品后右下角显示√号功能CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- css 实现动态二级菜单使用HTML+CSS实现鼠标划过的二级菜单栏的示例纯CSS实现鼠标滑过显示子菜单的二级菜单效果HTML+CSS+JavaScript通过嵌套ul li实现简单的二级菜单js+css实现圆角二级菜单jQuery CSS 完美兼容的二级菜单
- Flex移动布局中单行和双行布局的区别及使用详解
- CSS实现导航固定的、左右滑动的滚动条制作方法css实现隐藏滚动条并可以滚动内容的实例代码CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解CSS实现隐藏滚动条并可以滚动内容效果(三种方式)css滚动条样式修改的代码css3 实现滚动条美化效果的实例代码
- CSS规范BEM CSS和OOCSS的示例代码详解CSS使用BEM命名规范实践CSS样式书写顺序和命名规范及注意事项值得收藏的CSS命名规范(规则)常用的CSS命名规则 好的 CSS 命名规范可以节约 Debug 时间css 命名:BEM, scoped css, css modules 与 css-in-js详解详解css BEM书写规范 从QQtabBar看css命名规范BEM的详细介绍
- 一文汇总 CSS 两列布局和三列布局的具体使用CSS实现页面两列布局与三列布局的方法示例CSS两列布局实现方式总结横向两列布局(左列固定,右列自适应)的4种CSS实现方式学习DIV+CSS网页布局之两列布局CSS三列布局两端固定宽度中间自适应CSS布局实例代码 两列布局实例CSS实现两列布局的N种方法
- CSS 伪类修改input选中样式的示例代码详解css3中的伪类before和after常见用法CSS伪类:empty让我眼前一亮(实例代码)浅谈CSS 伪元素&伪类的妙用css伪类 右下角点击出现 对号角标表示选中的示例代码css选择器四大类:基本、组合、属性、伪类详解如何使用CSS3中的结构伪类选择器和伪元素选择器解决移动端跳转问题(CSS过渡、target伪类)css3 伪类选择器快速复习小结CSS新增的:where和:is伪类函数是什么
- flex布局实现无缝滚动的示例代码flex布局实现每行固定数量+自适应布局浅谈Flex布局与缩放比例计算详解flex布局中保持内容不超出容器的解决办法深入浅析CSS3中的Flex布局整理css3 flex实现div内容水平垂直居中的几种方法详解CSS中的flex布局css用Flex布局制作简易柱状图的实现flex布局兼容性问题小结css3 flex布局 justify-content:space-between 最后一行左对齐详解flex布局中flex-grow与flex-shrink的计算方式
- 解决flex布局space-between最后一行左对齐的方法flex弹性盒布局最后一行左对齐的实现思路css3 flex布局 justify-content:space-between 最后一行左对齐让CSS flex布局最后一行列表左对齐的N种方法(小结)
