Skip to content
āĻāχ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ

SFC CSS Features ​

Scoped CSS ​

āϝāĻ–āύ āĻāĻ•āϟāĻŋ <style> āĻŸā§āϝāĻžāϗ⧇ scoped āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āĻĨāĻžāϕ⧇, āϤāĻ–āύ āĻāϰ CSS āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āχāϞāĻŋāĻŽā§‡āĻ¨ā§āϟāϗ⧁āϞāĻŋāϤ⧇ āĻĒā§āϰāϝ⧋āĻœā§āϝ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻļā§āϝāĻžāĻĄā§‹ āĻĄā§‹āĻŽā§‡ āĻĒāĻžāĻ“āϝāĻŧāĻž āĻ¸ā§āϟāĻžāχāϞ āĻāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āĻļāύ⧇āϰ āĻ…āύ⧁āϰ⧂āĻĒāĨ¤ āĻāϟāĻŋ āĻ•āĻŋāϛ⧁ āϏāϤāĻ°ā§āĻ•āϤāĻžāϰ āϏāĻžāĻĨ⧇ āφāϏ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϕ⧋āύ⧋ āĻĒāϞāĻŋāĻĢāĻŋāϞ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āύāĻžāĨ¤ āĻāϟāĻŋ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāϤ⧇ PostCSS āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āĻšāϝāĻŧ:

vue
<style scoped>
.example {
  color: red;
}
</style>

<template>
  <div class="example">hi</div>
</template>

āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŽāĻ§ā§āϝ⧇:

vue
<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

Child Component Root Elements ​

scoped āĻāϰ āϏāĻžāĻĨ⧇, āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻ¸ā§āϟāĻžāχāϞ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡ āϞāĻŋāĻ• āĻšāĻŦ⧇ āύāĻžāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻāĻ•āϟāĻŋ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āϰ⧁āϟ āύ⧋āĻĄ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟāϏ āĻ¸ā§āϕ⧋āĻĒāĻĄ CSS āĻāĻŦāĻ‚ āϚāĻžāχāĻ˛ā§āĻĄ āĻ¸ā§āϕ⧋āĻĒāĻĄ CSS āωāĻ­āϝāĻŧ āĻĻā§āĻŦāĻžāϰāĻž āĻā§āϝāĻĢ⧇āĻ•ā§āĻŸā§‡āĻĄ āĻšāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϝāĻžāϤ⧇ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āϞ⧇āφāωāĻŸā§‡āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ āϚāĻžāχāĻ˛ā§āĻĄ āϰ⧁āϟ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āϟāϟāĻŋāϕ⧇ āĻ¸ā§āϟāĻžāχāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

Deep Selectors ​

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ scoped style-āĻ āĻāĻ•āϟāĻŋ āϏāĻŋāϞ⧇āĻ•ā§āϟāϰāϕ⧇ "deep" āĻšāϤ⧇ āϚāĻžāύ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āϚāĻžāχāĻ˛ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇, āφāĻĒāύāĻŋ :deep() pseudo-class āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

vue
<style scoped>
.a :deep(.b) {
  /* ... */
}
</style>

āωāĻĒāϰ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻšāĻŦ⧇:

css
.a[data-v-f3f3eg9] .b {
  /* ... */
}

TIP

v-html āĻĻāĻŋāϝāĻŧ⧇ āϤ⧈āϰāĻŋ DOM āĻ•āĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻ¸ā§āϟāĻžāχāϞ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ āύāĻž, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻāĻ–āύāĻ“ āĻĄā§€āĻĒ āϏāĻŋāϞ⧇āĻ•ā§āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ āĻ¸ā§āϟāĻžāχāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

Slotted Selectors ​

āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇, āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻ¸ā§āϟāĻžāχāϞāϗ⧁āϞāĻŋ <slot/> āĻĻā§āĻŦāĻžāϰāĻž āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰāĻž āĻ•āĻ¨ā§āĻŸā§‡āĻ¨ā§āϟāϕ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇ āύāĻž, āĻ•āĻžāϰāĻŖ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϝāĻžāϰ⧇āĻ¨ā§āϟ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻžāϞāĻŋāĻ•āĻžāύāĻžāϧ⧀āύ āĻŦāϞ⧇ āĻŽāύ⧇ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

