在React中使用Sass实现Css样式管理-10

news2024/12/27 15:03:33

0. 什么是Sass

Sass(Syntactically Awesome Stylesheets)是一个 CSS 预处理器,是 CSS 扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间:

  • Sass 引入合理的样式复用机制,可以节约很多时间来重复。
  • 支持变量和函数,利用代码简洁。

有两种文件后缀名,.sass和.sccs区别在于前者用缩进代替了后者的{}和分号,建议用sccs后续来书写sass代码

  • sass,不使用大括号和分号。
  • scss,与css文件格式差不多,使用大括号和分号(推荐)。

在这里插入图片描述

1. 在React中使用

  • 正常使用
# 安装
 cnpm install --save-dev sass

# 新建文件
App.scss
.button{
   color:red
}

# js中使用
import "./Index.scss";
<div className={color}></div>
  • 模块使用
# 安装
npm install --save-dev css-loader style-loader

# 新建文件
App.scss
.button{
   color:red
}

# js中使用
import styles from './App.scss'
<div className={styles.button></div>

还需要配置webpack.config.js

{
  test: /\.css$/,
  use: [
    'style-loader',
    {
      loader: 'css-loader',
      options: {
        importLoaders: 1,
        modules: {
          localIdentName: '[name]__[local]__[hash:base64:5]', // 修改CSS类名的生成格式
        },
      },
    },
    'postcss-loader', // 如果有其他的CSS预处理器,比如autoprefixer,可以在此添加
  ],
}

这东西语法并不难,基本2小时就学会了。

2. 基本语法

基本数据

  • 数字,1, 2, 13, 10px
  • 字符串,有引号字符串与无引号字符串,“foo”, ‘bar’, baz
  • 颜色,blue, #04a3f9, rgba(255,0,0,0.5)
  • 布尔型,true, false
  • 空值,null
  • 数组 (list),用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
  • maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)
.item{
	width:100%;
	background:#ffffff;
	line-height:40px;
}

注释

  1. 单行注释: / / css文件里不会显示 压缩方式的css不会显示
  2. 多行注释: /**/ css文件里会显示 压缩方式的css不会显示
  3. 强制注释:/* ! */ css文件里会显示 压缩方式的css会显示
/*
多行注释
*/

//单行注释

运算

所有数据类型均支持相等运算 == 或 !=,此外,每种数据类型也有其各自支持的运算方式。

  • 数字:数字的加减乘除、取整等运算 (+, -, *, /, %),如果必要会在不同单位间转换值。 关系运算 <, >, <=, >= 也可用于数字运算;
.box {
	width: 50px + 50px;
	height: 100px - 50px;
	margin-top: 10px * 10; // 这里不能两个都带单位,否则是100px*px这种不合法的值
	padding-top: (100px / 2) ;// css会将/认为是合法的,所以需要加括号
}
  • 颜色:颜色值的运算是分段计算进行的,也就是分别计算红色,绿色,以及蓝色的值。例如 #010203 + #040506,则计算 01 + 04 = 05、02 + 05 = 07、03 + 06 = 09,结果为#050709;
.color1{
	color: #010120 + #234234;
}
.color2{
	color: #010120 * 2;
}
.color3{
	color: rgba(250, 0, 0, 0.75) + rgba(5, 255, 0, 0.75);
}
  • 字符:有引号字符串(位于 + 左侧)连接无引号字符串,运算结果是有引号的,相反,无引号字符串(位于 + 左侧)连接有引号字符串,运算结果则没有引号。
.string1:before{
	font-family: icon + font ;
	content: "带引号字符串" + 不带引号字符串;
}
.string2:before{
	font-family: icon + font ;
	content: 不带引号字符串 + "带引号字符串";
}
// -------------生成的css代码-------------
.string1:before {
  font-family: iconfont;
  content: "带引号字符串不带引号字符串"; 
}
.string2:before {
  font-family: iconfont;
  content: 不带引号字符串带引号字符串; 
}
  • 布尔: 支持布尔型的 and or 以及 not 运算。
