样式

默认使用 sass(scss), 在 build/utils.js 配置如下:

scss: generateLoaders('sass', {
    includePaths: [
        path.join(__dirname, '../src/style'),
        path.join(__dirname, '../node_modules')
    ]
})

import sass 默认是从 src/style 目录或 node_modules 开始的, 所以即使你组件目录层次多深,引入样式都很方便。

注意:如果是引入 node_modules 里面的模块,需要加上 ~

@import "base/base"; // 引入 src/style/base/_base.scss

@import "~normalize.css"; // 引入 node_modules/normalize.css

base.scss

src/style/base/_base.scss 只能引入不能生成代码的模块,比如 变量、mixins 等。

资源路径(assets)

sass 中引用资源(assets)使用 postcss-assets 提供的 reslove 方法。默认的资源根路径是 src/assets/images。你可以修改 .postcssrc.js 文件来修改或添加路径。

// .postcssrc.js
module.exports = {
    "plugins": {
        // to edit target browsers: use "browserlist" field in package.json
        // 浏览器配置在 package.json 那里编辑
        "autoprefixer": {},
        "postcss-assets": {
            relative: true,
            loadPaths: ['./src/assets/images']
        }
    }
}
.logo {
    // url("src/assets/images/logo.png")
    // 页面显示的地址会被 webpack 处理过
    background-image: resolve("logo.png");
}

scoped css

创建组件的时候,默认样式开启 css scoped。

<style src="./home.scss" lang="scss" scoped></style>

css scoped 的好处是组件样式不会影响到其他组件或全局样式,也不会被其他组件(其他组件也是 scoped 的)影响,又不像 css module 那样需要修改 html 模板代码。如果你需要覆盖子组件的样式,可以使用 /deep/ 。具体例子可以参考 scoped example

.parent {
    color: red;

    /deep/ {
        .child {
            color: green;
        }
    }
}

如果不使用 sass, 可以用 >>> 代替 /deep/ 由于使用 scoped css, 所以不需要嵌套太多层选择器,尽量不要嵌套。

results matching ""

    No results matching ""