运用CSS变量

简介: 运用CSS变量   使用方法   正确的用法   :root{ --JC_Color:"#ff0"; /*定义变量*/ --JC_Img_Url:"url(https://taobao.com/jc.png)";/*定义背景图片*/ --JC_TRS:"translateY(0)";/*定义CSS3变换*/ } .

运用CSS变量

 

使用方法

 

正确的用法

 
:root{
    --JC_Color:"#ff0"; /*定义变量*/
    --JC_Img_Url:"url(https://taobao.com/jc.png)";/*定义背景图片*/
    --JC_TRS:"translateY(0)";/*定义CSS3变换*/
}

.elmA{
    color:var(--JC_Color);/*使用变量*/
    background-image:var(--JC_Img_Url)/*使用背景图片变量*/
    transform:var(--JC_TRS);/*使用CSS3变换*/
}
 

容易犯错的用法

 
下面的用法是错误的:
:root{
    --JC_Img_Url:"https://taobao.com/jc.png";/*定义背景图片*/
    --JC_TRS:"0";/*定义CSS3变换*/
}

.elmA{
    background-image:url(var(--JC_Img_Url))/*使用背景图片变量*/
    transform:translateY(var(--JC_TRS));/*使用CSS3变换*/
}
 

Javascript设置CSS变量

documentElement.style.setProperty("--JC_Img_Url","url(https://taobao.com/jc.png)")
 

Javascript获取CSS变量

documentElement.style.getPropertyValue("--JC_Img_Url")
 

其他

 

作用域

CSS变量是存在作用域的,作用域是针对DOM节点的。
.elmA{
    --JC_Color:"#f11";
}

/*在非 .elmA 节点下的DOM节点无法获取变量 --JC_Color 的值*/
:root{
    color:var(--JC_Color); /*失效值*/
}
 
可覆盖
:root{
    --JC_Color:"#f00";
}
body .elmA{
    --JC_Color:"#f11";
}

/*
* JS 设置
*/
document.querySellector('.elmA').style.setProperty("--JC_Color","#f12")

/*
*会使用在当前节点定义的值
*这意味着可以设置默认值了
**/
.elmA{
    color:var(--JC_Color); /*#f12*/
}
 

一个简单的封装

class CssVar {
    /**
     * 针对某一Dom节点的某个CSS变量值进行设置
     * 包括了获取、设置和删除
     * next:可以针对背景图片、transform等进行再次封装,让其使用更简单
     * @param {Object} param0 配置
     */
    constructor({elm,name,value}){
        this.name = `--${name}`
        this._elm = elm || document.documentElement
        this.set(value)
    }
    set(value){
        this._elm.style.setProperty(this.name,value)
    }
    get(){
        return this._elm.style.getPropertyValue(this.name).trim()
    }
    selfDestruction(){
        this._elm.style.removeProperty(this.name)
    }
}
 

一个简单的Demo

 
list 插入动画。
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        :root{
            --Item_TranslateY: translateY(100%);
            --Item_Opacity: 0;
        }
        .list{
            overflow:hidden;
            position: relative;
        }
        .item{
            transition: all 1s;
            opacity: var(--Item_Opacity);
            transform: var(--Item_TranslateY)
        }
    </style>
</head>
<body style="height:100%;padding:0;margin:0">
    <button id="inputLi">插入</button>

    <ul class="list" id="list"></ul>

    <script>
        class CssVar {
            /**
             * 针对某一Dom节点的某个CSS变量值进行设置
             * 包括了获取、设置和删除
             * next:可以针对背景图片、transform等进行再次封装,让其使用更简单
             * @param {Object} param0 配置
             */
            constructor({elm,name,value}){
                this.name = `--${name}`
                this._elm = elm || document.documentElement
                this.set(value)
            }
            set(value){
                this._elm.style.setProperty(this.name,value)
            }
            get(){
                return this._elm.style.getPropertyValue(this.name).trim()
            }
            selfDestruction(){
                this._elm.style.removeProperty(this.name)
            }
        }

    </script>
    <script>
        function insertItem(){
            let id = (+new Date).toString(32)
            let html = `<li class="item" id="${id}">我是列表</li>`
            window.list.innerHTML += html
            let item = window[id]
            // 触发动画
            setTimeout(v=>{
                new CssVar({
                    elm:item,
                    name:"Item_TranslateY",
                    value:0
                })
                new CssVar({
                    elm:item,
                    name:"Item_Opacity",
                    value:1
                })
            },50)
        }
        window.inputLi.onclick = function(){
            insertItem()
        }
    </script>
</body>
</html>
相关文章
|
8月前
|
前端开发 开发者
CSS变量,也被称为CSS自定义属性或级联变量
【4月更文挑战第7天】CSS变量,也被称为CSS自定义属性或级联变量
62 3
|
2月前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
66 5
|
2月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
2月前
|
前端开发 JavaScript
如何在 CSS 变量中使用函数?
【10月更文挑战第28天】虽然CSS变量本身不能像传统编程语言中的函数那样直接进行复杂的运算和逻辑处理,但通过CSS预处理器、`calc()` 函数以及与JavaScript的结合,可以在很大程度上实现类似函数的功能,提高CSS样式的灵活性和可维护性,满足各种不同的页面设计和交互需求。
|
2月前
|
前端开发 JavaScript 数据处理
CSS 变量的作用域和 JavaScript 变量的作用域有什么不同?
【10月更文挑战第28天】CSS变量和JavaScript变量虽然都有各自的作用域概念,但由于它们所属的语言和应用场景不同,其作用域的定义、范围、覆盖规则以及与其他语言特性的交互方式等方面都存在明显的差异。理解这些差异有助于更好地在Web开发中分别运用它们来实现预期的页面效果和功能逻辑。
|
2月前
|
前端开发 开发者 容器
CSS 变量的作用域是什么?
【10月更文挑战第28天】理解CSS变量的作用域规则对于有效地使用CSS变量来组织和管理页面样式非常重要。通过合理地利用全局作用域和局部作用域,以及掌握变量的覆盖和继承规则,可以创建更具可维护性、灵活性和可扩展性的CSS样式表,实现各种复杂的页面设计和样式需求。
|
2月前
|
前端开发 JavaScript UED
|
2月前
|
前端开发 JavaScript UED
如何使用 JavaScript 动态修改 CSS 变量的值?
【10月更文挑战第28天】使用JavaScript动态修改CSS变量的值可以为页面带来更丰富的交互效果和动态样式变化,根据不同的应用场景和需求,可以选择合适的方法来实现CSS变量的动态修改,从而提高页面的灵活性和用户体验。
|
4月前
|
前端开发
Vue3基础(十ba)___在css中使用props或者计算属性的变量,来实现动态样式
本文介绍了如何在Vue3中通过CSS变量和props或计算属性来实现动态样式。
101 0
|
7月前
|
前端开发 JavaScript 开发者
CSS进阶-CSS变量
【6月更文挑战第13天】本文介绍了CSS变量(Custom Properties)的基本概念、应用场景和常见问题。通过声明与使用示例,展示了如何定义和引用变量。文章讨论了兼容性、作用域、错误引用及JavaScript交互等易错点,并提供了相应的解决方案。此外,还分享了实践技巧,如模块化色彩系统、响应式设计和动画制作。通过学习,开发者能更好地利用CSS变量提高样式灵活性和维护性。
118 3