F
Frontend Головного Мозга
28.05.2026 15:08 · 👁 1.3K
TanStack Form: новый стандарт для работы с формами в JS
Все знают TanStack Query (бывший React Query), который перевернул работу с запросами. Теперь команда разработчиков выпустила TanStack Form - библиотеку для управления формами, которая решает старые боли фронтендеров.
Главные фишки:
🟢Агностицизм: работает не только с React, но и с Vue, Angular, Solid, Svelte и даже Vanilla JS.
🟢100% Type-Safe: глубокая интеграция с TypeScript. Ошибки в названиях полей или типах данных подсвечиваются прямо при написании кода.
🟢Валидация без привязки: можно использовать любую привычную библиотеку (Zod, Valibot, Yup) или писать кастомные функции.
🟢Производительность: библиотека обновляет состояние точечно, поэтому даже огромные формы с сотнями полей не будут тормозить интерфейс.
Если вам надоело мучиться с настройкой сложных форм, TanStack Form - отличный кандидат на замену старым инструментам.
👉
@frontend_mind
F
Frontend Головного Мозга
11.05.2026 10:14 · 👁 1.4K
«Летающий» фокус на View Transitions API
Анимация перемещения фокуса между элементами (focus ring) делает интерфейс «живее» и помогает пользователю не терять активный элемент при навигации с клавиатуры. Раньше для этого высчитывали координаты через getBoundingClientRect, теперь всё делает браузер.
Вместо анимации самой кнопки мы анимируем только рамку фокуса. Для этого каждому интерактивному элементу добавляется вспомогательный .
1️⃣ CSS: Рамка фокуса получает уникальное view-transition-name только в тот момент, когда родительский элемент находится в состоянии :focus-visible.
2️⃣ JS: Переключаем фокус программно внутри startViewTransition. Браузер увидит, что элемент с именем focus-ring переместился и изменил размер, и сам создаст плавный переход.
👉
@frontend_mind
F
Frontend Головного Мозга
18.03.2026 19:39 · 👁 1.8K
CSS-анимация на примере аналоговых часов
Классический разбор того, как знание спецификации заменяет скрипты. Автор воссоздал реалистичные часы, используя только возможности CSS3.
Адаптивность через em: Один font-size родителя масштабирует все часы пропорционально (включая тени и засечки).
Реалистичный хром: Многослойные box-shadow (внешние и inset) создают объем и металлический блеск без картинок.
Вложенные transform: rotate(): Умная расстановка минутных делений по кругу с помощью всего нескольких тегов .
Тиканье стрелки: Анимация с animation-timing-function: steps(60) вместо плавного вращения.
Понимание вложенных трансформаций и оптимизации рендеринга помогает делать производительные UI-анимации, не нагружая Main Thread.
📖 Детали реализации на Хабре: https://habr.com/ru/articles/171015/
👉
@frontend_mind
F
Frontend Головного Мозга
27.01.2026 10:47 · 👁 2K
Find the stray number
Вам дан массив целых чисел нечетной длины, все из которых одинаковы, за исключением одного единственного числа. Завершите метод, который принимает такой массив и возвращает это единственное число.
Входной массив всегда будет верным! (нечетная длина >= 3)
Примеры:
[1, 1, 2] ==> 2
[17, 17, 3, 17, 17, 17, 17] ==> 3
👉
@frontend_mind
F
Frontend Головного Мозга
25.01.2026 22:53 · 👁 1.4K
Программирование в алгоритмах
Искусство программирования представлено в виде учебного курса, раскрывающего секреты наиболее популярных алгоритмов. Освещены такие вопросы, как комбинаторные алгоритмы, перебор, алгоритмы на графах, алгоритмы вычислительной геометрии. Приводятся избранные олимпиадные задачи по программированию с указаниями к решению.
👉
@frontend_mind
F
Frontend Головного Мозга
25.01.2026 22:52 · 👁 1K
@frontend_mind
F
Frontend Головного Мозга
09.01.2026 11:58 · 👁 1.5K
Как реализовать перегрузку функции в TypeScript?
TypeScript поддерживает перегрузку функций, но её реализация отличается от той, которую можно видеть в других языках. А именно, описывается лишь одна функция и некоторое количество её объявлений с разными параметрами. Когда такой код компилируется в JavaScript, в нём остаётся лишь одна функция. Этот механизм работает благодаря тому, что JS-функции можно вызывать с любым количеством параметров.
class Foo {
myMethod(a: string);
myMethod(a: number);
myMethod(a: number, b: string);
myMethod(a: any, b ? : string) {
alert(a.toString());
}
}
👉
@frontend_mind
F
Frontend Головного Мозга
11.12.2025 01:52 · 👁 1.5K
@frontend_mind
F
Frontend Головного Мозга
05.12.2025 20:14 · 👁 1.6K
Story Points или искусство делать ставку на выдуманные числа
Сегодня я хотел бы в очередной раз поднять тему оценки задач, а конкретно оценки при помощи Story Points. Хотя мы давно применяем их в работе, оказалось, что команда по-разному трактует детали. Поэтому мы решили систематизировать и выровнять наши знания, собрать хорошие практики по работе со Story Points и попробовать улучшить процедуру оценки задач у нас.
Результатом работы стал этот материал, которым я с радостью делюсь с вами. Он не претендует на откровения, но удобно собирает терминологию, практические советы и наш опыт — возможно, это сэкономит вам пару-тройку Story Points.
👉
@frontend_mind
F
Frontend Головного Мозга
04.12.2025 14:18 · 👁 1.1K
CSS cвойство margin
Margin задаёт внешние отступы вокруг элемента. Эти отступы не являются частью ширины/высоты элемента при любом значении box-sizing.
Схлопывание
Вертикальные отступы схлопываются друг с другом, горизонтальные – нет. То-есть, если два расположить в колонку (один под другим) и задать каждому margin: 20px 0, то расстояние между ними будет равняться 20px, а не 40px. При этом, если бы у верхнего элемента был задан отступ в 40px, а у нижнего - в 30px, то автоматически выбрался бы больший из них - 40px. Горизонтальные отступы при этом не схлопываются, а суммируются.
Отрицательные значения
Отрицательные значения margin-top/margin-left смещают элемент со своего обычного места.
В CSS есть другой способ добиться похожего эффекта – а именно position:relative. Но между ними есть одно принципиальное различие: при сдвиге через margin соседние элементы занимают освободившееся пространство в отличие от position: relative, при котором элемент визуально сдвигается, но место, где он был, остаётся «занятым».
👉
@frontend_mind