【SCSS篇】Vite+Vue3项目全局引入scss文件

news2024/12/22 14:43:21

文章目录

    • 前言
    • 一、安装与使用
      • 1.1 安装
      • 1.2 scss 全局文件编写
        • 1.2.1 概述
      • 1.3 全局引入和配置
      • 1.4 组件内使用
    • vue2 项目引入 sass
    • 附:忽略ts类型检测

前言

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

数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址

一、安装与使用

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. 下载安装一系列依赖
    首先,webpack 需要下载一大堆的东西:node-sass、sass-loader、style-loader、sass-resources-loader

    npm 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. 配置 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. 定义 scss 样式文件
    src/styles/global.scss 文件定义变量代码

    // 定义样式变量
    $html-root-font-size:14px
    $theme-color:gray
    
  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

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

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

相关文章

信钰证券:9月以来A股20家银行 获机构不同批次调研

Wind数据显现&#xff0c;自9月份以来&#xff0c;已经有20家银行获安排不同批次调研。其间常熟银行、瑞丰银行被调研次数较多&#xff0c;别离为20次、11次&#xff1b;宁波银行、渝农商行获安排调研家数居前&#xff0c;别离为206家、128家。从上市银行宣布的调研情况来看&am…

知识图谱03——安装pytorch与torch-geometric

参考自https://blog.csdn.net/Andrew_zjc/article/details/117914736 下载pytorch 查阅自己电脑cuda版本 打开命令行&#xff0c;输入 nvidia-smi可以看到我电脑cuda版本12.0&#xff0c;pytorch版本向下兼容 登陆torch官网下载&#xff0c;https://pytorch.org/ 没有12.0,…

【保姆级】网络安全工程师学习成长路线,就业前景,薪资待遇分享

前言 最近总能在网上看到很多诸如&#xff1a;“怎样成为网络信息安全工程师”等相关问题&#xff0c;这可能与近几年网络安全事件频发&#xff0c;国家对于互联网信息安全和互联网舆情的重视程度不断提升有关&#xff0c;似乎网络信息安全工程师随之成为炙手可热的职业。 待…

智能照片修复软件Topaz Video AI mac中文新增功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频&#xff0c;包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单&#xf…

视频美颜SDK,提升企业视频通话质量与形象

在今天的数字时代&#xff0c;视频通话已经成为企业与客户、员工之间不可或缺的沟通方式。然而&#xff0c;由于网络环境、设备性能等因素的影响&#xff0c;视频通话中的画面质量往往难以达到预期效果。为了提升视频通话的质量与形象&#xff0c;美摄美颜SDK应运而生&#xff…

顶顶通ASR安装配置说明

联系顶顶通申请Asrproxy授权&#xff0c;勾选asrproxy和asrserver模块。 下载语音识别模型 链接&#xff1a;https://pan.baidu.com/s/1IuDkDeytZOqf7tAbIb6h1Q 提取码&#xff1a;6vg6 安装asrproxy到/ddt/asrproxy,模型解压到 /ddt/asrproxy/model 对接mod_vad asrproxy.…

如何一站式解决跨境电商难题?

跨境电商经营面临着众多挑战&#xff0c;如海外IP访问限制、账号封禁风险等。然而&#xff0c;借助指纹浏览器的一站式解决方案&#xff0c;跨境电商可以轻松应对这些难题&#xff0c;实现顺畅的全球业务拓展。 一、跨境电商面临的挑战&#xff1a; 跨境电商经营面临以下挑战…

安道亮相深圳国际全触与显示展,展示最新商显研发成果!

10月11日&#xff0c;2023深圳国际全触与显示展在深圳举行&#xff0c;安道及晟沃携最新智能交互一体机、会议配件等最新商显产品亮相&#xff0c;现场真实智能会议场景&#xff0c;全面展现安道在智慧终端方面的卓越研发实力和创新应用能力&#xff0c;吸引了众多观众前来展台…

【AGC】云托管状态一直是“上线中”的问题

