勤劳一日,可得一夜安眠;勤劳一生,可得幸福长眠。——达•芬奇(意大利)
我们首先在HX
中创建vue
项目
跟着我之前写的博客简单配置一下路由
今天简单聊聊vue
中css
的作用域
我们知道vue
中的style
标签带scoped
属性时,它的CSS
只作用于当前组件中的元素
例如我这里的HelloWorld
组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <template> <div class="hello"> <div class="hello-ruben"> <h1>{{ msg }}</h1> <p> For a guide and recipes on how to configure / customize this project, <br /> check out the <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a> . </p> <h3>Installed CLI Plugins</h3> <ul> <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li> </ul> <h3>Essential Links</h3> <ul> <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li> <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li> <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li> <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li> <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li> </ul> <h3>Ecosystem</h3> <ul> <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li> <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li> <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li> <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li> <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li> </ul> </div> </div> </template>
<script> export default { name: 'HelloWorld', props: { msg: String } }; </script>
<!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> h3 { margin: 40px 0 0; } ul { list-style-type: none; padding: 0; } li { display: inline-block; margin: 0 10px; } a { color: #42b983; } </style>
|
注意style
标签是带了scoped
属性的
如果我们在外面的页面上引用这个组件,可以看到css
选择器被转换了
如果我们在外面页面上想改子组件里元素的样式
使用全局style
标签(就是不带scoped
属性的标签,会作用于所有页面)还好,但如果我们只想作用于当前页面或组件,使用了scoped
属性
这时候可以看到我们除了根节点class
生效,其他的都没有生效
如果我们想要让它生效,则可以使用 >>>
操作符
有些像 Sass 之类的预处理器无法正确解析 >>>
。这种情况下你可以使用 /deep/
操作符取而代之——这是一个 >>>
的别名,同样可以正常工作
例如:
当然大家注意到我这里还有个使用v-html
渲染的标签
其中的富文本是一个带class
的标签,我们在外面使用对应的class
选择器失效了,此处我们也可以使用>>>
操作符去让v-html
渲染的标签里的元素样式得到准确的变更
这是vue-loader
官方文档中学到的内容,我们在使用vue-cli
创建项目时默认就安装了它
看到这里,对于vue
中的css
以后出现无法修改的问题,现在应该知道怎么处理了吧