学习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  函数 居多

目录
相关文章
|
13天前
|
前端开发 JavaScript 开发者
探索Web设计新纪元:CSS3的革新特性如何重塑我们的网页视觉体验?
【8月更文挑战第26天】随着Web技术的发展,CSS3为前端开发带来了众多激动人心的新特性,极大提升了网页设计的视觉效果与创意空间。本文通过对比CSS3与CSS2,详细介绍了CSS3在选择器增强、圆角阴影处理、渐变背景应用、转换动画实现、文字效果优化、媒体查询支持及多列布局方面的显著改进,展示了CSS3如何助力开发者打造更具吸引力和互动性的网页体验。
30 1
|
9天前
|
JavaScript 前端开发 API
实用!最新的几个 Vue 3 重要特性提案
实用!最新的几个 Vue 3 重要特性提案
|
2月前
|
前端开发
5.CSS学习(浮动)
【7月更文挑战第29天】
30 4
学习CSS3 中的渐变、阴影与遮罩
CSS3的渐变、阴影和遮罩特性极大地丰富了网页设计。渐变让颜色平滑过渡,赋予页面流动美感;阴影增加元素立体感,引导视觉焦点;遮罩通过隐藏或显示部分元素创造独特视觉效果。这些特性组合使用,可打造丰富多彩、立体生动的视觉体验,并可通过CSS3动画增强动态效果,使网页更具活力。正确应用这些特性需考虑参数调整及跨浏览器兼容性,以确保最佳展示效果。
|
6天前
|
前端开发
|
9天前
|
Rust JavaScript 前端开发
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
|
6天前
|
Web App开发 移动开发 自然语言处理
|
10天前
|
前端开发 JavaScript
|
9天前
|
前端开发 JavaScript API
Vue 3 新特性:在 Composition API 中使用 CSS Modules
Vue 3 新特性:在 Composition API 中使用 CSS Modules
|
22天前
|
JavaScript 算法 API
Vue 3有哪些新特性
【8月更文挑战第16天】Vue 3有哪些新特性
173 1