Mithril не навязывает структуру проекта и не включает собственную систему стилей. Это делает фреймворк удобным для интеграции с любыми CSS-препроцессорами и инструментами постобработки. Препроцессоры используются для расширения возможностей CSS: вложенность, переменные, миксины, функции, разделение на модули. PostCSS дополняет эту цепочку автоматической трансформацией итогового CSS-кода.
В проектах на Mithril препроцессоры и PostCSS обычно работают вне самого фреймворка, на уровне сборки. Это позволяет сохранить минимализм Mithril и при этом получить современный и масштабируемый подход к стилям.
SCSS — наиболее распространённый препроцессор в экосистеме JavaScript. Его синтаксис близок к обычному CSS и хорошо подходит для компонентной архитектуры.
Ключевые возможности SCSS:
Пример структуры проекта:
src/
├─ components/
│ ├─ Button/
│ │ ├─ Button.js
│ │ └─ Button.scss
├─ styles/
│ ├─ _variables.scss
│ ├─ _mixins.scss
│ └─ main.scss
Файл компонента:
import m from "mithril";
import "./Button.scss";
export const Button = {
view: ({ attrs, children }) =>
m("button.btn", attrs, children)
};
SCSS-файл компонента:
@use "../. ./styles/variables" as *;
.btn {
background-color: $primary-color;
padding: 0.5rem 1rem;
border-radius: 4px;
&:hover {
background-color: darken($primary-color, 10%);
}
}
SCSS компилируется в обычный CSS ещё до загрузки приложения в браузер. Mithril не участвует в этом процессе.
Less используется реже, но также хорошо интегрируется в сборку Mithril-приложений. Он предоставляет переменные, миксины и вложенность, но с меньшими возможностями по сравнению с SCSS.
Пример Less:
@primary-color: #4a90e2;
.btn {
background: @primary-color;
&:hover {
background: darken(@primary-color, 10%);
}
}
Выбор препроцессора не влияет на архитектуру Mithril, так как все они работают на этапе сборки и не зависят от виртуального DOM.
Mithril поощряет композицию компонентов, и стили логично организовывать аналогично. Препроцессоры позволяют:
Распространённые подходы:
Препроцессоры не обеспечивают реальной изоляции стилей, поэтому часто используются соглашения по именованию или дополнительные инструменты (CSS Modules, scoped-стили).
PostCSS — это платформа для трансформации CSS с помощью плагинов. В отличие от препроцессоров, он работает с уже валидным CSS.
Основные задачи PostCSS:
PostCSS не заменяет SCSS или Less, а дополняет их.
Один из самых популярных плагинов PostCSS — Autoprefixer. Он анализирует CSS и добавляет необходимые префиксы на основе заданной поддержки браузеров.
Пример входного CSS:
.container {
display: flex;
user-select: none;
}
Результат обработки:
.container {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
Настройка списка поддерживаемых браузеров обычно выносится в
browserslist.
PostCSS позволяет использовать будущие возможности CSS уже сейчас.
Плагины вроде postcss-preset-env включают поддержку:
Пример с вложенностью:
.card {
padding: 1rem;
& .title {
font-weight: bold;
}
}
PostCSS преобразует это в стандартный CSS без вложенности.
В проектах на Mithril чаще всего используется одна из систем сборки:
Типичная цепочка обработки стилей:
SCSS / Less
↓
PostCSS (Autoprefixer, preset-env)
↓
CSS
↓
Подключение в приложение
Пример конфигурации PostCSS:
export default {
plugins: [
require("postcss-preset-env")({
stage: 1
}),
require("autoprefixer")
]
};
Mithril не требует специальных настроек — стили подключаются через
обычные import.
Использование препроцессоров и PostCSS не влияет на рантайм-производительность Mithril-приложения. Вся обработка выполняется на этапе сборки.
Преимущества:
Минификация CSS обычно добавляется на этапе PostCSS или отдельным инструментом (cssnano).
Препроцессоры и PostCSS хорошо сочетаются с различными архитектурами:
Mithril не ограничивает выбор и позволяет использовать стили как часть независимого слоя, что особенно важно в больших приложениях и библиотеках компонентов.
Наиболее распространённая конфигурация в проектах на Mithril:
Такой подход обеспечивает читаемость, масштабируемость и независимость слоя представления от механики виртуального DOM Mithril.