Vue3单文件中CSS的应用(8岁小孩都能看懂)

1,560 阅读2分钟

vue3已经面世将近3年了,经过不断的迭代终于稳定,且有不断的企业开始使用Vue3进行新项目的研发。vue3中的css的应用,也得到了显著提升。

一、组件作用域scoped

当组件内的<style>标签加上scoped属性的时候,代表这个style标签的样式将变成此vue单文件私有的标签,其他组件无法使用此标签,这一点和vue2一致。其原理是通过PostCSS对标签进行加密,如:

<style scoped> 
.蟹黄堡 { color: blue; } 
</style> 
<template> <div class="蟹黄堡">hi</div> </template>

会变成:

<style> 
.蟹黄堡[data-v-f3f2eg2] { color: blue; } 
</style> 
<template> <div class="蟹黄堡" data-v-f3f2eg2>hi</div> </template>

二、深度选择器

当组件上使用了scoped属性后,我们还想要对子组件的样式进行干预,怎么办呢? 对,我们可以使用less 的/deep/或者scss的::v-deep。但vue3自己也出了一个可以干预的办法,那就是:deep(*)伪类。 这样

<style scoped> .蟹老板 :deep(.痞老板) { /* 揍痞老板 */ } </style>

会变成:

.美伢[data-v-f3f3eg9] .痞老板 { /* 揍到了 */ }

三、插槽选择器

顾名思义,就是针对插槽中的元素,进行样式的干预。默认情况下,作用域样式不会影响到 <slot/> 渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。使用 :slotted 伪类以明确地将插槽内容作为选择器的目标:

<template>
//我是插槽
<slot>/*被插进的内容*/</slot>
</template>
<style scoped>
:slotted(被插进的内容){
样式
}
</style>

四、全局选择器

此选择器是为了让部分在scoped中的样式可以作用于全局,慎用,容易造成样式污染。

<style scoped> 
:global(.海绵宝宝) { color: yellow ; }
</style>

五、混合使用局部与全局样式

这个功能在vue2上也可以使用,你可以同时使用<style></style><style scoped></style>,像这样:

<style> /* 全局样式 */ </style> 
<style scoped> /* 局部样式 */ </style>

注:作用域样式中,尽量使用class和id选择器来代替[attr]属性选择器,以避免性能损失

六、CSS Modules

类似script Modules,将style标签进行模块化的划分:

<style module='name'>/*模块内的样式*/</style>

此时,你可以在template中,直接用name.**来进行样式的使用,如果module没有付名,默认使用$style.**;也可以在script setup中,使用useCssModule来对CSS Modules进行访问:

import { useCssModule } from 'vue' 
// 在 setup() 作用域中... 
// 默认情况下, 返回 <style module> 的 class 
useCssModule() 
// 具名情况下, 返回 <style module="classes"> 的 class 
useCssModule('classes')

七、v-bind

v-bind应该是最亮眼的一次进化了,因为它提供了js直接使用css的桥梁,像这样:

<template>
  <div class="派大星">你好~我是派大星!</div>
</template> 
<script>
export default { 
  data() { 
    return { color: 'pink' } 
  }
} </script> 
<style> 
.派大星 {
  color: v-bind(color); 
} 
</style>

或者是这样:

<script setup> 
  const 章鱼哥 = { color: 'darkseagreen' }
</script> 
<template> 
  <p>你好~我是章鱼哥!</p> 
</template> 
<style scoped> p { color: v-bind('章鱼哥.color'); } </style>

完结

这就是vue3为对CSS应用的全部进化了,希望能帮到你!