Vue单文件组件中的<style>学习

相关版本

  1. vue-cli: @2.8.2
  2. vue: ^2.4.2
  3. vue-loader: ^13.0.4
  4. webpack: ^2.6.1

各种不同的<style>

  1. <style>
  2. <style scoped>
  3. <style module>

<style>插入<head>的顺序

  1. 对单个组件,按照<style>出现的顺序插入<head>
  2. 遍历组件的子组件,依次对子组件执行步骤1,在开发时执行的顺序按照子组件在template中出现的顺序,生产构建时执行的顺序按照引入子组件的顺序

<style>

最基本的<style>标签,其内部的样式将会作用于所有组件。
将会生成最基本的style样式

<style scoped>

具有scoped属性的<style>标签,其内部的样式只能用于当前组件和其子组件。
在编译时,将会为其中的css选择器的最后一个层次添加类似[data-v-207273bc]的属性,data-v-207273bc是vue在编译时为包含<style scoped>标签的组件添加的组件id,将会添加在组件的dom元素上(会添加到子组件的最外层元素,但不会添加到子组件的内层元素)
example:

<style scoped>
div {}

div p {}

div, p {}

p:before {}
</style>

// 将会被编译为
<style>
div[data-v-207273bc] {}

div p[data-v-207273bc] {}

div[data-v-207273bc], p[data-v-207273bc] {}

p[data-v-207273bc]:before {}
</style>

注意:我们可以在css中使用>>>,在scss中使用/deep/来改变[data-v-207273bc]属性的位置
example:

<style scoped>
div p {}

div >>> p {}

>>> p {}

p >>> {}
</style>

// 将会被编译为
<style>
div p[data-v-207273bc] {}

div[data-v-207273bc] {}

[data-v-207273bc] p {}

p[data-v-207273bc] {}
</style>

<style module>

具有module属性的<style>标签,具有以下特点:

  1. <style module>标签可以给module属性设置值,作为其名称
  2. 一个组件可以有多个<style module>标签,但其module属性值不能重复
  3. 标签中的大部分的样式与普通<style>标签相同,但其中的class选择器和id选择器的名称将会被编译
    example:
<style module>
#id {}

.class {}
</style>

// 将会被编译为
<style>
#_v9YRgsGtR3I5AoEIMREr_2 {}

._3VYuS_9QEH8v-y4qJPvwi5_2 {}
</style>
  1. class选择器和id选择器的使用方式也有所不同,通过组件实例对象的属性进行访问,这意味着可以在父组件和子组件中进行使用
    example:
<style module>
#id {}

.class {}
</style>
// 通过this.$style.id和this.$style.class在<script>中使用
// 通过$style.id和$style.class在<template>中使用


<style module="a">
#id {}

.class {}
</style>
// 通过this.a.id和this.a.class在<script>中使用
// 通过a.id和a.class在<template>中使用

注意

<style>标签的module/scoped属性可以和其他属性进行搭配,从而实现各种不同的组合

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,458评论 0 29
  • 本文发布在我的博客vue中慎用style的scoped属性许可协议: 署名-非商业性使用-禁止演绎4.0国际 ...
    2ue阅读 12,966评论 2 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • 本文章是我最近在公司的一场内部分享的内容。我有个习惯就是每次分享都会先将要分享的内容写成文章。所以这个文集也是用来...
    Awey阅读 13,125评论 4 67
  • 刚开始使用vue的时候容易被里面的样式搞懵: 样式可以在main.js中引入,在模块js文件中引入,在组件中的st...
    小飞牛牛阅读 13,407评论 4 18