首先安装
pnpm add sass -D
pnpm add sass-loader -D
样式方面我们首先是会想到要给项目进行默认样式的重置,此时我们应当去使用一个比较稳定的npm 包的样式重置代
码:
找到对应的源码复制一份:
/** * Modern CSS Reset Tweaks * ================================================== */ html { -webkit-text-size-adjust: 100%; &:focus-within { scroll-behavior: smooth; } } body { text-size-adjust: 100%; position: relative; width: 100%; min-height: 100vh; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; text-rendering: optimizeSpeed; } /* Box sizing normalization */ *, ::after, ::before { box-sizing: border-box; } /* Elements that don't have a class get default styles */ a:not([class]) { text-decoration-skip-ink: auto; } /** * CSS Reset Tweaks * * http://meyerweb.com/eric/tools/css/reset/ * v2.0-modified | 20110126 * License: none (public domain) */ 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-size: 100%; font: inherit; margin: 0; padding: 0; border: 0; vertical-align: baseline; } /* make sure to set some focus styles for accessibility */ :focus { outline: 0; } /* HTML5 display-role reset for older browsers */ main, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } ol, ul { list-style: none; } blockquote, q { quotes: none; &:before, &:after { content: ''; content: none; } } /** * Input Reset */ input:required, input { box-shadow: none; } input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus, input:-webkit-autofill:active { -webkit-box-shadow: 0 0 0 30px white inset; } input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration, input[type=search]::-webkit-search-results-button, input[type=search]::-webkit-search-results-decoration { -webkit-appearance: none; -moz-appearance: none; } input[type=search] { -webkit-appearance: none; -moz-appearance: none; -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; } textarea { overflow: auto; vertical-align: top; resize: vertical; } input { &:focus { outline: none; } } /** * Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. */ audio, canvas, video { display: inline-block; max-width: 100%; } /** * Prevent modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; height: 0; } /** * Address styling not present in IE 7/8/9, Firefox 3, and Safari 4. */ [hidden] { display: none; } /** * Improve readability when focused and also mouse hovered in all browsers. */ a:active, a:hover { outline: none; } /* Make images easier to work with */ img { max-width: 100%; display: inline-block; vertical-align: middle; height: auto; } /* Make pictures easier to work with */ picture { display: inline-block; } /** * Address Firefox 3+ setting `line-height` on `input` using `!important` in * the UA stylesheet. */ button, input { line-height: normal; } /** * Address inconsistent `text-transform` inheritance for `button` and `select`. * All other form control elements do not inherit `text-transform` values. * Correct `button` style inheritance in Chrome, Safari 5+, and IE 6+. * Correct `select` style inheritance in Firefox 4+ and Opera. */ button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; border: 0; background: transparent; } /** * Re-set default cursor for disabled elements. */ button[disabled], html input[disabled] { cursor: default; } [disabled] { pointer-events: none; } /** * 1. Address box sizing set to content-box in IE 8/9. */ input[type="checkbox"], input[type="radio"] { padding: 0; } /** * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome * (include `-moz` to future-proof). */ input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; } /** * Remove inner padding and search cancel button in Safari 5 and Chrome * on OS X. */ input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * Remove inner padding and border in Firefox 3+. */ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } button { border: 0; background: transparent; } textarea { overflow: auto; vertical-align: top; resize: vertical; } /** * Remove most spacing between table cells. */ table { border-collapse: collapse; border-spacing: 0; text-indent: 0; } /** * Based on normalize.css v8.0.1 * github.com/necolas/normalize.css */ hr { box-sizing: content-box; overflow: visible; background: #000; border: 0; height: 1px; line-height: 0; margin: 0; padding: 0; page-break-after: always; width: 100%; } /** * 1. Correct the inheritance and scaling of font size in all browsers. */ pre { font-family: monospace, monospace; font-size: 100%; } /** * Remove the gray background on active links in IE 10. */ a { background-color: transparent; } /** * 1. Remove the bottom border in Chrome 57- * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { border-bottom: none; text-decoration: none; } code, kbd, pre, samp { font-family: monospace, monospace; } /** * Add the correct font size in all browsers. */ small { font-size: 75%; } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -5px; } sup { top: -5px; } /** * 1. Change the font styles in all browsers. * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; line-height: 1; margin: 0; padding: 0; } /** * Show the overflow in IE. * 1. Show the overflow in Edge. */ button, input { /* 1 */ overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * Correct the inability to style clickable types in iOS and Safari. */ button, [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; } /** * Remove the inner border and padding in Firefox. */ button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; outline: 0; } legend { color: inherit; white-space: normal; display: block; border: 0; max-width: 100%; width: 100%; } fieldset { min-width: 0; } body:not(:-moz-handler-blocked) fieldset { display: block; } /** * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { vertical-align: baseline; } /** * Correct the cursor style of increment and decrement buttons in Chrome. */ [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** * Remove the inner padding in Chrome and Safari on macOS. */ [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive ========================================================================== */ /* * Add the correct display in all browsers. */ summary { display: list-item; } /* * Misc * ========================================================================== */ template { display: none; }
接着我们便是进行全局变量的配置,我们先试试直接在index.scss 文件中进行变量的定义,看看能不能在 vue 应用中进行使用:
@import './reset/index'; // 全局变量的配置 $color: red;
这里就直接报错了
可是我们在 main.ts 中进行导入了呀,为毛就不行呢?通过查看文档:原来是需要这样来配置,如下就是集成 scss 全局变量的方法
先定义这么一个文件
vite.config.ts
impimport { defineConfig } from 'vite' import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // 引入 svg 图标所需要的插件 import vue from '@vitejs/plugin-vue' import path from 'path' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(), createSvgIconsPlugin({ iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')], // 图标的存放目录 symbolId: 'icon-[dir]-[name]' }) ], resolve: { alias: { "@": path.resolve("./src") // 相对路径别名配置,使用 @ 代替 src } }, // scss 全局变量的一个配置 css: { preprocessorOptions: { scss: { javascriptEnabled: true, additionalData: '@import "./src/styles/variable/index.scss";' } } } })
重新启动项目,现在就可以使用了:比如项目的主题色 宽高 层级… 都可以在这里定义了
当然还有很多的 scss 文件可以编写,一些混入 一些逻辑判断 一些封装都可以到这里进行集成