css预处理器scss的使用如何全局引入

目录

scss 基本功能

1、嵌套

2、变量 $

3、@mixin 和 @include

4、@extend

5、@import

scss 在项目中的使用

1、存放 scss 文件

2、引入 variables 和 mixins

2-1、局部引入

2-2、全局引入

3、入口文件中引入其他文件 


    项目中使用 css 预处理器,可以提高 css 开发效率,合理应用预处理器的特性,也可以提高 css 代码的可维护性。

    目前常见的  css 预处理器有三种:less,scss(sass升级版),stylus。不管是哪一种,最基本的 variables,extend,mixin,import 这些都是有的,只不过具体的用法和写法各有不同罢了。大家可以根据自己的喜好,选择自己喜欢的预处理器。

    我选择的是 scss。具体原因是:element-ui 的 theme-chalk 使用 scss 编写,项目中如果也使用 scss,那么后续想改变 element-ui 的主题色,会非常容易。当然不使用 scss,也是可以改变 element-ui 的主题色或是使用自定义主题的,只不过个人觉得比较麻烦。

    所以,在这里直接选择了 scss。而且接触过的大部分项目也都是使用的 scss,

不光 PC 端,还有移动端以及小程序的项目。


scss 基本功能

1、嵌套

// scss 写法
.container{
  width: 100%;
  height: 100%;
  .wrap{
    max-width: 1200px
  }
}
// 以上代码使用 css 书写
.container{
  width: 100%;
  height: 100%;
}
.container .wrap{
  max-width: 1200px;
}

// scss 写法
.title {
  font: {
    family: fantasy;
    size: 20px;
    weight: bold;
  }
}
// 以上代码使用 css 书写
.title{
  font-family: fantasy;
  font-size: 20px;
  font-weight: bold;
}
 
// scss 写法
.container{
  width: 100%;
  height: 100%;
  background: #409eff;
  &:hover{
    background: #42b983;
  }
}
// 以上代码使用 css 书写
.container{
  width: 100%;
  height: 100%;
  background: #409eff;
}
.container:hover{
  background: #42b983;
}

2、变量 $

$color = #2E98FE
 
.container{
    width: 100%;
    height: 100%;
    background: $color
}

3、@mixin 和 @include

@mixin title-text {
  font: {
    size: 20px;
    weight: bold;
  }
  color: #2c3e50;
}
.card__title{
  width: 100%;
  height: 40px;
  @include title-text
}

4、@extend

