Guides
Static CSS Generator
Panda can be used to generate a static set of utility classes for your project.
This is useful if you want to use Panda in an HTML project or you want absolute zero runtime.
Usage
To generate a static set of CSS classes, add them to your panda.config.js
file:
export default {
staticCss: {
// the css properties you want to generate
css: [],
// the recipes you want to generate
recipes: {}
}
}
The static
property supports two properties:
css
- an array of CSS properties you want to generate with theirconditions
recipes
- the component recipes you want to generate
Generating CSS Properties
The css
property is an array of CSS properties you want to generate with their conditions
.
You can specify the following options:
properties
: the CSS properties you want to generateconditions
: the CSS conditions or selectors you want to generate in addition to the default values. Values can belight, dark
, etc.responsive
: whether or not to generate responsive classesvalues
: the values you want to generate for the CSS property. When set to*
, all values defined in the tokens will be included. When set to an array, only the values in the array will be generated.
export default {
staticCss: {
css: [
{
properties: {
margin: ['*'],
padding: ['*', '50px', '80px']
},
responsive: true
},
{
properties: {
color: ['*'],
backgroundColor: ['green.200', 'red.400']
},
conditions: ['light', 'dark']
}
]
}
}
Generating Recipes
The recipes
property is an object of component recipes you want to generate with their conditions
.
export default {
staticCss: {
recipes: {
button: [
{
size: ['sm', 'md'],
responsive: true
},
{ variant: ['*'] }
],
// shorthand for all variants
tooltip: ['*']
}
}
}
You can also directly specify a recipe's staticCss
rules from inside a recipe config, e.g.:
import { defineRecipe } from '@pandacss/dev'
const card = defineRecipe({
className: 'card',
base: { color: 'white' },
variants: {
size: {
small: { fontSize: '14px' },
large: { fontSize: '18px' }
}
},
staticCss: [{ size: ['*'] }]
})
would be the equivalent of defining it inside the main config:
import { defineConfig } from '@pandacss/dev'
export default defineConfig({
// ...
staticCss: {
recipes: {
card: {
size: ['*']
}
}
}
})
Or you could even generate the CSS for every config recipe
/ slotRecipes
(and each of their variants):
import { defineConfig } from '@pandacss/dev'
export default defineConfig({
// ...
staticCss: {
recipes: '*'
}
})
This is mostly useful for testing purposes with Storybook
.
Removing unused CSS
For an even smaller css output size, you can utilize PurgeCSS (opens in a new tab) to treeshake and remove unused CSS. This tool will analyze your template and match selectors against your CSS.