vue
<style scoped>
:slotted(div) {
  color: red;
}
</style>

Global Selectors ​

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāϤ⧇ āϚāĻžāύ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽ, āφāĻĒāύāĻŋ āĻ…āĻ¨ā§āϝ <style> āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ :global pseudo-class āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ (āύ⧀āĻšā§‡ āĻĻ⧇āϖ⧁āύ):

vue
<style scoped>
:global(.red) {
  color: red;
}
</style>

Mixing Local and Global Styles ​

āφāĻĒāύāĻŋ āĻāĻ•āχ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡ āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻāĻŦāĻ‚ āύāύ-āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻ¸ā§āϟāĻžāχāϞ āωāĻ­āϝāĻŧāχ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

vue
<style>
/* global styles */
</style>

<style scoped>
/* local styles */
</style>

Scoped Style Tips ​

  • āĻ¸ā§āϕ⧋āĻĒāĻĄ āĻ¸ā§āϟāĻžāχāϞ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĻā§‚āϰ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻŦā§āϰāĻžāωāϜāĻžāϰāϗ⧁āϞāĻŋ āϝ⧇āĻ­āĻžāĻŦ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ CSS āϏāĻŋāϞ⧇āĻ•ā§āϟāϰāϕ⧇ āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻ•āϰ⧇ āϤāĻžāϰ āĻ•āĻžāϰāϪ⧇, p { color: red } āĻ¸ā§āϕ⧋āĻĒ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻ…āύ⧇āĻ•āϗ⧁āĻŖ āϧ⧀āϰ āĻšāĻŦ⧇ (āĻ…āĻ°ā§āĻĨāĻžā§Ž āϝāĻ–āύ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āϏāĻŋāϞ⧇āĻ•ā§āϟāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞāĻŋāϤ āĻšāϝāĻŧ)āĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻ•ā§āϞāĻžāϏ āĻŦāĻž āφāχāĻĄāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āϝ⧇āĻŽāύ .example { color: red }, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻŋ āĻ­āĻžāĻ°ā§āϚ⧁⧟āĻžāϞāĻŋ āϏ⧇āχ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻšāĻŋāϟāϟāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻŦ⧇āύāĨ¤

  • āϰāĻŋāĻ•āĻžāĻ°ā§āϏāĻŋāĻ­ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡ āĻĄāĻŋāϏ⧇āĻ¨ā§āĻĄā§āϝāĻžāĻ¨ā§āϟ āϏāĻŋāϞ⧇āĻ•ā§āϟāϰāĻĻ⧇āϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧇ āϏāϤāĻ°ā§āĻ• āĻĨāĻžāϕ⧁āύ! āϏāĻŋāĻāϏāĻāϏ āύāĻŋāϝāĻŧāĻŽā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŋāϞ⧇āĻ•ā§āϟāϰ .a .b āĻāϰ āϏāĻžāĻĨ⧇, āϝāĻĻāĻŋ .a āĻāϰ āϏāĻžāĻĨ⧇ āĻŽā§‡āϞ⧇ āĻāĻŽāύ āĻāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡ āϰāĻŋāĻ•āĻžāϰāϏāĻŋāĻ­ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āϏ⧇āχ āϚāĻžāχāĻ˛ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āϏāĻŦ .b āύāĻŋāϝāĻŧāĻŽ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻŽāĻŋāϞāĻŦ⧇āĨ¤

CSS Modules ​

āĻāĻ•āϟāĻŋ <style module> āĻŸā§āϝāĻžāĻ— CSS Module āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞ⧇ CSS āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋāϕ⧇ $style -āĻāϰ āĻ…āϧ⧀āύ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧇:

vue
<template>
  <p :class="$style.red">This should be red</p>
</template>

<style module>
.red {
  color: red;
}
</style>

āϏāĻ‚āϘāĻ°ā§āώ āĻāĻĄāĻŧāĻžāϤ⧇ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋ āĻšā§āϝāĻžāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡ CSS āĻ¸ā§āϕ⧋āĻĒ āĻ•āϰāĻžāϰ āĻāĻ•āχ āχāĻĢ⧇āĻ•ā§āϟ āĻ…āĻ°ā§āϜāύ āĻ•āϰ⧇āĨ¤

āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻžāϰ āϜāĻ¨ā§āϝ CSS āĻŽāĻĄāĻŋāωāϞ āĻ¸ā§āĻĒ⧇āĻ• āĻĻ⧇āϖ⧁āύ āϝ⧇āĻŽāύ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āϝāĻžāĻĒā§€ āĻŦā§āϝāϤāĻŋāĻ•ā§āϰāĻŽ āĻāĻŦāĻ‚ compositionāĨ¤

Custom Inject Name ​

āφāĻĒāύāĻŋ module āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟāϕ⧇ āĻāĻ•āϟāĻŋ āĻŽāĻžāύ āĻĻāĻŋāϝāĻŧ⧇ āχāύāĻœā§‡āĻ•āĻļāύ āĻ•āϰāĻž āĻ•ā§āϞāĻžāϏ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋ āϕ⧀ āĻ•āĻžāĻ¸ā§āϟāĻŽāĻžāχāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

vue
<template>
  <p :class="classes.red">red</p>
</template>

<style module="classes">
.red {
  color: red;
}
</style>

Usage with Composition API ​

āχāύāĻœā§‡āĻ•āĻļāύ āĻ•āϰāĻž āĻ•ā§āϞāĻžāϏāϗ⧁āϞāĻŋ setup() āĻāĻŦāĻ‚ <script setup>-āĻ useCssModule API āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ•āĻžāĻ¸ā§āϟāĻŽ āχāύāĻœā§‡āĻ•āĻļāύ āύāĻžāĻŽ āϏāĻš <style module> āĻŦā§āϞāϕ⧇āϰ āϜāĻ¨ā§āϝ, useCssModule āĻĒā§āϰāĻĨāĻŽ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŽā§āϝāĻžāϚāĻŋāĻ‚ module āĻ…ā§āϝāĻžāĻŸā§āϰāĻŋāĻŦāĻŋāωāϟ āĻ­ā§āϝāĻžāϞ⧁āϕ⧇ āϰāĻŋāϏāĻŋāĻ­ āĻ•āϰ⧇:

js
import { useCssModule } from 'vue'

// inside setup() scope...
// default, returns classes for <style module>
useCssModule()

// named, returns classes for <style module="classes">
useCssModule('classes')
  • Example
vue
<script setup lang="ts">
import { useCssModule } from 'vue'

const classes = useCssModule()
</script>

<template>
  <p :class="classes.red">red</p>
</template>

<style module>
.red {
  color: red;
}
</style>

v-bind() in CSS ​

SFC <style> āĻŸā§āϝāĻžāĻ—āϗ⧁āϞāĻŋ v-bind CSS āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ CSS āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞāĻŋāϕ⧇ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāϤ⧇ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇:

vue
<template>
  <div class="text">hello</div>
</template>

<script>
export default {
  data() {
    return {
      color: 'red'
    }
  }
}
</script>

<style>
.text {
  color: v-bind(color);
}
</style>

āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ <script setup> āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇ (āϕ⧋āĻ°ā§āϟ āĻĻā§āĻŦāĻžāϰāĻž āφāĻŦ⧃āϤ āĻ•āϰāĻž āφāĻŦāĻļā§āϝāĻ•):

vue
<script setup>
import { ref } from 'vue'
const theme = ref({
    color: 'red',
})
</script>

<template>
  <p>hello</p>
</template>

<style scoped>
p {
  color: v-bind('theme.color');
}
</style>

āĻāĻ•āϚ⧁⧟āĻžāϞ āĻ­ā§āϝāĻžāϞ⧁ āĻāĻ•āϟāĻŋ āĻšā§āϝāĻžāĻļ āĻ•āϰāĻž CSS āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋāϤ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻšāĻŦ⧇, āϤāĻžāχ CSS āĻāĻ–āύāĻ“ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ•āĨ¤ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āχāύāϞāĻžāχāύ āĻ¸ā§āϟāĻžāχāϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āϰ⧁āϟ āχāϞāĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϏ⧋āĻ°ā§āϏ āĻ­ā§āϝāĻžāϞ⧁ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϞ⧇ āϰāĻŋā§Ÿā§‡āĻ•ā§āϟāĻŋāĻ­āĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

SFC CSS Features has loaded