css3的 --自定义属性, 变量

1. 什么是 -- 自定义属性?

CSS3 引入了自定义属性,也就是我们说的css变量, 这些变量可以在css中的任何位置使用,与js中变量不同,CSS变量的作用域是基于DOM结构的,换句话说,变量可以被局部或全局使用,这取决于它们声明位置,与传统的CSS样式表中直接写死的值不同,自定义属性可以在多个地方被引用和修改,CSS自定义属性的定义以--开头,且必须var( )函数来引用

语法规则:

  • 定义: --变量名: 值;
  • 使用: var(--变量名,[可选的默认值])
  • 例子:

1. 全局作用域

//定义 :root选择器, 确保它们在全局范围内有效

:root {

--main-color: #3498db;

--font-size: 16px;

}

//其他页面都可以使用

body {

background-color: var(--main-color);

font-size: var(--font-size);

}

2. 局部作用域

如果在特定的选择器中定义了变量,它们只会在改选择器内部生效

css 复制代码
.container {
  --local-color: #ff6347;
}
 
.container p {
  color: var(--local-color);
}
 
.container .title {
  color: var(--local-color);
}

3.CSS变量的默认值

声明了CSS自定义属性之后,在使用var( )时,可以为变量提供一个默认值,如果改变量未定义或者无法找到时,CSS会使用这个默认值,这可以防止页面渲染时因缺少变量而导致的错误, var( )函数接受两个参数:

  • 必需的参数: 引用CSS变量名
  • 可选的默认值: 如果变量未定义或不可用,使用次默认值

div{

color: var(--undefined-color,#333); //如果--undefined-color 未定义,使用#333

}

在这个例子中,如果--undefined-color没有定义, color属性会使用默认的#333值

4. 动态改变CSS变量

CSS变量不仅可以在静态样式表中使用,还可以在js中动态修改,这使得开发者可以通过js实现动态主题切换,响应式设计和交互样式调整功能

1.在js中修改css变量

可以通过style.setProperty( ) 方法动态更改CSS变量

document.documentElement.style.setProperty('--primary-color', '#9b59b6');

这行代码会把全局变量 --primary-color 的值修改为 #9b59b6

或者CSS修改(鼠标移入按钮,改变变量)

button: hover{

--primary-color : #3498db //修改变量

}

2.实现主题切换, 通过js和css变量, 你可以实现一个简单的主题切换功能
javascript 复制代码
<button onclick="toggleTheme()">切换主题</button>
 
<style>
  :root {
    --background-color: white;
    --text-color: black;
  }
 
  body {
    background-color: var(--background-color);
    color: var(--text-color);
  }
</style>
 
<script>
  function toggleTheme() {
    const currentBackground = getComputedStyle(document.documentElement).getPropertyValue('--background-color').trim();
    if (currentBackground === 'white') {
      document.documentElement.style.setProperty('--background-color', '#333');
      document.documentElement.style.setProperty('--text-color', '#fff');
    } else {
      document.documentElement.style.setProperty('--background-color', 'white');
      document.documentElement.style.setProperty('--text-color', 'black');
    }
  }
</script>

点击按钮后,toggleTheme( ) 函数会动态切换 --background-color 和-text-color变量,从而实现白天/黑夜主题的切换

5.CSS变量的继承,计算和媒体查询使用

CSS变量支持继承和计算,可以利用数学表达式来操作变量的值,增强样式的灵活性

1. 当一个元素没有定义某个CSS变量时,它会从父元素继承该变量的值
css 复制代码
:root {
  --base-padding: 10px;
}
 
.container {
  padding: var(--base-padding);
}
 
.card {
  padding: var(--base-padding);  /* 继承自 .container */
}

2.可以在CSS变量中使用计算,比如通过calc( ) 函数来计算尺寸

css 复制代码
:root {
  --base-size: 20px;
}
 
.element {
  width: calc(var(--base-size) * 2);
  height: calc(var(--base-size) + 10px);
}

3.css变量与媒体查询结合使用

CSS变量非常适合和媒体查询一起使用,能够帮助你轻松地创建响应式设计,你可以在不同的屏幕尺寸下,修改变量的值以实现不同的布局主题

css 复制代码
:root {
  --font-size: 16px;
}
 
body {
  font-size: var(--font-size);
}
 
@media (max-width: 600px) {
  :root {
    --font-size: 14px; /* 在小屏幕下修改字体大小 */
  }
}

6.总结

css自定义属性var( )函数式CSS中强大的工具,它使得开发者可以更加灵活地管理样式,提高代码的可维护性,并且可以通过js动态修改样式,通过合理使用CSS变量,我们能够更高效地阻止样式代码,轻松实现主题切换和响应式设计等功能

关键点总结:

  • 变量通过--定义,在var( ) 中引用
  • 可以使用全局和局部作用域
  • 可以为变量提供默认值
  • 可以通过js动态修改变量值
  • 支持继承和计算,增强了样式表的灵活性
  • 避免重复代码,提高样式的复用性
  • 使代码更具可维护性,尤其是在大型项目中
相关推荐
冻感糕人~8 分钟前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
程序员agions11 分钟前
2026年,“配置工程师“终于死绝了
前端·程序人生
alice--小文子18 分钟前
cursor-mcp工具使用
java·服务器·前端
晚霞的不甘27 分钟前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
小迷糊的学习记录36 分钟前
0.1 + 0.2 不等于 0.3
前端·javascript·面试
梦帮科技1 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
VT.馒头2 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
css趣多多2 小时前
一个UI内置组件el-scrollbar
前端·javascript·vue.js
C澒2 小时前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
C澒2 小时前
Remesh 框架详解:基于 CQRS 的前端领域驱动设计方案
前端·架构·前端框架·状态模式