SFC单文件组件 CSS功能

 前言:

Vue中使用css_scoped,其原理就是在class名称后加上一个data属性选择器。

<style scoped>
.main { float: left; } 
</style>

//转义后变成
<style>
.main[data-v-49729759] { float: left }
</style>

css_scoped是Vue的专用方案,如果你使用React等其它UI框架,那么你可以使用更通用的css_module,其原理是为样式名加hash字符串后缀,从而保证class名全局唯一.

<style module>
.main { float: left; } 
</style>

//转义后变成
<style>
.main_3FI3s6uz { float: left; } 
</style>

组件作用域CSS

深度选择器

处于 scoped 样式中的选择器如果想要做更“深度”的选择,也即:影响到子组件,可以使用 :deep() 这个伪类

<style scoped>
.a :deep(.b) {
  /* ... */
}
</style>

插槽选择器

默认情况下slot插槽的内容属于父组件,作用域样式不会影响<slot/>渲染出来的内容,使用:slotted可以将选择插槽内容

<style scoped>
:slotted(div){
    color:blue;
}

:global(.red){
    color:black;
}

</style>

全局选择器

如果希望一个样式应用到全局,可以使用:global伪类来实现。

CSS modules

<style module>标签会被编译为css modules并将生成的css class作为$style暴露给组件使用。

<template>
  <p :class="$style.red">This should be red</p> 默认名称
  <p :class="classes.red">This should be red</p>  自定义名称
</template> 

<script setup>

import { useCssModule } from 'vue'

// 在 setup() 作用域中...
// 默认情况下, 返回 <style module> 的 class
useCssModule()

// 具名情况下, 返回 <style module="classes"> 的 class
useCssModule('classes')
 </script>


<style module="classes">
.red {
  color: red;
}
</style>

CSS 中的 v-bind()

<style>
.text {
  color: v-bind(color);
}
</style>

这个语法同样也适用于 <script setup>,且支持 JavaScript 表达式 (需要用引号包裹起来):

<script setup>
const theme = {
  color: 'red'
}
</script>

<template>
  <p>hello</p>
</template>

<style scoped>
p {
  color: v-bind('theme.color');
}
</style>

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值