vanilla-extract README

The project's README from github.com/vanilla-extract-css/vanilla-extract. As one markdown file: README.md.

🧁 vanilla-extract

Zero-runtime Stylesheets-in-TypeScript.

Write your styles in TypeScript (or JavaScript) with locally scoped class names and CSS Variables, then generate static CSS files at build time.

Basically, it’s “CSS Modules-in-TypeScript” but with scoped CSS Variables + heaps more.

🔥   All styles generated at build time — just like Sass, Less, etc.

✨   Minimal abstraction over standard CSS.

🦄   Works with any front-end framework — or even without one.

🌳   Locally scoped class names — just like CSS Modules.

🚀   Locally scoped CSS Variables, @keyframes and @font-face rules.

🎨   High-level theme system with support for simultaneous themes. No globals!

🛠   Utils for generating variable-based calc expressions.

💪   Type-safe styles via CSSType.

🏃‍♂️   Optional runtime version for development and testing.

🙈   Optional API for dynamic runtime theming.


🌐 Check out the documentation site for setup guides, examples and API docs.


🖥   Try it out for yourself in CodeSandbox.


Write your styles in .css.ts files.

// styles.css.ts

import { createTheme, style } from '@vanilla-extract/css';

export const [themeClass, vars] = createTheme({
  color: {
    brand: 'blue'
  },
  font: {
    body: 'arial'
  }
});

export const exampleStyle = style({
  backgroundColor: vars.color.brand,
  fontFamily: vars.font.body,
  color: 'white',
  padding: 10
});

💡 Once you've configured your build tooling, these .css.ts files will be evaluated at build time. None of the code in these files will be included in your final bundle. Think of it as using TypeScript as your preprocessor instead of Sass, Less, etc.

Then consume them in your markup.

// app.ts

import { themeClass, exampleStyle } from './styles.css.ts';

document.write(`
  <section class="${themeClass}">
    <h1 class="${exampleStyle}">Hello world!</h1>
  </section>
`);

Want to work at a higher level while maximising style re-use? Check out 🍨 Sprinkles, our official zero-runtime atomic CSS framework, built on top of vanilla-extract.


Contributing

Thanks

License

MIT.

vanilla-extract (vanilla-extract-css/vanilla-extract)

Searching Database…

Что это такое?vanilla-extract позволяет писать CSS-стили на TypeScript (или JavaScript) с локально ограниченными именами классов и CSS-переменными, а затем на этапе сборки компилирует всё в статические CSS-файлы без затрат на выполнение во время работы страницы.
Это CSS-фреймворк или скорее препроцессор?Это компилятор/библиотека для этапа сборки, а не фреймворк: по сути, TypeScript становится вашим препроцессором вместо Sass или Less. Работает с любым фронтенд-фреймворком или вообще без фреймворка.
Как начать писать стили с его помощью?Вы пишете стили в файлах .css.ts и импортируете их в разметку как обычный код; после настройки инструментов сборки эти файлы выполняются на этапе сборки и компилируются в CSS.
Нужны ли специальные плагины для сборщика, чтобы его использовать?Да, нужно настроить инструменты сборки (webpack, Vite, esbuild и т. д.) с плагином vanilla-extract; на сайте документации есть руководства по настройке для разных сборщиков.
Попадает ли код стилей на TypeScript в итоговый бандл для продакшена?Нет, код внутри файлов .css.ts не включается в итоговый JS-бандл: он удаляется, и в браузер отправляется только сгенерированный статический CSS.
Как устроена система тем?В vanilla-extract есть высокоуровневая система тем, которая поддерживает несколько тем одновременно без глобальных CSS-переменных, поэтому разные темы могут сосуществовать на одной странице без конфликтов.
Что такое Sprinkles?Sprinkles — официальный атомарный CSS-фреймворк проекта без затрат на выполнение во время работы, построенный на основе vanilla-extract. Он предназначен для команд, которым нужен более высокоуровневый API в стиле утилит и максимальное повторное использование стилей.
Можно ли использовать стили во время выполнения для тестирования или разработки?Да, есть необязательная версия vanilla-extract, которая работает во время выполнения и предназначена для разработки и тестирования, а также необязательный API для динамической темизации во время работы.
Ограничиваются ли имена классов и CSS-переменные автоматически?Да, и имена классов, и CSS-переменные (включая правила @keyframes и @font-face) по умолчанию ограничиваются локальной областью действия, примерно так же, как в CSS Modules.
Size
10.6 MB
Stars
10.4K
Age
5y
Commits · 90 Days