【我不熟悉的css】05. csc中使用变量,:root伪元素的应用

每日鸡汤:越努力,越幸运

目录

前言

一、root伪类和css变量

1. :root伪类

2. css变量

二、应用实例

1. 变量的应用

2. 设置主题色

3. 响应式布局

总结


前言

使用css的全局变量,可以减少写很多重复代码。比如设置一个全局主题色变量,整个项目用到这个颜色的地方,都用变量设置,就很方便了。


一、root伪类和css变量

1. :root伪类

在刚入行的时候,我根本不知道有这么一个类,在css中发挥着很大的作用。(原谅我的愚蠢)

:root这个css伪类匹配文档树的根元素,对html来说代表<html>元素,除了优先级更高之外,和html选择器相同

2. css变量

也可以称之为自定义属性,总之是开发者自己定义的,比如在一个class中可以这样定义

.box {
    --border-color: red; // 定义一个box作用域下的颜色
}

注意,这个属性是有作用域的,也就是在.box下面声明的变量,只能在box以及他的子元素下面才有效,我们使用的时候需要配合var函数。

.box {
    --border-color: red; // 定义一个box作用域下的颜色
    border: 1px solid var(--border-color);
    
    .box-inner {
        border: 1px solid var(--border-color); // 这个地方是有效的
    }
}

.new-box {
    // 这样用是无效的,但是也不会报错。
    border: 1px solid var(--border-color);
    // 所以一给var函数传一个备用值,在变量无效的时候使用
    border: 1px solid var(--border-color, blue);
    
}

 鉴于,属性有作用域的限制,所以多数情况下,我们在设置全局属性的时候,需要定义在:root伪元素下面,这样项目中的任何地方都可以使用到:

// :root 和css变量的合理搭配
:root {
    --border-color: red;
    --font-color: red;
}

二、应用实例

1. 变量的应用

关于css变量的应用,我在我的系列文章【跟着官网学习vue3】有提到过

大家可以参考【2. 在scss中使用js变量】这一小节的内容

【vue3】06. 跟着官网学习vue3_我有一棵树的博客-CSDN博客跟着官网学习vue3 ,class style的绑定,使用cs变量https://blog.csdn.net/qq_17335549/article/details/126669483

2. 设置主题色

我遇到的关于root伪元素的应用,一个很典型的例子就是主题色的设置,项目中可以能需要增加两套主题色【白天、黑夜】两种主题,那么我们肯定是不能对每个样式都重复写两遍,效率低下。

所以解决办法是,写一套代码,但是在涉及到颜色的地方统一使用css变量,而这一系列的css变量需要写在:root中,使其成为全局变量,请看下面的例子:

// theme.scss  
// 别忘了在全局引入(在vue项目中就是在main.js引入)这个theme.scss文件
:root {
    --theme-color: #fff;
    --theme-border-color: #000;
    --theme-font-color:  #000;
    
    // 这样我们在切换成黑夜模式的时候,只需要给body元素增加一个名为dark的class
    // 为什么设置body元素,因为:root代表html,在内一层,并且可以覆盖全局的dom就是body了
    .dark {
        --theme-color: #000;
        --theme-border-color: #fff;
        --theme-font-color: #fff;
    }
}

// 应用
.login-page {
    background: var(--theme-color);
    border: 1px solid var(--theme-border-color);
}

3. 响应式布局

同样root+css变量,可以应用在响应式布局中

<!-- 这样随着窗口宽度变化小于500px的时候,文字颜色会由红色变成绿色 -->
<template>
	<div class="login-page">
		hello word
	</div>
</template>
<style lang="scss">
// 这个style标签不能加scoped否则:root不会生效,不会应用于全局

:root {
	--theme-color: red;
}

@media screen and (max-width: 500px) {
	:root {
		--theme-color: blue;
	}
}
.login-page {
	color: var(--theme-color);
}
</style>

总结

善用css变量可以提高效率,让我们继续努力,掌握更多新鲜的知识。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值