学习Vue3 第三十三章(css Style完整新特性)

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

上一章已经讲过了:deep(),其实还有两个选择器可以补充


1.插槽选择器


A 组件定义一个插槽


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


在App.vue 引入


<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>


无效果


b4f7142c2205486ea9d5e3ffc19740a8.png

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


解决方案  slotted


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

57d5f7f9cd7f48f9ad7e2ef11f5ba338.png


2.全局选择器


在之前我们想加入全局 样式 通常都是新建一个style 标签 不加scoped 现在有更优雅的解决方案


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


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


效果等同于上面


3.动态 CSS


单文件组件的 <style> 标签可以通过 v-bind 这一 CSS 函数将 CSS 的值关联到动态的组件状态上:


<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>


如果是对象 v-bind 请加引号


 <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 Modules 并且将生成的 CSS 类作为 $style 对象的键暴露给组件


<template>
    <div :class="$style.red">
        小满是个弟弟
    </div>
</template>
<style module>
.red {
    color: red;
    font-size: 20px;
}
</style>


自定义注入名称(多个可以用数组)


你可以通过给 module attribute 一个值来自定义注入的类对象的 property 键


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


与组合式 API 一同使用


注入的类可以通过 useCssModule API 在 setup() 和 <script setup> 中使用。对于使用了自定义注入名称的 <style module> 模块,useCssModule 接收一个对应的 module attribute 值作为第一个参数


<template>
    <div :class="[zs.red,zs.border]">
        小满是个弟弟
    </div>
</template>
<script setup lang="ts">
import { useCssModule } from 'vue'
const css = useCssModule('zs')
</script>
<style module="zs">
.red {
    color: red;
    font-size: 20px;
}
.border{
    border: 1px solid #ccc;
}
</style>


使用场景一般用于TSX  和 render  函数 居多

目录
相关文章
|
3月前
|
JavaScript 前端开发 API
实用!最新的几个 Vue 3 重要特性提案
实用!最新的几个 Vue 3 重要特性提案
|
2月前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
250 91
|
14天前
|
前端开发 开发者 容器
Vue3中Sass的安装与使用指南:轻松上手CSS预处理器
Vue3中Sass的安装与使用指南:轻松上手CSS预处理器
77 0
|
2月前
|
缓存 JavaScript 算法
卷不动也得继续学!紧跟vue3的步伐,再来get一波进阶新特性!
该文章深入讲解了Vue3的进阶新特性,包括`watchEffect`的使用、性能优化策略、Vite构建工具的优势以及全局API的变化等内容,帮助开发者更好地掌握Vue3的开发技巧。
卷不动也得继续学!紧跟vue3的步伐,再来get一波进阶新特性!
|
2月前
|
缓存 移动开发 JavaScript
查漏补缺方为上策!!两万六字总结vue的基本使用和高级特性,周边插件vuex和vue-router任你挑选
该文章全面总结了Vue.js的基本使用方法与高级特性,并介绍了Vue周边的重要插件Vuex和Vue-Router的使用技巧。
查漏补缺方为上策!!两万六字总结vue的基本使用和高级特性,周边插件vuex和vue-router任你挑选
|
22天前
|
缓存 JavaScript 算法
Vue3新特性合集
Vue3新特性合集
17 0
|
2月前
|
前端开发
|
3月前
|
Rust JavaScript 前端开发
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
|
2月前
|
JavaScript API
卷死了!再不学vue3就没有人要你了!速来围观vue3新特性
该文章强调了学习Vue3的重要性,并详细介绍了Vue3相较于Vue2的新特性与改进,包括Composition API、响应式系统的变化以及其他API的更新等内容。
|
2月前
|
Web App开发 移动开发 自然语言处理