.bool1:before{
	content: $bool and false;
}
.bool2:before{
	content: $bool or false;
}
.bool3:before{
	content: not $bool;
}

// -------------生成的css代码-------------
.bool1:before {
  content: false; }
.bool2:before {
  content: true; }
.bool3:before {
  content: false; }

嵌套.和&

  • 选择器嵌套
.grandpa {
    width: 200px;
    height: 200px;
    
    .father {
        width: 100px;
        height: 100px;
    }
}

// -------------生成的css代码-------------
.grandpa {
  width: 200px;
  height: 200px;
}
  • 父级选择器 &
.grandpa .father {
  width: 100px;
  height: 100px;
}

.box {
	a {
		&:hover {
			color: red;
		}
	}
}
// -------------生成的css代码-------------
.box a:hover {
  color: red;
}

上述这些用法和原生的.css文件基本没啥区别

3. 复用相关

$和#变量定义

  • 变量
$dark: #000;
$side: left;
.box {
	color: $dark;
}

.box2 {
	background: $dark;
	border-#{$side}-radius: 5px;
}
  • 插值
$selectName:'.foo';
$attrName:'width';
$content: "content内容";

#{$selectName}:before {
	#{$attrName}:12px;
	content: "#{$content}";
}
// -------------生成的css代码-------------
.foo:before {
  width: 12px;
  content: "content内容"; }

@function自定义函数

$width : 400;
$multiple: 2;
@function app_width($width,$multiple){
	@return $width * $multiple px;
}
#app{
	width: app_width($width,$multiple);
}

// -------------生成的css代码-------------
#app { width: 800 px; }

@mixin和@include复用

// 定义一个mixin
@mixin box-style {
	width: 200px;
	height: 200px;
	background: #000;
}
// 使用
.box {
	@include box-style;
	// 当然也可以继续在这里添加样式
	border-radius: 5px;
}

// -------------生成的css代码-------------
.box {
  width: 200px;
  height: 200px;
  background: #000;
  border-radius: 5px;
}

  • 带参数
$box-width: 200px;
$box-height: 200px;
// 定义一个mixin
@mixin box ($width, $height) {
	width: $width;
	height: $height;
}
// 使用
.box {
	// 1. 第一种用法, 直接将css样式写入
	@include box(200px, 200px);

	// 2. 第二种, 将定义好的变量写入
	@include box($box-width, $box-height);
}

// -------------生成的css代码-------------
.box {
  width: 200px;
  height: 200px;
}

@extend继承

支持多重继承,同名则覆盖

.error{
	color:red;
}
.success{
	color:green;
}
.msg{
	@extend .error;
	@extend .success;
	color: #555555;
}

// -------------生成的css代码-------------
.error, .msg {
  color: red; }

.success, .msg {
  color: green; }

.msg {
  color: #555555; }

@import引入文件

如果一个页面需要使用其他页面的样式,sass可以导入其他的scss文件,scss会把他们编译成一个css文件。这样在开发中可以把一个页面的样式分割成多个scss文件,然后在页面的scss文件中导入其他scss,可以实现css的模块化开发。注意不能导入其它类型的文件或远程文件。

//@import 语法
@import "test2.scss";
// 导入多文件
@import "test2.scss", "test3.scss";

4. 编程相关

@if @else条件语句

.box {
	@if 1+1 == 2 {
		color: red;
	} @else if 1+1 == 3 {
		color: blud;
	} @else {
		color: pink;
	}
}
// -------------生成的css代码-------------
.box {
  color: red;
}

@for循环

@for $i from 1 through 3 {
	.item-#{$i} {
		width: 2em * $i;
	}
}

// -------------生成的css代码-------------
.item-1 { width: 2em; }
.item-2 { width: 4em; }
.item-3 {  width: 6em; }

@each迭代

