Vue2.7 + Vite+ Eslint、Stylelint、Commitlint 统一开发规范 + husky + lint-staged (git commit 时自动格式化代码) + Vue 全家桶集成 + Axios 封装及接口管理 https://juejin.cn/post/7118700020911570974
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.9 KiB

2 years ago
# Css 样式处理
## 统一浏览器默认样式
在 Web 开发时,因为浏览器内核的不同,所以会导致某些 Html 元素默认的渲染样式有所差别,虽然很细微,但是会影响我们在不同浏览器中的显示效果。
为了解决这个问题,聪明的开发者就将某个元素在各个浏览器中表现不同的样式,通过一段 CSS 进行重置,然后再进行开发,这样就可以保证每个浏览器显示效果的统一性。
目前常用的有两种解决方案:
1. Normalize - [normalize.css](https://necolas.github.io/normalize.css/) 偏向于修复浏览器的默认 BUG 和一致性,但是保留元素的默认样式。
2. Reset - [reset.css](https://meyerweb.com/eric/tools/css/reset/) 偏向于完全重置浏览器默认样式,可控性更高。
在本项目中,我们结合两种方案进行使用,代码在 `styles/normalize.css``styles/reset.css` 中。
## Less 预处理器
在 Vite 中使用 Less,我们只需要运行以下命令即可:
```bash
pnpm add less -D
```
> 如果需要使用 sass 则把 less 换成 sass 就行。
安装完成之后,无需多余配置,vite 即可对 less 样式进行解析。
在 Vue 文件中,我们如下,即可使用 less 进行样式的编写:
```vue
<style lang="less" scoped>
// less 样式代码
.card {
&-body {}
&-header {}
}
</style>
```
> 这里 CSS 命名规范推荐 BEM 命名规范,具体可以自行搜索了解。
### Less 全局变量/方法
一般在项目中会有自己的设计规范,比如像 Element、Antd,它就有一套自己的样式规范。
其中像颜色、边框、边距等都有统一的规范,当我们改一处,所有地方都会改变,这就用到了 less 的变量和 mixin。
然而我们每处都 `@import` 就比较麻烦,这个时候我们可以使用在 vite 中进行 less 的全局样式配置。
```js
import { defineConfig } from 'vite'
import { resolve } from 'path'
function pathResolve(dir) {
return resolve(process.cwd(), '.', dir)
}
// 全局变量
const variablesLessPath = pathResolve('./src/styles/global/variables.less')
// 全局方法
const utilsLessPath = pathResolve('./src/styles/global/utils.less')
export default defineConfig({
css: {
preprocessorOptions: {
less: {
modifyVars: {
hask: `
true;
@import (reference) "${variablesLessPath}";
@import (reference) "${utilsLessPath}";
`
},
javascriptEnabled: true
}
}
}
})
```
## Vue 样式穿透
[官方文档](https://vuejs.org/api/sfc-css-features.html#scoped-css)
在 Vue2.7 中,改变了以往样式穿透的语法,如果继续使用 `::v-deep`、`/deep/`、`>>>` 等语法的话,会出现一个警告,下面是新的语法:
```css
/* 深度选择器 */
:deep(selector) {
/* ... */
}
/* 插槽选择器 */
:slotted(selector) {
/* ... */
}
/* 全局选择器 */
:global(selector) {
/* ... */
}
```