插槽选择器
选择插槽内的元素。
A.vue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <template> <div> 我是插槽 <slot></slot> </div> </template>
<style scoped lang="scss"> // 这样做不会生效,因为vue会将a理解为父级的类名 // .a { // color: red; // } // 插槽选择器,vue会认为a是子组件的类名,这样就能生效了 :slotted(.a) { color: red; } </style>
|
App.vue:
1 2 3 4 5 6 7 8 9
| <template> <A> <div class="a">插入</div> </A> </template>
<script setup lang="ts"> import A from '@/components/A.vue' </script>
|
全局选择器
在全局选择元素(不限作用域)。
A.vue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <template> <div> 我是插槽 <slot></slot> </div> </template>
<style scoped lang="scss"> // 也可以用全局选择器 :global(.a) { color: red; } </style>
<style lang="scss"> // 可以直接开一个新的style,不加scoped,就可以作用于全局 // .a { // color: red; // } </style>
|
动态CSS
可以通过JS变量控制CSS。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <template> <div class="div1"> 动态CSS1 </div> <div class="div2"> 动态CSS2 </div> </template>
<script setup lang="ts"> const style1 = ref("red") const style2 = ref({ color:'red' })
// 可以通过js控制样式 setTimeout(() => { style1.value = "blue" style2.value.color = "blue" }, 2000) </script>
<style scoped lang="scss"> .div1 { color: v-bind(style1) } .div2 { // 不能直接读取对象属性,会报错,需要加引号 color: v-bind("style2.color"); } </style>
|
也可以将Style标签作为模块使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <template> <!-- 如果没有给style模块标签命名就这么写 --> <!-- <div :class="[$style.div,$style.border]"> --> <!-- 如果给style模块标签命了名就这么写 --> <div :class="[cssss.div,cssss.border]"> 动态CSS </div> </template>
<script setup lang="ts"> const css = useCssModule("cssss") // 可以读到实际生成的类名 console.log(css) // 常用于tsx或render函数 // return(<div class={cssss.div}></div>) </script>
<style module="cssss" lang="scss"> .div { color: red } .border { border: 1px solid #ccc; } </style>
|