vue使用样式

Vue3引入了新的样式特性,包括使用:global()定义全局样式,:deep()实现样式穿透到子组件,以及:slotted()对插槽进行样式控制。此外,还支持动态样式绑定,如v-bind与ref结合使用。文章还介绍了scoped样式的原理及其与子组件样式穿透的实现方法。
摘要由CSDN通过智能技术生成

vue3样式新特性

  • 全局样式
:global(选择器){
    height: 20px;
}
  • 样式穿透
:deep(子组件中的选择器){}
:deep(.son > div){
    height: 20px;
}

// 在vue2中
scss使用::v-deep
less使用/deep/
css使用>>>
  • 插槽样式(样式写在插槽的定义组件中)
:slotted(选择器){
    height: 20px;
}
  • 动态样式
<script setup>
const height = ref('10px')
const obj = reactive({height: '20px'})
 
<style scoped>
div{
   height: v-bind(height)
   height: v-bind('obj.height') 
}

scoped及样式穿透原理

- style中加scoped样式分离
1、为组件实例生成唯一标识,给组件中每个标签对应的dom元素添加一个标签属性,data-v-xxx
2、给style scoped中的每个选择器的最后一个选择器添加一个属性选择器,如:
.container #id div => .container #id div[data-v-xxx]

- 样式穿透:用了样式穿透后的选择器最后就不会加标识了
子组件
<template>
	<div class="son">
		<h1>ssoonn</h1>
	</div>
</template>

父组件
<template>
	<div class="father">
		<Son/>
	</div>
</template>
<style scoped lang="less">
.father /deep/ .son > h1{
	color: red;
}
// 浏览器中
.father[data-v-fatherhash] .son > h1{color: red}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值