Vue3 hat den Stil verbessert. Dieser Artikel wird die neuen Funktionen von Vue3 zusammenfassen und mit Ihnen teilen.
Die nach Vue3.0 eingeführte Setup-Funktion entwickelt Vue-Komponenten genau wie das Schreiben von JS. Darüber hinaus fügt Style auch viele neue Funktionen hinzu, wie z. B. die Einführung von Variablen und Funktionen, wodurch CSS wiederverwendbar wird ...
Vue3.2-Version hat viele Verbesserungen am Stil einzelner Dateikomponenten vorgenommen, wie z. B. lokale Stile, CSS-Variablen und Stile, die für Vorlagen verfügbar gemacht werden. (Teilen von Lernvideos: vue-Video-Tutorial)
Wenn das Tag <style>
das Attribut scoped
hat Gleichzeitig wird sein CSS nur auf Elemente der aktuellen Komponente angewendet: <style>
标签带有 scoped
attribute 的时候,它的 CSS 只会应用到当前组件的元素上:
<template> <div class="example">hi</div> </template> <style scoped> .example { color: red; } </style>
处于 scoped
样式中的选择器如果想要做更“深度”的选择,也即:影响到子组件,可以使用 :deep()
这个伪类:
<style scoped> .a :deep(.b) { /* ... */ } </style>
通过
v-html
创建的 DOM 内容不会被作用域样式影响,但你仍然可以使用深度选择器来设置其样式。
默认情况下,作用域样式不会影响到 <slot/>
渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。使用 :slotted
伪类以确切地将插槽内容作为选择器的目标:
<style scoped> :slotted(div) { color: red; } </style>
如果想让其中一个样式规则应用到全局,比起另外创建一个 <style>
,可以使用 :global
伪类来实现:
<style scoped> :global(.red) { color: red; } </style>
你也可以在同一个组件中同时包含作用域样式和非作用域样式:
<style> /* global styles */ </style> <style scoped> /* local styles */ </style>
<style module>
标签会被编译为 CSS Modules 并且将生成的 CSS 类键暴露给组件:
1、 默认以$style
对象暴露给组件;
<template> <p :class="$style.red"> This should be red </p> </template> <style module> .red { color: red; } </style>
2、可以自定义注入module名称
<template> <p :class="classes.red">red</p> </template> <style module="classes"> .red { color: red; } </style>
注入的类可以通过 useCssModule API 在 setup()
和 <script setup>
中使用:
<script setup> import { useCssModule } from 'vue' // 默认, 返回 <style module> 中的类 const defaultStyle = useCssModule() // 命名, 返回 <style module="classes"> 中的类 const classesStyle = useCssModule('classes') </script>
单文件组件的 <style>
标签可以通过 v-bind
<script setup> const theme = { color: 'red' } </script> <template> <p>hello</p> </template> <style scoped> p { color: v-bind('theme.color'); } </style>
scoped
-Stil treffen möchten, d. h. um Unterkomponenten zu beeinflussen, Sie können die Pseudoklasse :deep()
verwenden: 🎜rrreee🎜DOM-Inhalte, die mit v-html
erstellt wurden, werden von Bereichsstilen nicht beeinflusst, aber Sie können Verwenden Sie weiterhin die Tiefenauswahl, um es zu gestalten. 🎜
🎜🎜🎜🎜3 Standardmäßig wirken sich Bereichsstile nicht auf den von <slot/>
gerenderten Inhalt aus, da davon ausgegangen wird, dass sie von der übergeordneten Komponente gehalten und übergeben werden. Verwenden Sie die Pseudoklasse :slotted
, um den Slot-Inhalt genau wie den Selektor anzusprechen: 🎜rrreee🎜🎜🎜🎜 4. Globaler Selektor 🎜🎜🎜🎜Wenn Sie möchten, dass eine der Stilregeln global angewendet wird, ist dies besser als das Erstellen eines anderen <style>
, Sie können die Pseudoklasse :global
verwenden, um Folgendes zu erreichen: 🎜rrreee🎜🎜🎜🎜5. Mischen Sie lokale und globale Stile🎜🎜🎜🎜Sie können auch sowohl bereichsbezogene als auch nicht bereichsbezogene Stile in dieselbe Komponente einbinden: 🎜rrreee🎜🎜🎜🎜6. Unterstützt CSS-Module🎜🎜🎜🎜<style module>
-Tag wird in CSS Modules🎜 und stellen Sie den generierten CSS-Klassenschlüssel für die Komponente bereit: 🎜 🎜1. Standardmäßig wird das $style
-Objekt der Komponente angezeigt 🎜rrreee🎜2. Sie können den injizierten Modulnamen anpassen🎜rrreee🎜🎜🎜🎜7 Wird mit Setup verwendet🎜🎜🎜🎜Die injizierte Klasse kann useCssModule🎜 API in setup()
und <script setup> ;
Verwendet in: 🎜rrreee🎜🎜🎜🎜 8. Dynamisches CSS🎜 🎜🎜🎜Das <style>
-Tag einer einzelnen Dateikomponente kann den CSS-Wert über das v-bind
-CSS mit dem Status der dynamischen Komponente verknüpfen Funktion: 🎜rrreee🎜 (Ende) 🎜(Teilen von Lernvideos: Web-Frontend-Entwicklung, Grundlegendes Programmiervideo)
Das obige ist der detaillierte Inhalt vonLassen Sie uns über die neuen Funktionen im Vue3-Stil sprechen (Zusammenfassung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!