ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

浅谈 Vue css scoped & module

2021-11-15 21:33:51  阅读:155  来源: 互联网

标签:style 浅谈 module 添加 今天天气 scoped 组件 属性


提示:相关的官方文档:https://vue-loader.vuejs.org/zh/guide/scoped-css.html

scoped css

先看一段示例代码:

<template>
    <div class="wrapper">今天天气不错</div>
</template>

<script>
export default {
    name: 'Wrapper'
}
</script>

<style scoped>
.wrapper {
    color: red;
}
</style>

style 标签有 scoped 属性时,不要任何 polyfill,vue 会通过使用 PostCSS 将页面样式做以下转换:

<!DOCTYPE html>
<html lang="zh">
  <head>
    <!-- ... -->
    <style type="text/css">
        .wrapper[data-v-7ba5bd90] {
            color: red;
        }
    </style>
  </head>
  <body>
    <!-- ... -->
    <div class="wrapper" data-v-7ba5bd90="">今天天气不错</div>
    <!-- ... -->
  </body>
</html>

即自动为当前组件添加一个 hash 属性,同时将 style 标签中的相应选择器添加对应的属性选择器,从而避免当前组件定义的样式污染全局样式。

组件下的元素

<template>
    <div class="wrapper">
        <div>
            <div>
                <span>今天天气不错</span>
            </div>
        </div>
        <div>今天天气不错</div>
    </div>
</template>

<style scoped>
.wrapper {
    color: red;
}
</style>

编辑结果:

<div data-v-7ba5bd90="" class="wrapper">
    <div data-v-7ba5bd90="">
        <div data-v-7ba5bd90="">
            <span data-v-7ba5bd90="">今天天气不错</span>
        </div>
    </div>
    <div data-v-7ba5bd90="">今天天气不错</div>
</div>

style 标签有 scoped 属性时,vue 会为当前组件下所有元素添加 hash 属性。

注意:组件下的元素仅指原生的 html 元素,需要与子组件进行区分。

组件下的子组件

  1. 父组件 style 标签添加 scoped 属性,子组件 style 标签不添加 scoped 属性:

Wrapper.vue:

<template>
    <div class="wrapper">
        <span>今天天气不错</span>
        <son/>
    </div>
</template>

<script>
import Son from './components/Son';

export default {
    name: 'Wrapper',
    components: {
        Son
    }
}
</script>

<style scoped>
.wrapper {
    color: red;
}
</style>

Son.vue:

<template>
    <div class="son">
        <div class="title">
            <span>子元素标题</span>
        </div>
        <div>子元素内容</div>
    </div>
</template>

<style>
.son {
    color: orange;
}
</style>

编译结果:

<div data-v-7ba5bd90="" class="wrapper">
    <span data-v-7ba5bd90="">今天天气不错</span>
    <div data-v-7ba5bd90="" class="son">
        <div class="title">
            <span>子元素标题</span>
        </div>
        <div>子元素内容</div>
    </div>
</div>

由此可知:当父组件 style 标签添加 scoped 属性,子组件 style 标签不添加 scoped 属性时,vue 只会为子组件根元素添加哈希属性,不会为子组件根元素下的元素添加哈希属性,官方对此设计有介绍

  1. 父子组件 style 标签都添加 scoped 属性:

在【1】代码基础上为子组件 style 标签添加 scoped 属性,编译结果如下:

<div data-v-7ba5bd90="" class="wrapper">
    <span data-v-7ba5bd90="">今天天气不错</span>
    <div data-v-f4bc6adc="" data-v-7ba5bd90="" class="son">
        <div data-v-f4bc6adc="" class="title">
            <span data-v-f4bc6adc="">子元素标题</span>
        </div>
        <div data-v-f4bc6adc="">子元素内容</div>
    </div>
</div>

由此可知:当父子组件 style 标签都添加 scoped 属性时,vue 在【1】的基础上,会为子组件所有元素添加另一个哈希属性。

css module

官方文档有详细介绍,请直接查阅:https://vue-loader.vuejs.org/zh/guide/css-modules.html

标签:style,浅谈,module,添加,今天天气,scoped,组件,属性
来源: https://www.cnblogs.com/haveadate/p/15558347.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有