Библиотека фронтендера | Frontend, JS, JavaScript, React.js, Angular.js, Vue.js
21K subscribers
3.66K photos
338 videos
86 files
5.94K links
Все самое полезное для фронтенда в одном канале.

Наши курсы: https://clc.to/WV2U4g

По рекламе: @proglib_adv

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5b6884689c2151c820bb4
Download Telegram
📖 Под капотом браузера: баги гидрации

SR и гидрация обещают быстрый рендер, но на деле фронтендеры часто сталкиваются с расхождениями между сервером и клиентом.

➡️ В карточках — разберём, как работает процесс, где появляются баги и как их избежать.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#under_hood
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64🥰3
This media is not supported in your browser
VIEW IN TELEGRAM
😧 Совет по HTML: как разом отключить сразу несколько полей формы

Достаточно добавить атрибут disabled к тегу `<fieldset>` — и все элементы формы внутри него станут неактивными автоматически, без необходимости прописывать это для каждого по отдельности.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#readme
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2🥰2
🤔 Вопрос с собеседования

Что произойдёт с состоянием компонента, если изменить его key?


<UserForm key={userId} userId={userId} />


Допустим, userId меняется с 42 на 43.

❤️ — состояние сохранится, изменятся только props
🔥 — React пересоздаст компонент, и state сбросится
👍 — state сбросится только при использовании React.memo

👇 Правильный ответ (нажми, чтобы прочитать):

React связывает состояние с позицией компонента в дереве. key позволяет дополнительно указать его идентичность. Когда key меняется, React воспринимает элемент как другой компонент и создаёт его заново — поэтому локальный state сбрасывается.

И да: key нужен не только для списков. Его можно намеренно использовать, например, чтобы очистить форму при переключении на другого пользователя.


💼 Щелкаешь такие задачи как орешки? Найди проект с достойной зарплатой тут

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#career_merge
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥323👍2🥰1
35 млн точек в браузере — и около 72 FPS

ChartGPU — библиотека для визуализации больших датасетов через WebGPU вместо Canvas2D или WebGL.

⬇️Поддерживает стриминг данных,
⬇️несколько графиковна одном
⬇️GPUDevice, GPU-decimation и
⬇️даже 3D-серии. Авторы
⬇️показывают бенчмарк с 35
⬇️млн точек примерно при 72
⬇️FPS.

Особенно интересно для дашбордов, мониторинга, финтеха и observability-интерфейсов, где обычный Canvas уже становится узким местом.

❗️ Но есть важное ограничение: fallback на Canvas/WebGL нет, поэтому поддержку WebGPU нужно проверять отдельно.

🔗 Ссылка на GitHub

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#stack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🥰2
🎯 Interest Invoker API — тултипы без единой строчки JS

Раньше, чтобы показать поповер по ховеру, нужен был JavaScript. Теперь — достаточно HTML.

➡️ Как работает:

interesttarget связывает элемент-триггер и поповер. Браузер сам обрабатывает hover, focus или long-press и показывает подсказку.

Можно совмещать с Popover API и Anchor Positioning для точного позиционирования.

⚠️ Поддержка:

Пока экспериментальная — работает в Chromium-браузерах (Chrome 135+, Edge 135+). В Firefox и Safari API ещё не реализован, поэтому стоит использовать фолбэк или JS-вариант для совместимости.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#readme #html
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3🔥1🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
💬 Закрепляем скролл чата внизу без JavaScript

С помощью overflow-anchor можно обойтись без MutationObserver и scrollTo():


<div id="scroller">
...
<div id="anchor"></div>
</div>



#scroller * { overflow-anchor: none; }
#anchor { overflow-anchor: auto; height: 1px; }


Отключаем scroll anchoring для содержимого и оставляем его только на элементе в конце списка. Браузер использует его как якорь и удерживает скролл у нового контента.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#readme
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥰2🌚2
📐 Делаем fluid-значения в CSS предсказуемыми

clamp() отлично подходит для адаптивных размеров, но результат может быть вроде 19.7px или 143.2px.

Функция round() позволяет привязать вычисленное значение к нужному шагу:


.title {
--size: clamp(1rem, 1rem + 2cqw, 2rem);
font-size: round(down, var(--size), 4px);
}


Теперь размер будет двигаться по шагам: 16px → 20px → 24px → 28px → 32px. Можно использовать up, down, nearest или to-zero.