【关键字】 AGC、云托管、网址域名 【问题描述】 有开发者反馈开通了云托管服务&#xff0c;然后进行了相关域名设定&#xff0c;等待激活&#xff0c;无法活动&#xff0c;状态一直是‘上线中’。 ​ ​ 开通托管已经一天了一直卡着&#xff0c;状态一直是“上线中”。并且…

Kafka保证消息幂等以及解决方案

1、幂等的基本概念 幂等简单点讲&#xff0c;就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会产生任何副作用。幂等分很多种&#xff0c;比如接口的幂等、消息的幂等&#xff0c;它是分布式系统设计时必须要考虑的一个方面。 查询操作(天然幂等…

如何使用数字化系统赋能企业营销?数字化系统对于企业的作用?

数字化系统对于企业的营销活动能够提供多方面的帮助。 1. 数字化系统可以帮助企业更精准地了解客户的需求和行为&#xff0c;从而更好地定位产品和服务。如蚓链数字化营销系统可以通过数据分析和挖掘&#xff0c;帮助企业深入了解客户群体的特点和喜好&#xff0c;进而调整企业…

zabbix监控项

一、监控项&#xff08;items&#xff09; 1、获取监控数据的方式&#xff1a; ① zabbix-agent&#xff1a;代理程序是在被监控主机上运行的软件&#xff0c;负责收集和报告有关主机性能和状态的数据&#xff0c;监控系统通过与代理程序通信来获取数据。 ② SNMP&#xff1…

java基础 递归

递归注意事项&#xff1a; 递归算法遍历目录 递归算法删除目录&#xff1a; package wwx;import jdk.swing.interop.SwingInterOpUtils;import java.io.File; import java.io.IOException;public class Test {public static void main(String[] args) {File f new File(&quo…

【HarmonyOS】低代码平台组件拖拽使用技巧之滚动容器

【关键字】 HarmonyOS、低代码平台、组件拖拽、滚动容器 1、写在前面 上一篇中我们介绍了低代码平台组件库中的堆叠容器的一些拖拽技巧&#xff0c;本篇我们继续&#xff0c;今天带大家一些来看一个新的组件——滚动容器。关于滚动容器的直接使用其实很简单&#xff0c;所以这…

2023年医药商业行业发展研究报告

第一章 行业概况 1.1 定义 医药商业行业&#xff0c;作为医药领域的重要组成部分&#xff0c;扮演着至关重要的角色。这一行业专注于医药商品的经营与流通&#xff0c;确保药品能够有效、安全地到达消费者手中。随着医药科技的进步和市场需求的增长&#xff0c;医药商业行业在…

uni-app编程checkbox-group获取选中的每个checkbox的value值

uni-app编程checkbox-group获取选中的每个checkbox的value值_uniappcheckboxvalue-CSDN博客

前端-Vue-element-开发指南

电商管理系统框架 Vue-element 电商管理系统 电商管理系统框架1 介绍了解 项目实战的学习目标2 电商项目基本业务概述3 后台管理系统功能划分4 项目开发模式技术选型5 项目初始化可视化面板 配置 6 配置码云SSH7 托管云8 安装mysql9 API服务器Postman调试10 分析登陆和token原理…

信钰证券:买基金有哪些平台?

跟着人们理财意识的前进&#xff0c;出资基金成为了一种受欢迎的方法。但是关于一般出资者来说&#xff0c;在许多的基金公司平缓台中选择一个可靠的、确保出资安全的途径来购买基金却是一件扎手的作业。本文将从多个角度剖析不同的购买途径&#xff0c;以协助出资者作出更正确…

手写 分页

子组件&#xff1a;TimePage.vue 效果图 <template><div class"click-scroll-X"><!-- 上 --><!-- eslint-disable-next-line --><span class"left_btn" :disabled"pageNo 1" click"leftSlide"><&…

记录一次线上fullgc问题排查过程

某天&#xff0c;接到测试部门反馈说线上项目突然很快&#xff0c;由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务&#xff0c;先关闭次任务后观察是否卡顿&#xff0c;并检查堆内存是否使用完造成频繁gc 1.通过jmap命令查看堆内存中的对象 2.生成当…