This media is not supported in your browser
VIEW IN TELEGRAM
Инструмент, который вытаскивает всю информацию о веб-сайте.
✓ Находит проблемы безопасности
✓ Метрики оптимизации и качества
✓ DNS, TXT-записи, SSL, IP-информация и HTTP-заголовки
Ресурс бесплатный и реально полезный:
→ http://web-check.xyz
@WebDev_Plus
✓ Находит проблемы безопасности
✓ Метрики оптимизации и качества
✓ DNS, TXT-записи, SSL, IP-информация и HTTP-заголовки
Ресурс бесплатный и реально полезный:
→ http://web-check.xyz
@WebDev_Plus
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Быстрый совет по TanStack Router:
Вынеси состояние в URL через useSearch.
Страница сразу становится сохраняемой в закладки и удобной для шаринга.
@WebDev_Plus
Вынеси состояние в URL через useSearch.
Страница сразу становится сохраняемой в закладки и удобной для шаринга.
@WebDev_Plus
Сегодня на HackerNews взлетел проект MQuickJS
https://github.com/bellard/mquickjs
MQuickJS — это JavaScript-движок под встраиваемые системы, рассчитанный на ультра-скудные ресурсы. Он умеет компилировать и выполнять JS в условиях, где память на вес золота.
Память жрёт копейки: около 10 kB RAM для запуска, что прям впечатляет. Но есть нюанс — это не полный JS, а подмножество ES5, плюс всё время строгий режим.
@WebDev_Plus
https://github.com/bellard/mquickjs
MQuickJS — это JavaScript-движок под встраиваемые системы, рассчитанный на ультра-скудные ресурсы. Он умеет компилировать и выполнять JS в условиях, где память на вес золота.
Память жрёт копейки: около 10 kB RAM для запуска, что прям впечатляет. Но есть нюанс — это не полный JS, а подмножество ES5, плюс всё время строгий режим.
@WebDev_Plus
GitHub
GitHub - bellard/mquickjs: Public repository of the Micro QuickJS Javascript Engine
Public repository of the Micro QuickJS Javascript Engine - bellard/mquickjs
👍2❤1
Сколько бы видосов про server components ты ни смотрел, топовый демо до сих пор тот, который запилила core-команда
react:
https://github.com/reactjs/server-components-demo
Там нет вообще никакой интеграции с Next.js, поэтому можно нормально врубиться в сам Flight-протокол.
Очень чётко показана граница server «-» client.
Что тебе реально нужно, чтобы поэкспериментировать:
Если хочешь другой заход для обучения, вот сюда:
https://github.com/reactwg/server-components/discussions/5
Там инженеры из Meta спорили и проектировали RSC. Мне это очень зашло, потому что помогает понять, как принимались решения, а не только как оно работает.
Если после этого всё ещё чешутся руки реально поковырять код, да, я серьёзно, иди вот сюда:
https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
Там видно, как именно делается сериализация и как кодируются ссылки.
Пожалуйста, обходи стороной рандомные мусорные medium-посты в духе «разберись в RSC за 10 минут». И без этого базового понимания даже не начинай жаловаться, что RSC бесполезны. Мозг же есть, зайди, посиди, разберись.
И в конце уже сравни сам, что именно прячет next-модель от vercel по сравнению с тем, как это устроено у Meta.
@WebDev_Plus
react:
https://github.com/reactjs/server-components-demo
Там нет вообще никакой интеграции с Next.js, поэтому можно нормально врубиться в сам Flight-протокол.
Очень чётко показана граница server «-» client.
Что тебе реально нужно, чтобы поэкспериментировать:
react-server-dom-webpack, createFromFetch, папки Server и Client.Если хочешь другой заход для обучения, вот сюда:
https://github.com/reactwg/server-components/discussions/5
Там инженеры из Meta спорили и проектировали RSC. Мне это очень зашло, потому что помогает понять, как принимались решения, а не только как оно работает.
Если после этого всё ещё чешутся руки реально поковырять код, да, я серьёзно, иди вот сюда:
https://github.com/facebook/react/tree/main/packages/react-server-dom-webpack
Там видно, как именно делается сериализация и как кодируются ссылки.
Пожалуйста, обходи стороной рандомные мусорные medium-посты в духе «разберись в RSC за 10 минут». И без этого базового понимания даже не начинай жаловаться, что RSC бесполезны. Мозг же есть, зайди, посиди, разберись.
И в конце уже сравни сам, что именно прячет next-модель от vercel по сравнению с тем, как это устроено у Meta.
@WebDev_Plus
GitHub
GitHub - reactjs/server-components-demo: Demo app of React Server Components.
Demo app of React Server Components. Contribute to reactjs/server-components-demo development by creating an account on GitHub.
❤1
Входящие сообщения WhatsApp для Cloud API, созданного с помощью Next.js
https://github.com/gokapso/whatsapp-cloud-inbox/
@WebDev_Plus
https://github.com/gokapso/whatsapp-cloud-inbox/
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект снега для вашего веб-сайта с помощью CSS и JS.
https://codepen.io/jkantner/pen/MYeWWab
@WebDev_Plus
https://codepen.io/jkantner/pen/MYeWWab
@WebDev_Plus
🔥3
Оргструктуры, дерево файлов, турнирные сетки — всё на чистом CSS. Без canvas, без SVG, без JavaScript. Только flexbox и псевдоэлементы.
Разбираем по шагам. Начнём с базового дерева слева направо, где пару десятков строк CSS превращают вот это…(1 photo) во вот это…(2)
HTML — обычные вложенные списки:
Задача: превратить это в дерево с соединительными линиями.
Основная механика — flexbox. Каждый <li> становится flex-контейнером:
Дочерние элементы идут горизонтально, ноды остаются по центру по вертикали.
Первая линия: от родителя к дочерним элементам. Ставим её на <ul>, а не на родительский <li>:
Дальше: линии от каждого ребёнка обратно к родителю. Та же техника, но на <li>:
Проблема: корневой элемент тоже получает линию, хотя родителя у него нет. Чиним через селектор прямого потомка:
Самое тонкое место — вертикальные линии между соседями. Нужны разные высоты:
первый ребёнок — нижняя половина
последний — верхняя половина
все промежуточные — целая линия
Используем ::after:
78 строк CSS — и дерево готово.
Но это только горизонтальный вариант слева направо.
@WebDev_Plus
Разбираем по шагам. Начнём с базового дерева слева направо, где пару десятков строк CSS превращают вот это…(1 photo) во вот это…(2)
HTML — обычные вложенные списки:
<ul class="tree">
<li>
<span>1</span>
<ul>
<li><span>1.1</span></li>
<li><span>1.2</span></li>
</ul>
</li>
</ul>
Задача: превратить это в дерево с соединительными линиями.
Основная механика — flexbox. Каждый <li> становится flex-контейнером:
li {
display: flex;
flex-direction: row;
align-items: center;
}Дочерние элементы идут горизонтально, ноды остаются по центру по вертикали.
Первая линия: от родителя к дочерним элементам. Ставим её на <ul>, а не на родительский <li>:
ul::before {
content: "";
position: absolute;
left: 0;
top: 50%;
border-top: 1px solid;
width: 2vw;
}Дальше: линии от каждого ребёнка обратно к родителю. Та же техника, но на <li>:
li::before {
content: "";
position: absolute;
left: 0;
top: 50%;
border-top: 1px solid;
width: 2vw;
}Проблема: корневой элемент тоже получает линию, хотя родителя у него нет. Чиним через селектор прямого потомка:
.tree > li {
padding-left: 0;
&::before, &::after {
display: none;
}
}Самое тонкое место — вертикальные линии между соседями. Нужны разные высоты:
первый ребёнок — нижняя половина
последний — верхняя половина
все промежуточные — целая линия
Используем ::after:
li::after {
content: "";
position: absolute;
left: 0;
border-left: 1px solid;
}
li:first-of-type::after { height: 50%; bottom: 0; }
li:last-of-type::after { height: 50%; top: 0; }
li:not(:first-of-type):not(:last-of-type)::after {
height: 100%;
}78 строк CSS — и дерево готово.
Но это только горизонтальный вариант слева направо.
@WebDev_Plus
👍5
Обожаю профайлер в Chrome DevTools. Благодаря ему нашёл одну строку, из-за которой функция тупо работала намного медленнее, чем должна. Поменял её — стало в десять раз быстрее, ушло минуты две. Такие лёгкие перф-плюшки реально стоит собирать, окупается на раз.
@WebDev_Plus
@WebDev_Plus
❤5👍3👎1
This media is not supported in your browser
VIEW IN TELEGRAM
TIL про ListFormat.
Очень удобная и реально мощная штука в JavaScript для форматирования списков так, чтобы они выглядели как естественная человеческая речь.
@WebDev_Plus
Очень удобная и реально мощная штука в JavaScript для форматирования списков так, чтобы они выглядели как естественная человеческая речь.
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Знал про этот трюк в React?
Если стоят React DevTools, зажимаешь Ctrl + Shift и наводишь курсор на элемент — увидишь название компонента, которому он принадлежит. Удобно, когда быстро хочешь понять, что где рендерится.
@WebDev_Plus
Если стоят React DevTools, зажимаешь Ctrl + Shift и наводишь курсор на элемент — увидишь название компонента, которому он принадлежит. Удобно, когда быстро хочешь понять, что где рендерится.
@WebDev_Plus
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
На дворе 2026 год.
Для форматирования дат в JavaScript не нужна библиотека.
Просто используйте
@WebDev_Plus
Для форматирования дат в JavaScript не нужна библиотека.
Просто используйте
Intl@WebDev_Plus
Теперь можно запускать ретро-эмуляторы прямо в браузере 🎮
JS-библиотека, которая позволяет играть в старые консольные игры без установки софта. Просто подгружаешь ROM, и эмулятор стартует прямо в браузере на современных Web API.
Исходники на GitHub: arianrhodsandlot/nostalgist
@WebDev_Plus
JS-библиотека, которая позволяет играть в старые консольные игры без установки софта. Просто подгружаешь ROM, и эмулятор стартует прямо в браузере на современных Web API.
Исходники на GitHub: arianrhodsandlot/nostalgist
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Это, пожалуй, самый удобный способ поставить Node
Инструмент называется fnm (Fast Node Manager)
✓ Позволяет держать несколько версий Node параллельно
✓ Быстрый, написан на Rust
✓ Ставится в один командный шаг
✓ Работает на Windows, macOS и Linux
→ http://github.com/Schniz/fnm
@WebDev_Plus
Инструмент называется fnm (Fast Node Manager)
✓ Позволяет держать несколько версий Node параллельно
✓ Быстрый, написан на Rust
✓ Ставится в один командный шаг
✓ Работает на Windows, macOS и Linux
→ http://github.com/Schniz/fnm
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Складывание карт с помощью CSS Scroll-Timeline, без JavaScript
https://codepen.io/karabharat/full/YPWXqmx
@WebDev_Plus
https://codepen.io/karabharat/full/YPWXqmx
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Асинхронное ожидание на разделяемой памяти без блокировки основного потока → [https://goo.gle/49q5wq5]
@WebDev_Plus
Atomics.waitAsync() теперь доступен в Baseline (Newly Available) и позволяет делать неблокирующую синхронизацию потоков для более плавной производительности.@WebDev_Plus
❤1
Перестаньте использовать
Самые заметные проблемы у
* Нужно зажимать Ctrl/Cmd для выбора сразу нескольких (немногие вообще знают об этом)
* Маленькое окно, плохо сканируется взглядом
* Один неправильный клик и можно снять все выделения
* Внешний вид сильно зависит от ОС
* Стилизовать почти нереально
Гораздо понятнее использовать
* Интеракция очевидна (галка = выбрано)
* Все варианты сразу видны и легко сравнимы
* Случайно убрать выбор сложнее
* Стилизуется как угодно
* Отличная доступность для скринридеров
На бэкенде вы получаете массив значений, так же как и с
Например, в Rails это будет примерно так:
По обработке данных ничего не меняется. Меняется только UX — и в лучшую сторону.
А поскольку это чекбоксы, стилизовать можно как угодно:
* чипсы/теги
* карточки
* тумблеры
* любые кастомные варианты под дизайн
Попробуйте сделать что-то подобное с
В следующий раз, когда потянетесь к
Используйте
@WebDev_Plus
<select multiple> для выбора нескольких значений. Это худший контрол в HTML для таких задач. К счастью, есть паттерн получше и он вовсе не странный.Самые заметные проблемы у
<select multiple>:* Нужно зажимать Ctrl/Cmd для выбора сразу нескольких (немногие вообще знают об этом)
* Маленькое окно, плохо сканируется взглядом
* Один неправильный клик и можно снять все выделения
* Внешний вид сильно зависит от ОС
* Стилизовать почти нереально
Гораздо понятнее использовать
<fieldset> с чекбоксами:* Интеракция очевидна (галка = выбрано)
* Все варианты сразу видны и легко сравнимы
* Случайно убрать выбор сложнее
* Стилизуется как угодно
* Отличная доступность для скринридеров
<fieldset>
<legend>Выберите интересы</legend>
<label>
<input type="checkbox" name="interests" value="css">
CSS
</label>
<label>
<input type="checkbox" name="interests" value="html">
HTML
</label>
<!-- ... -->
</fieldset>
На бэкенде вы получаете массив значений, так же как и с
<select multiple>.Например, в Rails это будет примерно так:
{ interests: ["css", "html"] }По обработке данных ничего не меняется. Меняется только UX — и в лучшую сторону.
А поскольку это чекбоксы, стилизовать можно как угодно:
* чипсы/теги
* карточки
* тумблеры
* любые кастомные варианты под дизайн
Попробуйте сделать что-то подобное с
<select multiple>.В следующий раз, когда потянетесь к
<select multiple>, остановитесь.Используйте
fieldset + checkboxes. Пользователям будет проще@WebDev_Plus
Хватит использовать библиотеки для рейтингов. Я сделал компонент звездочного рейтинга только на CSS с поддержкой половинок звезд всего в 60 строк. Без JavaScript. Полностью доступный. С плавным hover.
Я посмотрел существующие pure-CSS решения и почти везде одни и те же проблемы.
Либо нет поддержки половинок, либо завязка на FontAwesome, либо дерганый и нестабильный hover.
В итоге я сделал свое решение, используя только radio input’ы, label’ы и SVG-маски.
Ключевая идея упирается в ограничение CSS:
он умеет выбирать только элементы, идущие после текущего (через ~).
А в рейтинге звезд нужно подсвечивать звезды до той, на которую навели курсор.
Решение простое: переворачиваем DOM и визуально отражаем его через
Порядок в DOM: 5★ → 0.5★
Визуальный порядок: 0.5★ → 5★
Теперь
Для половинок я разделил каждую звезду на два
Каждый label использует SVG-маску половинки звезды.
Почему маска, а не
У background-image нельзя динамически менять цвет заливки SVG.
А mask работает как трафарет — сквозь него просто просвечивает
В итоге hover — это просто смена цвета.
Простые селекторы. Никаких JS-обработчиков.
Отступы между звездами ломают UX hover’а — появляются «мертвые зоны», где ничего не подсвечивается.
Фикс такой: расширяем ширину label, но оставляем
Зазор виден визуально, но зона hover остается непрерывной.
Radio-кнопки визуально скрыты, но остаются в DOM.
Скринридеры видят:
* нормальные radio input’ы
* label’ы с aria-label вроде
* полноценную навигацию с клавиатуры
CSS-only — это не компромисс по доступности.
@WebDev_Plus
Я посмотрел существующие pure-CSS решения и почти везде одни и те же проблемы.
Либо нет поддержки половинок, либо завязка на FontAwesome, либо дерганый и нестабильный hover.
В итоге я сделал свое решение, используя только radio input’ы, label’ы и SVG-маски.
Ключевая идея упирается в ограничение CSS:
он умеет выбирать только элементы, идущие после текущего (через ~).
А в рейтинге звезд нужно подсвечивать звезды до той, на которую навели курсор.
Решение простое: переворачиваем DOM и визуально отражаем его через
flex-direction: row-reverse..star-rating {
display: inline-flex;
flex-direction: row-reverse;
justify-content: flex-end;
}Порядок в DOM: 5★ → 0.5★
Визуальный порядок: 0.5★ → 5★
Теперь
~ выбирает визуально предыдущие звезды.Для половинок я разделил каждую звезду на два
<label> — левую и правую половину.Каждый label использует SVG-маску половинки звезды.
nth-of-type(odd) — правая половинаnth-of-type(even) — левая половинаПочему маска, а не
background-image?У background-image нельзя динамически менять цвет заливки SVG.
А mask работает как трафарет — сквозь него просто просвечивает
background-color.В итоге hover — это просто смена цвета.
/* Подсветка при наведении */
label:hover,
label:hover ~ label {
background-color: goldenrod;
}
/* Подсветка выбранного */
input:checked ~ label {
background-color: gold;
}
Простые селекторы. Никаких JS-обработчиков.
Отступы между звездами ломают UX hover’а — появляются «мертвые зоны», где ничего не подсвечивается.
Фикс такой: расширяем ширину label, но оставляем
mask-size прежним.Зазор виден визуально, но зона hover остается непрерывной.
Radio-кнопки визуально скрыты, но остаются в DOM.
Скринридеры видят:
* нормальные radio input’ы
* label’ы с aria-label вроде
3 1/2 stars* полноценную навигацию с клавиатуры
CSS-only — это не компромисс по доступности.
@WebDev_Plus
1👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Создавайте красивые карты для вашего сайта или приложения.
Бесплатно, без настроек и с помощью одной команды:
→ http://github.com/AnmolSaini16/mapcn
@WebDev_Plus
Бесплатно, без настроек и с помощью одной команды:
→ http://github.com/AnmolSaini16/mapcn
@WebDev_Plus