$list : ['one','two'];
@each $i in $list {
	.item-#{$i}:before {
		content: $i;
	}
}

// -------------生成的css代码-------------
.item-one:before {
  content: "one"; 
}

.item-two:before {
  content: "two"; 
}

@debug、@warn、@error调试

打印到标准错误输出流。

  • debug
@debug 10em + 12em;
  • warn
@mixin adjust-location($x, $y) {
  @if unitless($x) {
    @warn "Assuming #{$x} to be in pixels";
    $x: 1px * $x;
  }
  @if unitless($y) {
    @warn "Assuming #{$y} to be in pixels";
    $y: 1px * $y;
  }
  position: relative; left: $x; top: $y;
}
  • error
@mixin adjust-location($x, $y) {
  @if unitless($x) {
    @error "$x may not be unitless, was #{$x}.";
  }
  @if unitless($y) {
    @error "$y may not be unitless, was #{$y}.";
  }
  position: relative; left: $x; top: $y;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端之ES6语法】

前端之ES6语法 1. ES6简介2. ES6新特性3.ES6不支持&#xff0c;使用babel3.1 参考文献 4.let和const命令5. 模版字符串6.函数之默认值、剩余参数7. 函数之扩展运算符、箭头函数8.箭头函数this指向和注意事项9.解构赋值10.对象扩展11.Symbol类型12.Set集合类型13.Map数据类型14.…

C++ | Leetcode C++题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; class Solution { public:Node* connect(Node* root) {if (root nullptr) {return root;}// 从根节点开始Node* leftmost root;while (leftmost->left ! nullptr) {// 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next…

第八大奇迹

目录 题目描述 输入描述 输出描述 输入输出样例 示例 输入 输出 运行限制 原题链接 代码思路 题目描述 在一条 R 河流域&#xff0c;繁衍着一个古老的名族 Z。他们世代沿河而居&#xff0c;也在河边发展出了璀璨的文明。 Z 族在 R 河沿岸修建了很多建筑&#xff0c…

Ps 滤镜:消失点

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V 两条平行的铁轨或两排树木连线相交于很远很远的某一点&#xff0c;这点在透视图中叫做“消失点”&#xff0c;也称为“灭点”。 消失点 Vanishing Point滤镜主要用于在图像中处理具有透视…

鸿蒙ArkTS声明式开发:跨平台支持列表【按键事件】

按键事件 按键事件指组件与键盘、遥控器等按键设备交互时触发的事件&#xff0c;适用于所有可获焦组件&#xff0c;例如Button。对于Text&#xff0c;Image等默认不可获焦的组件&#xff0c;可以设置focusable属性为true后使用按键事件。 说明&#xff1a; 开发前请熟悉鸿蒙开…

电磁仿真--CST综合建模练习1

1. 简介 本文展示一个CST自带的示例&#xff0c;在三维空间中使用带线计算传输线的S参数。基板顶部的带线通过小圆柱连接到底部的短带线&#xff0c;以便绕过可能存在的障碍。 结构生成 该结构完全通过参数输入进行建模&#xff0c;参考波长为10毫米&#xff0c;因此可以轻松…

HTML静态网页成品作业(HTML+CSS)——川西旅游介绍网页(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。 二、作品演示 三、代…

java_方法重写(覆盖)

介绍 现在我们来试一下 代码 父类 package b;public class father_ {//father class//4attributepublic void cry() {System.out.println("小动物叫唤");} } package b; 子类 public class graduate extends father_ {public void cry() {//子类方法//非私有的属性和…

ROS | 自动导航

保存&加载地图&#xff1a; image:地图文件 resolution:地图分辨率&#xff08;珊格地图&#xff09; origin&#xff1a;地图左下标 第三个参数是偏转角度 加载创建好的yaml文件&#xff1a; 年轻人第一次导航&#xff1a; 全局规划器&#xff1a; 代价地图设置参数&#…

大数据开发面试题【Mysql篇】

181、mysql数据库中的引擎 用于数据存储、处理和保护数据的核心服务&#xff0c;不同的数据库引擎有其各自的特点&#xff0c;常见的引擎&#xff1a;InnoDB&#xff0c;Mylsam、Memory、Mrg_Mylsam、Blackhole innodb&#xff1a;是一个事务性存储引擎&#xff0c;提供了对事…

Android 14 - 绘制体系 - VSync(1)

整体框架 VsyncConfiguration&#xff1a;一些基本参数的配置类&#xff0c;比如PhaseOffsets、WorkDuration等。 Scheduler&#xff1a;作为SF生成和派发VSync的整体调度器&#xff0c;主要面向SurfaceFlinger提供VSync相关接口。Scheduler包含对所有屏幕的VSync的控制。本身是…

AI智能体|扣子Coze文生图功能接入微信公众号

大家好&#xff0c;我是无界生长。 AI智能体&#xff5c;扣子Coze文生图功能接入微信公众号本文分享了如何将Coze平台的文生图功能接入微信公众号的详细操作流程&#xff0c;包括创建图像流、创建并配置Bot、设置提示词和开场白、调试、发布等步骤。如果看完还没学会的话&…

【设计模式】创建型-工厂方法模式

前言 工厂方法模式是一种经典的创建型设计模式&#xff0c;它提供了一种灵活的方式来创建对象实例。通过本文&#xff0c;我们将深入探讨工厂方法模式的概念、结构和应用。 一、什么是工厂方法模式 工厂方法模式是一种创建型设计模式&#xff0c;旨在解决对象的创建过程和客…

B站尚硅谷git学习记录

文章目录 一、Git概述1.何为版本控制2.为什么需要版本控制3.版本控制工具 二、Git常用命令1.设置用户签名1.1 基本语法1.2 案例实操 2.初始化本地库2.1 基本语法2.2 案例实操 3.查看本地库状态3.1基本语法3.2 案例实操&#xff08;1&#xff09;首次查看&#xff08;工作区没有…

解决“nothing added to commit but untracked files present“

在执行git commit 命令时错误信息显示系统无法打开指定的设备或文件 &#xff0c;说明项目的文件没有“add”&#xff0c;需要先执行git add 文件名&#xff0c;然后再执行git commit -m “xxx” 直接先git add 文件名添加到缓冲区&#xff0c;再git commit -m “xxx”提交 gi…

[docker] docker 安全知识 - 镜像,port registry

[docker] docker 安全知识 - 镜像&#xff0c;port & registry 这是第一篇&#xff0c;安全部分还有一篇笔记就记完了 说实话&#xff0c;看完了要学的这些东西&#xff0c;感觉大多数安全问题都可以通过验证登录的合法性去解决 镜像 镜像的问题还是比较多的&#xff0…

数学建模--LaTeX的基本使用

目录 1.回顾 2.设置这个页眉和页脚 3.对于字体的相关设置 4.对于这个分级标题的设置 5.列表的使用 6.插入图片 1.回顾 &#xff08;1&#xff09;昨天我们了解到了这个latex的使用基本常识&#xff0c;以及这个宏包的概念&#xff0c;区域的划分&#xff0c;不同的代码代…

05.配置tomcat管理功能

认证失败&#xff0c;需要配置tomcat-users.xml文件 配置用户信息 [rootweb01 /application/tomcat/conf\]# tail tomcat-users.xml <role rolename"admin-gui"/> <role rolename"host-gui"/><role rolename"mana…

图解 Transformer

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

React(4): 使用 unocss + react-ts + vite 开发

React(4): 使用 unocss react ts 开发 之前一直使用 css-module 开发页面&#xff0c;觉得太过繁琐&#xff0c;看到 unocss , 眼前一亮&#xff0c;觉得可以拿来快速开发页面&#xff08;偷懒&#xff09; vite官网 unocss tailwindcss 说明 该方法需要对 tailwindcss 有一…