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

作者: ppc | 来源:发表于2017-10-03 21:43 被阅读205次

    相关版本

    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单文件组件中的<style>学习

        本文链接:https://www.haomeiwen.com/subject/reygextx.html