Особенно полезно для типографики, spacing и привязки элементов к layout grid.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#readme #css
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2🔥2🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
🦊 Firefox 154: новые возможности CSS

🈶 sibling-index() и sibling-count() — позволяют получить позицию элемента среди соседей и их общее количество. Удобно, например, для динамических эффектов и декоративных раскладок.

🈶 text-box — сокращённый способ управления вертикальными отступами текста через text-box-trim и text-box-edge. Особенно полезно для точного выравнивания текста.

Теперь обе возможности доступны во всех основных браузерах.

А в экспериментальном режиме Firefox 154 также получил progress() — ещё один интересный шаг в сторону более гибной fluid-типографики.

🔗 Источник

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#release_digest
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63🥰1🎉1
🔥 — 1 2 3
❤️ — undefined undefined undefined
🥰 — 3 3 3
🤔 — 0 1 2

🐸 Библиотека фронтендера

#code_challenge #js
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰7119🔥4🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 Управляйте localhost-портами без лишнего lsof

Port-Whisperer — CLI для тех случаев, когда на 3000, 5173 или другом порту внезапно уже что-то запущено.

🤩 показывает занятые порты
🤩 определяет процессы и приложения
🤩 помогает завершать ненужные процессы
🤩 умеет мониторить порты в реальном времени

Полезная утилита для локальной разработки, особенно когда одновременно работают несколько проектов.

👩‍💻 GitHub

🐸 Библиотека фронтендера

#stack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🥰3🔥1🥱1
✏️ OTP-инпут, который вы усложняли зря

Разделённые поля, кастомные маски, десятки строк JS и ещё одна зависимость в бандле — всё это часто делают ради обычного одноразового кода.

ℹ️ Этот гайд показывает корректный, доступный и удобный OTP-инпут можно сделать на одном <input> — по стандартам, с автозаполнением и без фреймворков.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#read_watch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🥰3
⚡️ Контроль целевых браузеров сборки

Если приложение «работает у вас», это не показатель. Важно понимать, под какие версии браузеров фактически собирается билд.


npx browserslist


Команда выводит реальный список целевых браузеров на основе .browserslistrc или package.json.

Это напрямую влияет на:

— транспиляцию через @babel/preset-env
— CSS-префиксы (Autoprefixer)
— подключение polyfills
— размер bundle

Без проверки вы либо раздуваете сборку, либо теряете совместимость. Browserslist — инструмент контроля, а не просто CLI-утилита.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#readme
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥰3😁2
This media is not supported in your browser
VIEW IN TELEGRAM
🫧 Gooey-эффекты для React без мыла на тексте

liquid-gooey превращает обычные React-компоненты в «жидкие» интерфейсы: элементы могут сливаться, тянуться друг за другом и плавно менять форму.

🤩 Morph — объединяет элементы в gooey-массу
🤩 Move — создаёт жидкий след за движущимся элементом
🤩 Dissolve — позволяет изображениям «растворяться» при контакте

Эффект применяется к отдельному SVG-слою, а настоящий DOM остаётся сверху. Поэтому текст, иконки, фокус и интерактивность не страдают от blur-фильтров.


npm install liquid-gooey



<Liquid blur={6} contrast={18}>
<Liquid.Item x={open ? -54 : 0} y={open ? -34 : 0}>
<button>Menu</button>
</Liquid.Item>
</Liquid>


Есть поддержка Safari, prefers-reduced-motion, CSS-темизации и MIT-лицензия.

🔗 Полезно, если делаете нестандартные UI, интерактивные меню, табы или микровзаимодействия.

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#stack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥64👏2🥰1
⭐️ Как JavaScript исполняется под капотом V8

Вы пишите let x = 1 + 2, а под капотом V8 уже строит синтаксическое дерево, генерирует байт-код и думает, стоит ли компилировать это в машинный код.

Что в карточках:

— Как V8 парсит и интерпретирует код
— Что делает TurboFan и зачем нужен байт-код
— Как работает сборка мусора
— И почему порядок добавления свойств в объект — это не мелочь
Если хотите писать реально быстрый JS, нужно понимать, как его читает движок.

🔗 Читать статью

📍 Навигация: [Вакансии]

🐸 Библиотека фронтендера

#under_hood
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2🥰2