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

news2024/11/17 17:51:35

目录

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 大功告成啦 ~ 下课!

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

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

相关文章

输入与输出

输入(Scanner类) Scanner是java5的新特性&#xff0c;在java.util包里&#xff0c;可以完成用户输入。步骤&#xff1a; 导入java.util包&#xff1b;构造Scanner对象&#xff0c;参数为u标准输入流System.in&#xff1b;使用next()方法系列接收数据 nextBoolean()接收一个布…

P6学习:解析P6 WBS-工作分解结构的原则

前言 WBS&#xff0c;及Work Breakdown Structure&#xff0c;中文工作分解结构&#xff0c;是总结工作阶段的项目的层次结构分解。 WBS 就像项目的大纲——它将项目分解为特定的可交付成果或阶段。 然后将活动添加到这些层中以创建项目计划的时间表。 WBS 使用流程会有所不…

【SpringBoot整合系列】SpringBoot3.x整合Swagger

目录 产生背景官方解释&#xff1a;作用SpringBoot3整合Swagger注意事项swagger3 常用注解SpringBoot3.x整合Swagger1.创建工程(jdk:17,boot:3.2.4)2.引入pom依赖3.application.yml添加配置4.添加swagger3.0配置5.控制器层(Controller)6.模型层(Model)7.启动并测试【Get请求接口…

任务管理工具Trello体验如何?一文揭秘

Trello是一款高效的协作与工作管理应用&#xff0c;这里我们将详细介绍Trello的功能、特点、优劣势、价格、定价、发展历程、使用场景以及使用技巧等等。 一、Trello 是什么 Trello是一款高效的协作与工作管理应用&#xff0c;设计用于跟踪团队项目、凸显当前活动任务、指派责…

IHO S-100系列产品标准

1 什么是S-100? S-100《通用海道测量数据模型》是国际海道测量组织(IHO)推出的新一代海上空间地理信息国际标准,旨在克服传统S-57数字海道测量数据传输标准的局限。这一标准不仅兼容了更为丰富的数据类型,如影像与栅格数据、时变数据等,还摒弃了固定的编码格式要求,采用…

推荐5款测试数据生成工具!

一个成功、有效的测试策略由下面几个基本部分组成&#xff1a;完整的测试覆盖率、最小化的环境影响和健壮的测试数据。 其中测试数据尤其重要&#xff0c;其质量直接关系到测试的有效性。可以把测试数据看作是保持测试引擎运行的燃料——高质量的测试数据有助于确保测试执行的…

苹果App Store上架工具介绍

