Files ending in .module.css get scoped class names via LightningCSS.
Usage
/* button.module.css */
.primary { color: blue }
.large { font-size: 2em }import styles from './button.module.css'
console.log(styles.primary) // "ewq3O_primary"
console.log(styles.large) // "ewq3O_large"The generated class names are unique per file, preventing style collisions across components.
How It Works
Volt compiles .module.css files into two outputs:
- JavaScript module — exports a mapping of original class names to scoped names
- Scoped CSS — the original CSS with class names rewritten to their scoped equivalents
Both are handled automatically during development and production builds. The scoped CSS is included in the output bundle alongside any Tailwind or regular CSS.
Framework Examples
React
import styles from './Card.module.css'
export default function Card({ children }) {
return <div className={styles.card}>{children}</div>
}Vue
<script setup>
import styles from './Card.module.css'
</script>
<template>
<div :class="styles.card"><slot /></div>
</template>Svelte
<script>
import styles from './Card.module.css'
let { children } = $props()
</script>
<div class={styles.card}>{@render children()}</div>