Fresh — это современный фреймворк для разработки
веб-приложений, построенный на Deno и ориентированный
на минимализм и высокую производительность. В основе его философии лежит
zero-runtime JavaScript на клиенте: большинство логики
выполняется на сервере, а клиент получает уже готовый HTML с
динамическими компонентами. Это кардинально отличается от подходов React
или Vue, где значительная часть работы выполняется в браузере.
Приложение на Fresh строится вокруг страниц,
компонентов и обработчиков запросов. Основные элементы:
routes/. Каждый файл соответствует конкретному
URL.Fresh использует islands architecture:
интерактивные участки страницы (islands) выделяются в отдельные
компоненты с минимальным JavaScript на клиенте.
Модульные стили в Fresh позволяют изолировать
CSS на уровне компонентов, предотвращая конфликты селекторов.
Основные принципы:
Создание CSS-модулей Каждый компонент может
иметь собственный CSS-файл с расширением .module.css.
Например:
/* button.module.css */
.primary {
background-color: #0070f3;
color: white;
padding: 0.5rem 1rem;
border-radius: 4px;
border: none;
cursor: pointer;
}
Использование классов ограничивается конкретным компонентом.
Импорт CSS-модуля в компонент Импорт выполняется напрямую в файл компонента:
import styles from "./button.module.css";
export default function Button({ label }) {
return <button class={styles.primary}>{label}</button>;
}
При этом Fresh автоматически генерирует уникальные
классы для предотвращения пересечений с другими компонентами.
Динамическое применение стилей Классы можно комбинировать с помощью шаблонных литералов или вспомогательных библиотек:
import styles from "./button.module.css";
export default function Button({ label, disabled }) {
return (
<button class={`${styles.primary} ${disabled ? styles.disabled : ""}`}>
{label}
</button>
);
}В дополнение к модульным стилям можно использовать глобальные
CSS-файлы, которые подключаются один раз на уровне всего
приложения. Рекомендуется хранить их в папке static/ и
подключать через <link> в шаблоне
_app.tsx.
<link rel="stylesheet" href="/styles/global.css" />
Глобальные стили удобно использовать для типографики, сеток и общих утилитарных классов, в то время как модульные стили предназначены для локальной изоляции компонентов.
Fresh автоматически
удаляет неиспользуемые стили при сборке..module.css можно подключать стили с типизацией для
автокомплита и проверки типов.Fresh позволяет сочетать модульные CSS с
утилитарными библиотеками, такими как Tailwind CSS:
import styles from "./card.module.css";
export default function Card({ title, content }) {
return (
<div class={`p-4 rounded shadow ${styles.card}`}>
<h2 class="text-xl font-bold">{title}</h2>
<p>{content}</p>
</div>
);
}
Модульные стили применяются для уникальных деталей компонента, а Tailwind обеспечивает быструю настройку базовой визуальной структуры.
Модульные стили в Fresh позволяют добиться
чистой архитектуры CSS, сокращают вероятность
конфликтов и делают разработку компонентов более предсказуемой и
управляемой.