# 样式
# 目录结构
Vue 前端项目的所有全局样式都在 src/styles 下设置。
├── styles
│ ├── btn.scss # 按钮样式
│ ├── element-ui.scss # 全局自定义 element-ui 样式
│ ├── index.scss # 全局通用样式
│ ├── mixin.scss # 全局 mixin
│ ├── sidebar.scss # sidebar css
│ ├── transition.scss # vue transition 动画
│ └── variables.scss # 全局变量
全局样式都写在 src/styles 目录下,每个页面对应的样式都写在自己的 .vue 文件中。
<style>
/* global styles */
</style>
<style scoped>
/* local styles */
</style>
# 自定义 element-ui 样式
由于 element-ui 的样式是在全局引入的,所以若想在某个页面里覆盖它的样式就不能加 scoped,我们可以在它的父级加一个 class,用命名空间实现。
.article-page {
/* 命名空间 */
.el-tag {
/* element-ui 元素 */
margin-right: 0px;
}
}
# 深度选择器
当子组件使用了 scoped,而父组件又要修改子组件的样式时,可以通过 >>> 来实现。
<style scoped>
.a >>> .b { /* ... */ }
</style>
会编译成
.a[data-v-f3f3eg9] .b {
/* ... */
}
如果我们使用预处理 sass,可以通过 /deep/ 代替 >>> 实现想要的效果。
覆盖某个特定页面 element 的 button 的样式示例。
# PostCSS
新版 vue-cli webpack 模板 init 之后根目录下默认有一个 postcss.config.js。vue-loader 的 postcss 默认读取这个文件里的配置项,所以在这里直接改配置文件就可以了。配置和 postcss 是一样的。
// postcss.config.js
module.exports = {
plugins: {
autoprefixer: {}
}
}
// package.json
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
上面代码所述,autoprefixer 读取 package.json 里 browserslist 的配置参数
1%:兼容全球使用率大于1%的浏览器last 2 versions:兼容每个浏览器的最近两个版本
not ie <= 8:不兼容 ie8 及以下
# Mixin
Vue 前端项目没有设置自动注入 sass 的 mixin 到全局,所以需要在使用的地方手动引入 mixin
<style rel="stylesheet/scss" >
@import "src/styles/mixin.scss";
</style>
若需自动将 mixin 注入到全局 ,可以使用 sass-resources-loader。
← 标签栏导航