--- name: transformer-directives description: CSS directives @apply, @screen, theme(), and icon() --- # Transformer Directives Enables `@apply`, `@screen`, `theme()`, and `icon()` directives in CSS. ## Installation ```ts import { defineConfig, transformerDirectives } from 'unocss' export default defineConfig({ transformers: [ transformerDirectives(), ], }) ``` ## @apply Apply utility classes in CSS: ```css .custom-btn { @apply py-2 px-4 font-semibold rounded-lg; } /* With variants - use quotes */ .custom-btn { @apply 'hover:bg-blue-600 focus:ring-2'; } ``` ### CSS Custom Property Alternative For vanilla CSS compatibility: ```css .custom-div { --at-apply: text-center my-0 font-medium; } ``` Supported aliases: `--at-apply`, `--uno-apply`, `--uno` Configure aliases: ```ts transformerDirectives({ applyVariable: ['--at-apply', '--uno-apply', '--uno'], // or disable: applyVariable: false }) ``` ## @screen Create breakpoint media queries: ```css .grid { display: grid; grid-template-columns: repeat(2, 1fr); } @screen sm { .grid { grid-template-columns: repeat(3, 1fr); } } @screen lg { .grid { grid-template-columns: repeat(4, 1fr); } } ``` ### Breakpoint Variants ```css /* Less than breakpoint */ @screen lt-sm { .item { display: none; } } /* At specific breakpoint only */ @screen at-md { .item { width: 50%; } } ``` ## theme() Access theme values in CSS: ```css .btn-blue { background-color: theme('colors.blue.500'); padding: theme('spacing.4'); border-radius: theme('borderRadius.lg'); } ``` Dot notation paths into your theme config. ## icon() Convert icon utility to SVG (requires preset-icons): ```css .icon-sun { background-image: icon('i-carbon-sun'); } /* With custom color */ .icon-moon { background-image: icon('i-carbon-moon', '#fff'); } /* Using theme color */ .icon-alert { background-image: icon('i-carbon-warning', 'theme("colors.red.500")'); } ``` ## Complete Example ```css .card { @apply rounded-lg shadow-md p-4; background-color: theme('colors.white'); } .card-header { @apply 'font-bold text-lg border-b'; padding-bottom: theme('spacing.2'); } @screen md { .card { @apply flex gap-4; } } .card-icon { background-image: icon('i-carbon-document'); @apply w-6 h-6; } ```