文章目录 摘要引言正文1. Xcode2. [appuploder](https://www.applicationloader.net/)3. [克魔助手](https://keymob.com/) 4.[ipa guard](https://www.ipaguard.com/)总结参考资料 摘要 苹果App Store作为iOS应用程序的主要分发渠道&#xff0c;上架应用程序需要遵守规定和通…

2024消息预知在线客服系统

新增消息预知&#xff0c;消息撤回&#xff0c;消息已读未读&#xff0c; 修复需要刷新才能收到消息 修复客户来源地址 修复消息提示音 修复桌面推送提醒 要求服务器环境&#xff1a; 宝塔面板 &#xff0c;Nginx1.16-1.18&#xff0c;7.2.23<php<7.3&#xff08;因…

Python神器!WEB自动化测试集成工具 DrissionPage

案例 跟踪商品价格&#xff0c;降价自动推送消息到微信 咱买不起还等不起吗&#xff1f; from DrissionPage import * import re from time import sleep import csv import os import datetime#写入时间 p MixPage() p.get(http://xxxxxxx) #快快买网址 p.to_ifram…

Netty学习——源码篇7 Pipeline的事件传播机制1 备份

上篇&#xff1a;Netty学习——源码篇6 Pipeline设计原理 已经知道AbstractChannelHandlerContext中有Inbound和Outbound两个boolean变量&#xff0c;分别用于识别Context所对应的Handler的类型。 1、Inbound为true时&#xff0c;表示其对应的ChannelHandler是ChannelInboundHa…

【深入日志打印】log.error(“你好{}“, “世界“, e);只有一个占位符是否会打印后面多出的参数呢?(详细跟进源码讲解调试分析)

文章目录 【深入日志打印】log.error(“你好{}“, “世界“, e)&#xff1b;只有一个占位符是否会打印后面多出的参数呢&#xff1f;&#xff08;详细跟进源码讲解调试分析&#xff09;测试代码执行结果调试分析其他样例探讨 【深入日志打印】log.error(“你好{}“, “世界“, …

【电能管理】电力物联网仪表/多功能电表/无线计量/多回路计量/分项计量/终端感知设备/全电量参数测量/正反向有功无功测量

什么是物联网电表&#xff01;&#xff01;&#xff01; 安科瑞薛瑶瑶18701709087 物联网电表是智能电表的一种&#xff0c;可以用无线通信方式来操控&#xff0c;除了拥有电度表的有点以外&#xff0c;还可以把硬件和软件联合起来发挥更大的作用。 物联网电表主要用于计量低…

UOS、Linux下的redis的详细部署流程(适用于内网)

提示&#xff1a;适用于Linux以及UOS等内外网系统服务器部署。 文章目录 一.上传离线包二.部署基本环境三.解压并安装redis四.后台运行redis五.uos系统可能遇到的问题六.总结 一.上传离线包 1.自己去Redis官网下载适配自己部署系统的redis安装包。 2.通过文件传输工具&#xf…

微信平台会员卡应用源码系统 带完整的安装代码包以及搭建教程

在移动互联网时代&#xff0c;消费者对于便捷、个性化的服务需求日益增长。微信会员卡作为一种创新的营销方式&#xff0c;不仅能为消费者提供便捷的会员服务&#xff0c;还能帮助商家更好地管理会员信息&#xff0c;提升营销效果。然而&#xff0c;许多商家由于缺乏技术支持&a…

钡铼技术R40工业4G路由器为户外广告牌智能控制系统提供无线网络

钡铼技术R40工业4G路由器在户外广告牌智能控制系统中的应用&#xff0c;为广告行业带来了革命性的变革。作为一种先进的无线通信设备&#xff0c;R40工业4G路由器通过其稳定的信号传输和强大的网络连接能力&#xff0c;为户外广告牌的智能控制系统提供了可靠的无线网络支持&…

蓝桥杯day14刷题日记

P8707 [蓝桥杯 2020 省 AB1] 走方格 思路&#xff1a;很典型的动态规划问题&#xff0c;对于偶数格特判&#xff0c;其他的正常遍历一遍&#xff0c;现在所处的格子的方案数等于左边的格子的方案数加上上面格子的方案数之和 #include <iostream> using namespace std; …

北京朝阳办理广播电视节目制作经营许可证材料和要求

北京经典世纪集团有限公司-资 质代办 尊敬的客户&#xff0c;您对于办理广播电视节目制作经营许可证的需求我们深感关切。作为专 业的资 质代办机构&#xff0c;我们的目标是为您提供一站式服务&#xff0c;帮助您高效顺利地完成所有办理程序。&#xff08;游览器搜经典世纪胡云…

【竞技宝】国足4比1大胜新加坡,武磊独造三球记首功

国足在本轮世预赛主场跟新加坡狭路相逢,这场比赛对于主帅伊万科维奇来说不容有失。因为,国足之前未能在客场击败新加坡,让球队出线前景变得非常严峻。如果,国足还想从36强赛杀出重围,就必须主场战胜新加坡。如果,国足主场都赢不了新加坡,伊万科维奇将面临下课危机。重压之下的伊…

IPv6-基础概念

IPv6基础概念 IPv6技术特点&#xff1a;精简报文格式、实现自动配置和重新编制、支持层次化网络编制、支持端对端安全、更好的支持Qos、支持移动特性。 五元组&#xff1a;源地址&#xff0c;目的地址&#xff0c;源端口&#xff0c;目的端口&#xff0c;协议。 IPv6报头优势…

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…