// scss @extend
.error {
  border: 1px #f00;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}
 
// 以上代码最终编译为
.error, .seriousError {
  border: 1px #f00;
  background-color: #fdd; 
}
.seriousError {
  border-width: 3px; 
}

5、@import

@import "foo.scss";

scss 在项目中的使用

1、存放 scss 文件

在 assets 文件夹中创建 scss 文件夹,用于存放 scss 的所有文件

具体文件如下:

当然,也有的习惯是放到 styles 文件目录下 :

common.scss        公共基础样式

main.scss        入口文件

mixins.scss        混入样式

reset.scss        重置文件

variables.scss        变量

    一般情况下,每个系统都有属于自己的一套样式风格。我们可以根据设计规范,定义一套变量,然后在实际的开发中,使用变量编写 css 样式。这样写的好处是什么呢?就是当你的项目已经开发到一半或者已经开发完成进入测试阶段了,这时老板走过来对你说,这个系统怎么是蓝色的呀,改成红色吧。这个时候,再也不需要一个一个文件的修改样式了,只需要修改 variables 中的一个变量就可以了。


2、引入 variables 和 mixins

variables.scss 文件定义好之后,有两种使用方式:局部引入和全局引入

mixins.scss 文件类似。

2-1、局部引入

在具体的文件中引入。

// App.vue
 
<style lang="scss" scoped>
@import './assets/scss/variables.scss';

.container{
  width: 100%;
  height: 100%;
  background: $background-color;
}
</style>

    局部引入,变量只能在被引入的文件中使用。通常,变量在绝大多数文件中都会被用到,如果在每个文件中都要引入一遍,略显麻烦,这个时候就可以考虑 全局引入 。 


2-2、全局引入

一次引入,随处可用。

// vue.config.js
 
module.exports = {
  publicPath: './',
  outputDir: process.env.VUE_APP_OUTPUT,
  css: {
    loaderOptions: {
      sass: {
        prependData: `
          @import "@/assets/scss/variables.scss";
          @import "@/assets/scss/mixins.scss";
        `
      }
    }
  }
}

这里需要注意的是: sass-loader 版本不同,loaderOptions 中 prependData 的属性名不同

  • sass-loader v8-,这个属性名是 "data"
  • sass-loader v8 中,这个属性名是 "prependData"
  • sass-loader v10+,这个属性名是 "additionalData"


3、入口文件中引入其他文件 

// main.scss
 
@import "./reset.scss";
@import "./common.scss";

这里注意文件的引入顺序。

// main.js
 
import Vue from 'vue'
import App from './App.vue'
import './registerServiceWorker'
import router from './router'
import store from './store'
 
import './assets/scss/main.scss'
 
Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount('#app');

以上,就是我在项目用使用 scss 的方案。

之所以整理这篇文章,主要是因为项目有一个整体主色调系:紫色

定义了一个色值变量 : $theme-purple , 主题紫色,整个项目很多地方都会使用到,

并且将其也写到了 variables.scss  变量文件 中,接下来就是重点了,

将 variables.scss 在 main.js 入口文件中打算引入供全局使用时

却发现别的地方根本无法使用,后来经过百度一番后,

才得知好像是 scss变量 无法简单的通过 main 就能全局引用了,

得需要单独去 Vue 的 vue.config.js 配置文件里面配置一下才可。

也就是上面的全局引入方式

      sass: {
        prependData: `@import "@/assets/scss/mixins.scss";`
      }

这里我只引入了 mixins ,是因为我在 mixins 里面引入了 variables.scss

这样重启一下项目就 OK 大功告成啦 ~ 下课!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

boot整合xfire

最近换了项目组&#xff0c;框架使用的boot整合的xfire&#xff0c;之前没使用过xfire&#xff0c;所以写个例子记录下&#xff0c;看 前辈的帖子 整理下 pom文件 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

上位机图像处理和嵌入式模块部署(qmacvisual图像识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 所谓图像识别&#xff0c;就是对图像进行分类处理&#xff0c;比如说判断图像上面的物体是飞机、还是蝴蝶。在深度学习和卷积神经网络CNN不像现在这…

企微获客助手功能,行为触发如何实现回传的?

获客助手&#xff0c;这个听起来就相当酷炫的名字&#xff0c;它实际上是一个帮助企业将推广流量快速导入企业微信的神器。通过它&#xff0c;企业可以吸引越来越多的用户加为好友&#xff0c;从而建立起更紧密的客户关系。但是&#xff0c;如何进一步提升导入企业微信的流量质…

IntersectionObserver:实现滚动动画、懒加载、虚拟列表

认识 浏览器自带的适用于 「监听元素与视窗交叉状态」 的观察器&#xff1a;「IntersectionObserver&#xff08;交叉观察器&#xff09;」 IntersectionObserver 是一种 JavaScript API&#xff0c;它提供了一种异步监测元素与其祖先容器或视口之间交叉状态的方法。简单来说&…

数据库备份工具(实现数据定时覆盖)

数据库备份工具&#xff08;实现数据定时覆盖&#xff09; 永远热爱&#xff0c;永远执着&#xff01; 工具介绍 自动化测试数据库更新调度程序 这段 Python 脚本自动化了每天定时从生产数据库更新测试数据库的过程。它利用了 schedule 库来安排并执行每天指定时间的更新任务…

(vue)el-table表格回显返回的已勾选的数据

(vue)el-table表格编辑时回显返回的已勾选的数据 tableData数据&#xff1a; el-tableref"multipleTable":data"tableData"... >...<el-table-column prop"result" label"相关.." align"center" width"220"…

【Java程序设计】【C00344】基于Springboot的船舶维保管理系统(有论文)

基于Springboot的船舶维保管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

NX二次开发判断两对象是否相连(相交,相离)

一、概述 最近学习如何判断两根曲线是否连接&#xff08;不是相交&#xff0c;两条直线有一个端点重合&#xff09;&#xff0c;网上说到两种方法&#xff0c;一种是第一种方法&#xff0c;UF_MODL_ask_minimum_dist_3函数判断两个对象的距离&#xff0c;测得的距离等于零&…

【python】进程和线程

文章目录 进程创建进程os.fork() - 只适用于linux/unix/macmultiprocessing模块Process 类Pool进程池进程间通信队列queue常见用法管道pipes线程创建线程线程间通信互斥锁队列进程 任务管理器中一个任务就是一个进程 创建进程 os.fork() - 只适用于linux/unix/mac multipr…

Halcon与C#联合开发——1.读取图片、图像二值化

在vs中引入halcon控件 修改目标平台为 x64 拖出三个控件 代码展示 using System; using System.Windows.Forms; //引用支持halcon的命名空间 using HalconDotNet;namespace _1.HalconDisplay {public partial class Form1 : Form {// HObject 是Halcon库中表示图像和其他图形…

CentOS7下nginx部署测试

nginx部署测试 #安装程序和依赖yum install -y vim net-tools wgetyum -y install gcc pcre-devel zlib-devel openssl openssl-devel #下载nginx mkdir /opt/nginx cd /opt/nginx wget https://nginx.org/download/nginx-1.20.2.tar.gz#解压 tar zxvf nginx-1.20.2.tar.gz c…

Docker容器与虚拟化技术:OpenEuler 部署 Docker UI

目录 一、实验 1.环境 2.OpenEuler 部署 docker-compose-ui 2.OpenEuler 部署 docker ui 3.使用cpolar内网穿透 二、问题 1.docker run -w 的作用 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168…

PMBOK第八版、项目管理AI标准...PMI标准今年有这些进展

项目管理实践标准不断在演变&#xff0c;PMI作为项目管理领域的权威机构&#xff0c;一直致力于与全球各行各业的项目实践者一同探索和研究最新的行业标准&#xff0c;确保PMI标准符合全球项目专业人士当前能力建设与职业发展的需要。 今年以来&#xff0c;我们发布了一系列PM…

Python提取本体文件的数据

运行结果&#xff1a; 使用replace函数去除前缀。 查找OWL的对象属性&#xff1a; 输出结果&#xff1a; 出现最后这个的原因&#xff1a; 修改程序&#xff1a; 最后的输出结果&#xff1a; 这个解析之后是这个样子的&#xff1a;

考研数学|《1800》《1000》《880》《660》最佳搭配使用方法

直接说结论&#xff1a;基础不好先做1800、强化之前660&#xff0c;强化可选880/1000题。 首先&#xff0c;传统习题册存在的一个问题是题量较大&#xff0c;但难度波动较大。《汤家凤1800》和《张宇1000》题量庞大&#xff0c;但有些题目难度不够平衡&#xff0c;有些过于简单…

代码随想录训练营第59天 | LeetCode 503.下一个更大元素II、LeetCode 42. 接雨水

目录 LeetCode 503.下一个更大元素II 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;单调栈&#xff0c;成环了可怎么办&#xff1f;LeetCode&#xff1a;503.下一个更大元素II_哔哩哔哩_bilibili 思路 ​​​​​​LeetCode 42. 接雨水 文章…

Compute Express Link (CXL): An Open Interconnect for Cloud Infrastructure——论文阅读

DAC 2023 Paper CXL论文阅读笔记整理 背景 Compute Express Link是一种开放的行业标准互连&#xff0c;在PCI Express&#xff08;PCIe&#xff09;之上提供缓存和内存语义&#xff0c;具有资源池和织物功能。本文探讨了CXL在解决云基础设施中的一些挑战方面的作用。 CXL主要…

数据化运营09 抓住问题关键:用相关性分析拆解多个影响因素

前一讲&#xff0c;和你探讨了多维分析的方法&#xff0c;通过多维分析来寻找指标变化的原因。当我们找到问题的原因时&#xff0c;自然会进一步思考一个问题&#xff1a;指标变化的原因这么多&#xff0c;决定问题的关键因素又是哪个呢&#xff1f; 需要专栏原数据进行实操的同…

Linux小程序——进度条

前言&#xff1a;哈喽小伙伴们&#xff0c;经过我们对多个Linux基本开发工具的学习之后&#xff0c;对于Linux的使用也算是更上一层楼。 所以这篇文章&#xff0c;我们就尝试使用我们学过的Linux知识来写一个小程序——进度条&#xff0c;达到实践以及加深知识映像的效果。 目…

智能文档处理技术综述

一、 智能文档处理介绍 智能文档处理&#xff08;Intelligent Document Processing, IDP&#xff09;是利用人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;、计算机视觉&#xff08;CV&#xff09;、自然语言处理&#xff08;NLP&#xff09;等技术…