利用css var函数让你的组件样式输出规范样式API,可定制性更高;
2023-05-10 12:25:49
我们平时在使用Elementui Antdesing这些UI库时,难免会碰到使用deep强行侵入式去修改组件内部样式的情况;比如下列代码,我们需要把ant的分页样式进行高度自定义,就得使用deep去修改;这种实现方式确实能够达到我们的目的,但在开发时确总觉得不太合适:1、他属于强行入侵组件内部去修改,虽然不会有大问题,但总觉得这种取巧方式有点不可取。2、每次写deep时需要手动检查DOM元素进行编辑,UI文档中并不会有相关API文档;为了解决心中的这两个结症,趁最近写组件的机会探索了下CSS 的var函数,发现他可以很好的解决以上问题。利用var函数我们可以具体解决组件开发的以下问题:1、组件样式自定义可以更加个性化2、现在很多组件库实现一些样式控制还是依靠props传参的形式,这种var函数结合Style可完全避免props传参的情况,把样式跟props区分开;3、在组件文档中可明确定制样式属性API;使组件样式可以跟Props属性一样以传参概念去进行高度定制,在使用组件样式时不需要像使用deep一样打开f12去一层一层的找4、不会侵入式的改动组件内部样式5、这个方案与deep互不排斥,如果开放的样式API不够用还是可以继续使用deep;看下面需求,是如何利用css var函数实现一个可自定义大小,颜色,以及子元素样式的卡片上代码
//Card.vue这时候我们在API文档则可明确规定样式定制属性了:组件使用方式:![]()
{{ desc }}
//demo.vue以上就是一个基本的组件实现;还种情况我们在使用UI库时也会碰到需要使用Props传过来计算的参数,比如下列代码:<script>...</script>
这种我们也可以把这些全提出来使用style属性。让样式与js参数彻底隔离
//demo.vue<script setup> let hoverStyle = ref({}); const handleHover = () => { hoverStyle.value = { "--bg": "#f0f", "--width": "180px" }; };</script>
我们在组件内
JS可以使用props.style获取到设置的值,css中可以使用calc变量与var结合去计算你想要的值//card.vue但是这种实现有命名空间的问题所以需要稍微注意下变量命名,最好加独有的命名规则。防止变量覆盖;{{ width }}<script setup> const $props = defineProps({ img: { type: String, default: "", }, desc: { type: String, default: "", }, style: { type: Object, default: () => ({}), }, }); //假如你在js中需要用到宽度 let width = computed(() => { return parseInt($props.style["--width"] || 150); });</script>![]()
{{ desc }}
//比如这样.ch-card{ --ch-card-width:100px; --ch-card-height:100px;}总结下这种方案的优缺点:优点1、组件样式自定义可以更加个性化2、现在很多组件库实现一些样式控制还是依靠props传参的形式,这种var函数结合Style可完全避免props传参的情况,把样式跟props区分开;3、在组件文档中可明确定制样式属性API;使组件样式可以跟Props属性一样以传参概念去进行高度定制,在使用组件样式时不需要像使用deep一样打开f12去一层一层的找4、不会侵入式的改动组件内部样式5、这个方案与deep互不排斥,如果开放的样式API不够用还是可以继续使用deep;缺点:1、开发组件时会工作量会增大,但是磨刀不误砍柴功2、命名空间问题导致命名会有点长。欢迎分享更好的解决方案。 标签:
- 利用css var函数让你的组件样式输出规范样式API,可定制性更高;
- 如何自己做包子?方法与步骤在这里,教程讲解详细,馅料水嫩多汁超好吃
- 世界观察:人www.888www._9984x
- 世界微头条丨美媒:白宫未与议员达成债务上限妥协 美政府考虑绕开国会发债
- 沪指跌逾1% 石油、券商等跌幅居前|最新
- 天天关注:中金:维持海吉亚医疗跑赢行业评级 目标价72.8港元
- 世界视讯!人民银行开展20亿元逆回购操作 公开市场实现净投放20亿元
- 高考艺术类怎么算综合分计公式美|世界观速讯
- 上海今夜局地有小雨,这几天还有……苹果天气又崩了!已是近期第三次,咋回事?
- 环球观焦点:第七届全球跨境电商大会展览展示启幕 一展汇全球 好物等你淘
- 每日报道:最火广场舞歌曲大全100首_广场舞歌曲大全100首
- 周至大学城,已有四所高校官宣新校区……_看热讯
- 网恋翻车指南内容简介_网恋翻车指南
- 青海省果洛藏族自治州甘德县2023-05-10 03:28发布暴雪蓝色预警_天天最新
- 从1防到5,数据体现不了作用!湖人交易捡到宝,他要拿4年7100万_环球时快讯
- 一级造价工程师含金量高吗_一级造价工程师含金量_当前快播
- 年轻的女老师4ed2k_年轻的女老师4
- 中建 几个局_中建一共几个局简介介绍_当前快播
- 贵州轻工职业技术学院图片_贵州轻工职业技术学院宿舍图片
- 动态焦点:重磅经济数据陆续发布 超预期复苏能否延续
- win7cf烟雾头怎么调最清楚_cf烟雾头怎么调最清楚2018
- 借调人员比在编人员都多?半月谈:不能让过度借调加重基层负担
- 湖北区县微信4月TOP100榜:“秀美浠水” 一篇诗歌夺取原创文章榜首-环球最新
- 世界微动态丨京东App 12.0版本上线 首页可展示百亿补贴金额
- 全球简讯:新一轮IPO企业上会!空窗55天后 3家主板企业上会 还有逾百家中止
- “候鸟”在官塘首府买二手房,以后会升值吗!_头条
- 我盾构隧道智能建造技术迈向新高度|每日时讯
- 酒店价格狂飙10倍!我们用大量数据找到了背后的秘密
- 永辉超市重庆再添新店,开业当日客流近万人次
- 世界微头条丨毕节男子遭遇“碰瓷”敲诈 ,“导演”竟是……
x
广告
- 《高山清渠》播出过半 李健用真实形象诠释黄大发的奋斗轨迹
- 现实题材电视剧《分界线》8月1日播出 何冰张国强强手过招
- 花篮的花儿香!民族歌剧《唱响南泥湾》在保利剧院迎来首演
- 韩国电信公布未来五年非基础设施投资预算拨出12万亿韩元
- 冰墩墩设计者给北京四中学生回信:祝福可爱奋进的中国少
- 江苏南通发现1人检测结果呈阳性 系外地返通人员
- 湖南郴州报告2例香港返湘人员新冠肺炎确诊病例
- 广西百色疫情社区传播链基本阻断
- 广西新增1例本土确诊病例 本轮本土疫情累计报告确诊病例
- 葫芦岛市两医院不再收治非绥中地区患者 就医患者闭环管理
- 苏州14日新增本土确诊1例,无症状感染者3例 详情及轨迹公布
- 2021年北京空气质量创历史最优 首次全面达标
x
广告