Vite+Vue3项目全局引入scss文件

news2024/11/23 16:56:50

前言

Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言!在日常项目开发过程中使用非常广泛,今天主要讲一下 Vite+Vue3 项目中该如何全局引入 scss 文件,引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比。

一、安装与使用

1.1 安装

vite 已经将 sass 预处理器的 loader 内置了,我们不用再像 webpack 项目中那样,需要下载和配置一堆相关的loader,我们只需要下载 sass 依赖,就能直接在项目中使用了:

# npm 方式
npm install -D sass

# yarn 方式
yarn add -D sass

# pnpm 方式
pnpm install sass

1.2 scss 全局文件编写

1.2.1 概述

如下图,src 目录下新建 styles 目录,并在目录中创建三个 scss 文件:

 

 

  • • reset.scss 全局元素样式重置文件 主要用于清除 HTML 元素默认样式用,随便去一个大厂页面下 copy 一下就行/**
     *,
     *:after,
     *:before {
         box-sizing: border-box;
     
         outline: none;
     }
     
     html,
     body,
     div,
     span,
     applet,
     object,
     iframe,
     h1,
     h2,
     h3,
     h4,
     h5,
     h6,
     p,
     blockquote,
     pre,
     a,
     abbr,
     acronym,
     address,
     big,
     cite,
     code,
     del,
     dfn,
     em,
     img,
     ins,
     kbd,
     q,
     s,
     samp,
     small,
     strike,
     strong,
     sub,
     sup,
     tt,
     var,
     b,
     u,
     i,
     center,
     dl,
     dt,
     dd,
     ol,
     ul,
     li,
     fieldset,
     form,
     label,
     legend,
     table,
     caption,
     tbody,
     tfoot,
     thead,
     tr,
     th,
     td,
     article,
     aside,
     canvas,
     details,
     embed,
     figure,
     figcaption,
     footer,
     header,
     hgroup,
     menu,
     nav,
     output,
     ruby,
     section,
     summary,
     time,
     mark,
     audio,
     video {
         font: inherit;
         font-size: 100%;
     
         margin: 0;
         padding: 0;
     
         vertical-align: baseline;
     
         border: 0;
     }
     
     article,
     aside,
     details,
     figcaption,
     figure,
     footer,
     header,
     hgroup,
     menu,
     nav,
     section {
         display: block;
     }
     
     body {
         line-height: 1;
     }
     
     ol,
     ul {
         list-style: none;
     }
     
     blockquote,
     q {
         quotes: none;
         &:before,
         &:after {
             content: '';
             content: none;
         }
     }
     
     sub,
     sup {
         font-size: 75%;
         line-height: 0;
     
         position: relative;
     
         vertical-align: baseline;
     }
     sup {
         top: -.5em;
     }
     sub {
         bottom: -.25em;
     }
     
     table {
         border-spacing: 0;
         border-collapse: collapse;
     }
     
     input,
     textarea,
     button {
         font-family: inhert;
         font-size: inherit;
     
         color: inherit;
     }
     
     select {
         text-indent: .01px;
         text-overflow: '';
     
         border: 0;
         border-radius: 0;
     
         -webkit-appearance: none;
            -moz-appearance: none;
     }
     select::-ms-expand {
         display: none;
     }
     
     code,
     pre {
         font-family: monospace, monospace;
         font-size: 1em;
     }

  • • global.scss 全局样式文件 引入 reset.scss 文件,并根据项目情况添加一些全局可使用的原子类@import url("./reset.scss");

    // 边距
    .m-b-30 {
        margin-bottom: 30px;
    }

    .m-l-5 {
        margin-left: 5px;
    }

    // 字体
    .font600 {
        font-weight: 600;
    }

  • • mixin.scss 全局的混合 mixin 样式文件 组件中经常会服用的多个属性整合到一起的,类似原子类// 定宽居中
    @mixin mo {
        width: 1280px;
        margin: 0 auto;
    }

    // 弹性盒弹性项上下居中
    @mixin flex {
        display: flex;
        align-items: center;
    }

    // 等级和地区样式
    @mixin level-and-area {
        display: flex;
        flex-wrap: wrap;
        margin: 10px 0;
        color: gray;
      
        dd {
          margin-right: 20px;
          margin-bottom: 16px;
          cursor: pointer;
      
          &:hover,
          &.active {
            color: #4993f2;
          }
        }
    }


    // 单行文本溢出显示 ...
    @mixin ellipsis {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }

1.3 全局引入和配置

虽然上面三个都是 scss 文件,但是由于 mixin.scss 中定义的是混合文件,在 Vite 项目中引入时,区别于另外两个 scss 文件

  • • 普通的 scss 样式文件全局引入 在 main.ts 文件中直接使用 import 引入即可

import { createApp } from 'vue'
import App from '@/App.vue'

// 引入全局样式文件
import '@/styles/global.scss

const app = createApp(App)
app.mount('#app')

这里,reset.scss 文件已在 global.scss 中引入。

  • • mixin.scss 文件引入 如果 mixin.scss 文件,像上面那样在 main.ts 中引入,则会引入失败,程序报错

 

 

  • 也就是混合不能在 main.ts 中直接引入,这里需要在 vite.config.ts 中进行配置如下:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src')
    }
  },
  
  css: {
    preprocessorOptions: {
    // 这里配置 mixin.scss 混合文件的全局引入
      scss: {
        additionalData: `@import "@/styles/mixin.scss";`
      }
    }
  }
})

1.4 组件内使用

通过上面的配置,就可以在当前项目任一组件中使用声明的原子类和混合mixin了!

<script setup lang='ts'>
import { ref } from "vue";

const levels = ref([
  { level: "全部" },
  { level: "三级甲等" },
  { level: "三级乙等" },
  { level: "二级甲等" },
  { level: "二级乙等" },
  { level: "一级" }
]);

const cutIdx = ref(0);
</script>
<template>
  <dl class="level">
    <dt class="m-b-30">等级:</dt>
    <dd
      v-for="(item,index) in levels"
      :key="index"
      :class="index === cutIdx ? 'active' : ''"
    >{{ item.level }}</dd>
  </dl>
</template>
<style scoped lang='scss'>
.level {
  @include level-and-area;
}
</style>

vue2 项目引入 sass

  1. 1. 下载安装一系列依赖 首先,webpack 需要下载一大堆的东西:node-sass、sass-loader、style-loader、sass-resources-loadernpm install node-sass --save-dev
    npm install sass-loader --save-dev
    npm install style-loader --save-dev  
    npm install sass-resources-loader --save-dev

  2. 2. 配置 vue.config.js 在 vue.config.js 中配置sass-resources-loader入口文件const {
      defineConfig
    } = require('@vue/cli-service');
     
    module.exports = defineConfig({
      transpileDependencies: true,
      devServer: {
        proxy: { //代理配置
          //...
      },
      chainWebpack: config => {
        // sass-resources-loader 公共样式文件配置,可全局使用变量
        const oneOfsMap = config.module.rule('scss').oneOfs.store
        oneOfsMap.forEach(item => {
          item
            .use('sass-resources-loader')
            .loader('sass-resources-loader')
            .options({
              // 写入定义基础样式的scss文件路径
              resources: [
                './src/assets/styles/common.scss'
              ]
            })
            .end()
        })
      },
    });

  3. 3. 定义 scss 样式文件 src/styles/global.scss 文件定义变量代码// 定义样式变量
    $html-root-font-size:14px
    $theme-color:gray

  4. 4. 组件内使用//组件内使用
    <style lang="scss" scoped>
        //样式变量使用
        .more {
          color: $theme-color;
          font-size:$html-root-font-size;
        }
    </style>

附:忽略ts类型检测

  • • 单行忽略 @ts-ignore async mounted(){
        let num:number = 10;
        //@ts-ignore 
        let {arr,map}= await conf.fun();  
    }

  • • 当前script内代码不需要ts校验 @ts-nocheck<script lang="ts">
        // @ts-nocheck
        import {
            Vue,
            Watch,
            Options
        } from "vue-property-decorator";
    </script>

  • • 取消忽略全文 // @ts-check

收录于合集 #Vue

 16个

上一篇前端重新部署如何通知用户刷新网页?

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

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

相关文章

力扣:143. 重排链表(Python3)

题目&#xff1a; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进…

8通道模数转换AD7091驱动代码SPI接口ADC,verilog

名称&#xff1a;8通道模数转换AD7091驱动代码 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog代码设计AD7091R-8驱动代码 控制接口为SPI接口&#xff0c;实现8通道模数转换&#xff0c;输出8通道数字信号。 FPGA代码Verilog/VHDL代码…

JS问题:如何实现文本一键复制和长按复制功能?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约2000字&#xff0c;整篇阅读大约需要4分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

学习视觉CV Transformer (2)--Transformer原理及代码分析

下面结合代码和原理进行深入分析Transformer原理。 2 Transformer深入分析 对于CV初学者来说&#xff0c;其实只需要理解Q K V 的含义和注意力机制的三个计算步骤&#xff1a; Q 和所有 K 计算相似性&#xff1b;对相似性采用 Softmax 转化为概率分布&#xff1b;将概率分布…

DCL 单例模式设计为什么需要 volatile 修饰实例对象

DCL 问题&#xff0c;是在基于双重检查锁设计下的单例模式中&#xff0c;存在不 完整对象的问题。而这个不完整对象的本质&#xff0c;是因为指令重排序导致的。 public class DCLExample {private static DCLExample instance;public static DCLExample getInstance(){if (ins…

2021年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 执行下列代码后&#xff0c;运行结果是&#xff1f; seq[hello,good,morning] s*.join(seq) print(s)A: hello*good*m…

解决cloudflare pages部署静态页面发生404错误的问题

cloudflare pages是一个非常方便的部署静态页面的sass工具。 但是很多人部署上去以后&#xff0c;访问服务会报404错误。什么原因&#xff1f; 原因如下图所示&#xff1a; 注意这个Build output directory, 这个是部署的关键&#xff01; 这个Build output directory目录的…

“节省内存、提升性能:享元模式的神奇之处“

概念 享元模式的本质是缓存共享对象&#xff0c;降低内存消耗。 是对象池的的一种实现&#xff0c;一句话用到了缓存了对方和池化技术的地方绝大多是享元模式的体现。 例如线程池&#xff0c;数据库连接池&#xff0c;字符串常量池 应用示例 String中的享元模式 public c…

lesson2(补充)关于const成员函数

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言&#xff1a; 将const 修饰的 “ 成员函数 ” 称之为 const 成员函数 &#xff0c; const 修饰类成员函数&#xff0c;实际修饰该成员函数 隐含的 this 指针 &#xff0c;表明在该成员函数中不能对类的任何成员进行修改…

【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; Serializable接口为什么…

【Python】用Python生成图像特效

1. 引用 本文重点介绍如何使用python进行图像处理&#xff0c;生成各式各样的图像特效。闲话少说&#xff0c;我们直接开始吧&#xff01; 2. 读入图像 首先我们来读取我们的样例图像&#xff0c;并尝试打印图像中相应元素的像素值。为了实现这一点&#xff0c;我们使用Pyth…

泛积木-低代码 使用攻略

文档首发于 泛积木-低代码 使用攻略 我们以大纲的方式&#xff08;总体把握&#xff09;讲述如何高效、便捷使用 泛积木-低代码。 权限 首先说下权限&#xff0c;在 系统设置 / 权限设置 菜单内&#xff0c;我们可以新增调整项目内的权限&#xff0c;默认拥有管理员和成员两…

【TI毫米波雷达】LP87702/LP87524电源PMIC芯片的BUCK供电配置

【TI毫米波雷达】LP87702/LP87524电源PMIC芯片的BUCK供电配置 文章目录 上电时序LP87702/LP87524电源芯片配置流程LP87702/LP87524开始运行LP87702/LP87524 首次启动&#xff1a;LP87702/LP87524 非首次启动&#xff1a; LP87702初始化LP87524初始化代码例程 附录&#xff1a;…

【jenkins】centos7在线安装jenkins

一、系统要求 最低推荐配置 256MB可用内存 1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB) 软件配置 Java 8—​无论是Java运行时环境&#xff08;JRE&#xff09;还是Java开发工具包&#xff08;JDK&#xff09;都可以 二、安装jenkins 准备一台安装有ce…

听GPT 讲Rust源代码--library/std(8)

题图来自Why is Rust programming language so popular?[1] File: rust/library/std/src/sys/sgx/abi/reloc.rs 在Rust源代码中&#xff0c;sgx/abi/reloc.rs文件的作用是定义了针对Intel Software Guard Extensions (SGX)的重定位相关结构和函数。 该文件中的Rela 结构定义了…

AJAX原理及介绍

文章目录 AJAX&#xff08;Asynchronous Javascript And Xml&#xff09;传统请求及缺点AJAX概述XMLHttpRequest对象AJAX GET请求AJAX GET请求的缓存问题AJAX POST请求基于JSON的数据交换基于XML的数据交换AJAX乱码问题AJAX的异步与同步AJAX代码封装AJAX实现省市联动AJAX跨域问…

水性杨花:揭秘CSS响应式界面设计,让内容灵活自如,犹如水之变幻

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、是…

Spring Boot进阶(94):从入门到精通:Spring Boot和Prometheus监控系统的完美结合

&#x1f4e3;前言 随着云原生技术的发展&#xff0c;监控和度量也成为了不可或缺的一部分。Prometheus 是一款最近比较流行的开源时间序列数据库&#xff0c;同时也是一种监控方案。它具有极其灵活的查询语言、自身的数据采集和存储机制以及易于集成的特点。而 Spring Boot 是…

22款奔驰GLS450升级香氛负离子 清除异味

香氛负离子系统是由香氛系统和负离子发生器组成的一套配置&#xff0c;也可以单独加装香氛系统或者是负离子发生器&#xff0c;香氛的主要作用就是通过香氛外壳吸收原厂的香水再通过空调管输送到内饰中&#xff0c;而负离子的作用就是安装在空气管中通过释放电离子来打击空气中…

leetCode 2578. 最小和分割 + 排序 + 贪心 + 奇偶分组(构造最优解)

2578. 最小和分割 - 力扣&#xff08;LeetCode&#xff09; 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来&#xff0c;得到 num 各数位的一个排列。 换句话说&#xff0c;num1 和 num2 中所…