Vue-css相关

152 阅读1分钟

1 使用预处理

如果创建项目时没有选择需要的预处理器(Sass/Less/Stylus),则需手动安装相应loader

安装 Sass:npm install -D sass-loader node-sass

安装 Less :npm install -D less-loader less

安装 Stylus:npm install -D stylus-loader stylus

<style lang="scss">
#nav {
  padding: 30px;
  a {
    font-weight: bold;
    color: #2c3e50;
    &.router-link-exact-active {
      color: #42b983;
    }
  }
</style>

2 自动化导入样式

自动化导入样式文件 (用于颜色、变量、mixin等),可以使用 style-resources-loader。

npm i -D style-resources-loader

//  vue.config.js  配置
const path = require('path')
// 自动化导入样式文件 (用于颜色、变量、mixin等),
function addStyleResource(rule) {
    rule.use('style-resource')
    .loader('style-resources-loader')
    .options({
        patterns: [
        path.resolve(__dirname, './src/styles/imports.scss'),
        ],
    })
}
module.exports = {
    // webpackage 配置
    // 自动化导入样式
    chainWebpack: config => {
        const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
        types.forEach(type =>
        addStyleResource(config.module.rule('scss').oneOf(type)))
    },
        
}

// imports.scss
$color:rgb(151, 133, 144);

// 示例
background: $color;

3 Scoped CSS

当标签有scoped属性时,它的CSS只作用于当前组件中的元素。

<style scoped >
 /* 当前样式 */
  .app{
     color:red;
  }
</style>
<style>
/*全局样式*/
</style>

//当前组件中可以混用本地和全局

-- 修改源码一种解决方案

// 深度作用器,使用 >>> 操作符可以使scoped样式中的一个选择器能够作用的"更深",如影响子组件
.home >>> p{  
  color:red;
}

Sass 之类的预处理器无法正确解析 >>> 。这种情况下你可以使用 /deep/ 或 ::v-deep 操作符 取而代之
.home /deep/ p{
  color:red;
}