Vue3 css新特性 js控制css

1.插槽选择器

组件A里放一个插槽

<template>
    <div>
        我是插槽
        <slot></slot>
    </div>
</template>
 
<script>
export default {}
</script>
 
<style scoped>
 
</style>

在另一个组件引入A

<template>
    <div>
        <A>
            <div class="a">私人定制div</div>
        </A>
    </div>
</template>
 
<script setup>
import A from "@/components/A.vue"
</script>
 
 
<style lang="less" scoped>
</style>

就可以实现在A组件中修改class a 的颜色

<style scoped>
.a{
    color:red
}
</style>

默认情况下,作用域样式不会影响到 <slot/> 渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。

使用slotted解决

<style scoped>
 :slotted(.a) {
    color:red
}
</style>

2.全局css选择器

最早使用style 不加scoped 或者写一个全局文件引入,现在可以使用另外的方法实现

老办法使用两个style标签

<style>
 div{
     color:red
 }
</style>
 
<style lang="less" scoped>
 
</style>
<style lang="less" scoped>
:global(div){
    color:red
}
</style>

新办法

3.动态css

使用v-bind实现

<template>
    <div class="div">
       哈哈哈哈
    </div>
</template>
 
<script lang="ts" setup>
import { ref } from 'vue'
const red = ref<string>('red')
</script>
 
<style lang="less" scoped>
.div{
   color:v-bind(red)
}
 
</style>

如果是对象需要加上引号

 <template>
    <div class="div">
        哈哈哈哈
    </div>
</template>
 
<script lang="ts" setup>
import { ref } from "vue"
const red = ref({
    color:'pink'
})
</script>
 
    <style lang="less" scoped>
.div {
    color: v-bind('red.color');
}
</style>

4.css module

<style module> 标签会被编译成css module作为$style对象暴露出去

<template>
    <div :class="$style.red">
        哈哈哈哈
    </div>
</template>
 
<style module>
.red {
    color: red;
    font-size: 20px;
}
</style>

还可以给module起名相当于开启一个namespace

<template>
    <div :class="[zs.red,zs.border]">
        哈哈哈哈    </div>
</template>
 
<style module="zs">
.red {
    color: red;
    font-size: 20px;
}
.border{
    border: 1px solid #ccc;
}
</style>

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值