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

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.mzph.cn/bicheng/17376.shtml

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

相关文章

C++之“流”-第2课-C++和C标准输入输出同步

为什么C和C的标准输入输出不同步时&#xff0c;数据会混乱&#xff1f;同步会带来多大性能损失&#xff1f;为什么说这个损失通常不用太在乎&#xff1f; 0. 课堂视频 C之“流”-第2课&#xff1a;和C输入输出的同步 1. 理解cin和cout的类型与创建过程 std::cout 是std::ostre…

添加、修改和删除字典元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 由于字典是可变序列&#xff0c;所以可以随时在字典中添加“键-值对”。向字典中添加元素的语法格式如下&#xff1a; dictionary[key] value 参数…

You don‘t have enough free space或者no space left on device异常

1.磁盘空间不足 Linux安装软件显示 You dont have enough free space 或者docker拉镜像时&#xff0c;出现磁盘空间不足的情况 no space left on device 如果你是ubuntu系统。查看磁盘空间 df -h 多半是这个目录满了/dev/mapper/ubuntu--vg-ubuntu--lv 大多情况我们只希望扩…

学习编程对英语要求高吗?

学习编程并不一定需要高深的英语水平。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 虽然一些编程资源和文档可能…

typora自动生成标题序号(修改V1.0)

目录 带序号效果图 解决方法 带序号效果图 解决方法 1.进入文件夹&#xff1a;文件–>偏好设置–>外观–>主题–>打开主题文件夹 2.如果没有base.user.css文件&#xff0c;新建一个。如果有直接用记事本打开&#xff0c;把下面代码拷贝进去保存。 /** initiali…

【JUC编程】-多线程和CompletableFuture的使用

多线程编程 文章目录 多线程编程[toc]引言创建多线程的方式继承Thread类实现Runnable接口实现Callable接口Callable和Runnable的区别 Lambda表达式 线程的实现原理Future&FutureTask具体使用submit方法Future到FutureTask类Future注意事项局限性 CompletionService引言使用…

第八大奇迹

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

Ps 滤镜:消失点

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

C++入门3——类与对象(2)

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。可是空类中真的什么都没有吗&#xff1f; 其实并不是的&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xf…

libmodbus开发库介绍

目录 功能概要源码获取源码内容结构源码与移植 功能概要 libmodbus是一个免费的跨平台支持RTU和TCP的Modbus库&#xff0c;遵循LGPL V2.1协议。libmodbus支持Linux、Mac Os X、FreeBSD、QNX和Windows等操作系统。libmodbus可以向符合Modbus协议的设备发送和接收数据&#xff0…

《Python侦探手册:用正则表达式破译文本密码》

在这个信息爆炸的时代&#xff0c;每个人都需要一本侦探手册。阿佑今天将带你深入Python的正则表达式世界&#xff0c;教你如何像侦探一样&#xff0c;用代码破解文本中的每一个谜题。从基础的字符匹配到复杂的数据清洗&#xff0c;每一个技巧都足以让你在文本处理的领域中成为…

系统思考—战略沙盘推演咨询服务

今日与JSTO团队一起学习了《战略沙盘推演咨询服务》。通过沙盘体验&#xff0c;我深刻感受到组织与战略就像一张皮的正反两面。在转型过程中&#xff0c;即使战略非常明确&#xff0c;团队成员由于恐惧和顾虑&#xff0c;往往不愿意挑战新的业务&#xff0c;从而难以实现战略目…

VasDolly图形工具-Android多渠道打包福利

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;旨在更好的帮助开发者构建多渠道包 使用 下载并解压工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;本地需安装java环境&#xff09; 渠道格式说明 txt文件&#xff…

Qt | QTabBar 类(选项卡栏)

01、上节回顾 Qt | QStackedLayout 类(分组布局或栈布局)、QStackedWidget02、简介 1、QTabBar类直接继承自 QWidget。该类提供了一个选项卡栏,该类仅提供了一个选项卡, 并没有为每个选项卡提供相应的页面,因此要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十一)- 微服务(1)

微服务 1.认识微服务 SpringCloud底层是依赖于SpringBoot的&#xff0c;并且有版本的兼容关系&#xff0c;如下&#xff1a; 2. 服务拆分 需求 &#xff1a; 把订单信息和用户信息一起返回 从订单模块向用户模块发起远程调用 &#xff0c; 把查到的结果一起返回 步骤 &…

多态(难的起飞)

注意 virtual关键字&#xff1a; 1、可以修饰原函数&#xff0c;为了完成虚函数的重写&#xff0c;满足多态的条件之一 2、可以菱形继承中&#xff0c;去完成虚继承&#xff0c;解决数据冗余和二义性 两个地方使用了同一个关键字&#xff0c;但是它们互相一点关系都没有 虚函…

JAVASE总结一

1、 2、引用也可以是成员变量&#xff08;实例变量&#xff09;&#xff0c;也可以是局部变量&#xff1b;引用数据类型&#xff0c;引用&#xff0c; 我们是通过引用去访问JVM堆内存当中的java对象&#xff0c;引用保存了java对象的内存地址&#xff0c;指向了JVM堆内存当中…

AURIX TC3xx单片机介绍-启动过程介绍1

从各个域控制器硬件解决方案来看,MPU可能来自多个供应商,有瑞萨,有NXP等,但对于MCU来说,基本都采用英飞凌TC3xx。 今天我们就来看一下TC3xx的启动过程,主要包含如下内容: uC上电过程中,会经过一个上电时序,从复位状态“脱离”出来;Boot Firmware是复位后第一个执行的…

Python实现对Word文档内容出现“重复标题”进行自动去重(4)

前言 本文是该专栏的第4篇,后面会持续分享Python办公自动化干货知识,记得关注。 在本专栏上一篇文章《Python实现对Word文档内容出现“重复标题”进行自动去重(3)》中,笔者有详细介绍使用python对word文档内容的目标文本进行自动去重。只不过本文要介绍的“去重方法”与上…

计算机专业必考之计算机指令设计格式

计算机指令设计格式 例题&#xff1a; 1.设相对寻址的转移指令占3个字节&#xff0c;第一字节为操作码&#xff0c;第二&#xff0c;第三字节为相对偏移量&#xff0c; 数据在存储器以低地址为字地址的存放方式。 每当CPU从存储器取出一个字节时候&#xff0c;自动完成&…