本文详解CSS自定义属性的定义、作用域及使用var()函数引用方法,重点讲解如何利用JavaScript的setProperty动态修改全局与局部CSS变量,并结合Vue框架实现动态背景切换的完整代码示例。
一、自定义属性
CSS自定义属性本质上是存储在样式表中的变量,命名规范以双短横线(--)开头。这类变量能够承载颜色、尺寸、字体等任意合法的CSS值,并支持在文档范围内复用,从而提升样式的可维护性。
:root {
--primary-color: #3498db;
--font-size: 16px;
}
body {
color: var(--primary-color);
font-size: var(--font-size);
}二、定义自定义属性
通常建议在 :root 选择器中声明自定义属性,以便实现全局生效。当然,开发者也可以将自定义属性定义在任意特定的选择器中,此时其作用域将被限制在该选择器及其所有后代元素内部。
/* 全局定义 */
:root {
--main-bg-color: #f0f0f0;
}
/* 局部定义 */
.header {
--header-height: 60px;
height: var(--header-height);
}三、使用自定义属性
在CSS规则中,需通过 var() 函数来读取并应用自定义属性的值。
.button {
background-color: var(--primary-color);
padding: var(--padding, 10px); /* 提供默认值 */
}四、JS动态修改自定义属性
const element = document.querySelector('.container');
element.style.setProperty('--local-color', '#0000ff'); // 修改局部变量
document.documentElement.style.setProperty('--global-color', '#00ffff'); // 修改全局变量五、应用


<template>
<div ref="leftBg" class="left-bg"></div>
<button @click="updateTitleImageClass">切换伪类图片</button>
</template>
<script setup>
import { ref, onMounted } from 'vue';
const leftBg = ref(null);
const systemTitles = ['cat1', 'cat2', 'cat3'];
let currentTitleIndex = 0;
const getBackgroundSize = (title) => {
// 根据标题返回不同的背景大小
switch (title) {
case 'cat1':
return 'contain';
case 'cat2':
return 'cover';
case 'cat3':
return 'auto';
default:
return 'cover';
}
};
const images = {};
const loadImages = async () => {
for (const title of systemTitles) {
try {
const response = await fetch(`/${title}/title.jpg`);
if (!response.ok) {
throw new Error(`Failed to fetch image for ${title}`);
}
const blob = await response.blob();
images[`/${title}/title.jpg`] = URL.createObjectURL(blob);
} catch (error) {
console.error(`Error loading image for ${title}:`, error);
}
}
};
onMounted(
async () => {
await loadImages();
updateTitleImageClass();
}
);
const updateTitleImageClass = async () => {
if (!leftBg.value) {
console.error('没有找到leftBg节点');
return;
}
const systemTitle = systemTitles[currentTitleIndex];
const imagePath = `/${systemTitle}/title.jpg`; // 根据系统标题获取图片路径
if (!images[imagePath]) {
console.log(`没有找到对应的图片路径: ${imagePath}`);
return;
}
const imageUrl = images[imagePath]; // 获取图片路径
// 设置自定义属性
leftBg.value.style.setProperty('--background-image', `url(${imageUrl})`);
const backgroundSize = getBackgroundSize(systemTitle);
leftBg.value.style.setProperty('--background-image-size', backgroundSize);
// 切换到下一个标题
currentTitleIndex = (currentTitleIndex + 1) % systemTitles.length;
};
</script>
<style lang="scss" scoped>
.left-bg {
width: 100%;
height: 100px;
position: relative;
&::before {
content: '';
display: block;
background-image: var(--background-image);
background-size: var(--background-image-size, cover);
background-position: center;
background-repeat: no-repeat;
width: 100px;
height: 100%;
position: absolute;
top: 0rem;
left: 0rem;
}
}
</style>至此,关于JavaScript操作CSS自定义属性的示例代码介绍完毕。如需了解更多相关技术细节,欢迎查阅本站往期文章或继续浏览后续内容,感谢您的支持!