Hyperapp предоставляет минималистичный, но мощный подход к созданию пользовательских интерфейсов. Важной частью разработки является стилизация компонентов, позволяющая управлять визуальным представлением приложения без сложных абстракций.
Самый простой способ задать стиль элементу — использовать объект
style внутри виртуального DOM. Значения свойств задаются в
формате camelCase:
const view = () => h("div", {
style: {
backgroundColor: "lightblue",
padding: "20px",
borderRadius: "8px"
}
}, "Пример инлайнового стиля");
Особенности инлайновых стилей:
background-color →
backgroundColor).Для более структурированной стилизации Hyperapp позволяет
использовать атрибут class:
const view = () => h("button", {
class: "btn-primary"
}, "Нажми меня");
Классы подключаются стандартными способами через CSS-файлы:
.btn-primary {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
}
.btn-primary:hover {
background-color: #0056b3;
}
Преимущества классов:
Hyperapp позволяет изменять стиль компонентов в зависимости от
состояния (state). Для этого используют функции,
возвращающие объекты стилей или строковые классы:
const view = (state) => h("div", {
style: {
color: state.isActive ? "green" : "red",
fontWeight: state.isActive ? "bold" : "normal"
}
}, "Статус элемента");
Или с классами:
const view = (state) => h("div", {
class: state.isActive ? "active" : "inactive"
}, "Статус элемента");
Такой подход облегчает реализацию интерактивных элементов и визуальных состояний.
В Hyperapp можно применять подход CSS-in-JS, создавая стили прямо в
JavaScript и присваивая их элементам через style или
динамические классы. Пример с генерацией уникальных классов:
const generateClass = (color) => `dynamic-${color.replace('#','')}`;
const view = (state) => {
const className = generateClass(state.color);
return h("div", { class: className }, "Цветовой блок");
};
Параллельно можно создать CSS-файл с шаблоном для динамических классов:
.dynamic-ff0000 { background-color: #ff0000; }
.dynamic-00ff00 { background-color: #00ff00; }
Это позволяет комбинировать преимущества CSS и JavaScript, создавая динамическую и расширяемую стилизацию.
В Hyperapp компоненты — это функции, возвращающие виртуальные DOM-элементы. Стилизация вложенных компонентов может осуществляться через пропсы:
const Button = ({ label, style }) => h("button", { style }, label);
const view = () => h("div", {}, [
Button({ label: "Синий", style: { backgroundColor: "blue", color: "white" } }),
Button({ label: "Красный", style: { backgroundColor: "red", color: "white" } })
]);
Такой подход обеспечивает переиспользуемость компонентов и позволяет легко менять их внешний вид без модификации внутренней логики.
Hyperapp не имеет встроенной системы анимаций, но поддерживает
интеграцию с CSS-анимациями и библиотеками типа anime.js
или GSAP. Пример с CSS-переходами:
const view = (state) => h("div", {
class: "box",
style: {
transform: `translateX(${state.offset}px)`,
transition: "transform 0.3s ease"
}
}, "Перемещаемый блок");
При изменении state.offset блок плавно сдвигается,
используя CSS-переходы.
Стилизация в Hyperapp строится на простоте и гибкости, позволяя комбинировать традиционные CSS-подходы с реактивной природой фреймворка. Такой подход обеспечивает чистый и поддерживаемый код, даже в масштабных приложениях.