Логово верстальщика
7.97K subscribers
1.16K photos
67 videos
4 files
2.01K links
Логово верстальщиков: HTML, CSS, JavaScript, практики современной верстки, вайбкодинг и использование ИИ в разработке.

Личный блог автора - @just_genych
По вопросам рекламы или разработки: @g_abashkin
Download Telegram
ФП-жаргон: теперь это не список, а карта
Каррирование, чистота, функторы, монады — если эти термины свистят мимо тебя, у Hemanth HM, делегата TC39, припасён популярный справочник по жаргону функционального программирования. И вот он дорос до исследовательской карты концепций: видно, чем одно цепляется за другое, а рядом с каждой — простое определение и пример на JavaScript.

В JavaScript Weekly #802 от 15 сентября 2026 года прицепом идут другие заметки: атакующие прощупывают открытые Vite dev-серверы, вынюхивая обход server.fs.deny (залатано в Vite 7.3.2 и 8.0.5), npm вешает на аккаунт 72-часовой «security hold» после удачного входа по recovery-коду, Safari 27 уже вышел, а TC39 через две недели сядёт в Токио. Плюс к этому: Tailwind Labs присоединяется к Shopify.

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
⁣CSS :user-invalid и :user-valid: отложенная валидация без JS и без мигания ошибок

Классическая боль любой формы: input:invalid срабатывает сразу при рендере. Пользователь ещё ничего не вводил, а поле уже красное. Дальше - три костыля на выбор: :not(:placeholder-shown), класс .touched из JS или novalidate + ручная валидация.

Селекторы уровня 4 закрывают это нативно.

Как это работает

:user-invalid матчится, только если элемент одновременно:

1. кандидат на constraint validation и сейчас невалиден,
2. был «изменён пользователем» (user interacted).

Второй пункт - ключевой. По HTML-спеке флаг выставляется, когда пользователь изменил значение или попытался отправить форму. То есть до первого реального действия с полем оно остаётся нейтральным, а после сабмита все проблемные поля подсвечиваются разом - именно тот UX, к которому мы руками приходили через JS.

:user-valid - зеркало: валидно и было взаимодействие. Полезно, чтобы не красить зелёным пустые нетронутые поля.

Код

/* Плохо: красное с первого кадра рендера */
input:invalid { border-color: #e5484d; }

/* Ок: ошибка - только после взаимодействия */
input:user-invalid { border-color: #e5484d; }
input:user-valid { border-color: #30a46c; }

/* сообщение без JS: заранее в разметке, показ через CSS */
.field .msg { visibility: hidden; }
.field:has(:user-invalid) .msg { visibility: visible; }
.field:has(:user-invalid) .msg::before { content: attr(data-msg); }


<div class="field">
<input type="email" required>
<span class="msg" data-msg="Похоже, в адресе опечатка"></span>
</div>


Работает с input, select, textarea, любым типом и любым ограничением: required, pattern, minlength, type="email". Реагирует и на «ввёл - стёр», и на попытку сабмита.

Подводные камни

* Поддержка - Baseline с конца 2023 (Chrome 119+, Firefox 88+, Safari 16.5+). Для более старых - тот же селектор в :where()-фолбэке или @supports selector(:user-invalid).
* Blur сам по себе флаг не ставит. Если нужно «валидировать по потере фокуса, даже если значение не менялось» - это по-прежнему JS. Но в 95% форм такое поведение и не нужно.
* required никуда не делся. :user-invalid меняет момент показа, а не правила валидации.
* A11y не бесплатно. Псевдоклассы не выставляют aria-invalid - скринридер про ошибку не узнает. Либо дублируйте состояние атрибутом, либо полагайтесь на нативную браузерную валидацию при сабмите.
* Не стилизуйте :invalid вообще в формах с ранним показом - иначе правила конфликтуют и «мигание» возвращается.

Итого

:user-invalid убирает целый слой JS-состояния: флаг «тронуто/не тронуто» больше не нужно тащить в классы и стейт-менеджер. Разметка описывает намерение, CSS - момент показа. Классический кейс, где платформа догнала практику.
❤1👍1
Игнорите эти HTML-элементы — и зря

Про семантическую вёрстку этот человек талдычит уже лет десять. Но в последнее время — молчок, ни строчки по теме. И вот решил наконец закрыть этот должок.

В нынешних веб-интерфейсах ему постоянно попадается один и тот же джентльменский набор: header, main, nav, footer. Бывает, что и button затешется — правда, пореже остальных, но всё-таки.

А сегодня он разберёт ещё парочку элементов, которые по какой-то причине почти никто не трогает. Хотя с ними вёрстка выйдет ещё семантичнее — а значит, и интерфейсы станут ещё лучше. Читать далее

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Кроссбраузерные баги: какого чёрта они всё ещё живы

Запустил фичу — и привет. Бэкендер со своим Firefox заявляет, что у него «ничего не работает». Или юзер с Safari ноет, что ему неудобно. Да и ладно: лезу в поиск, выкапываю причину, затыкаю баг — и дальше пилю в Chrome, как будто так и надо.

В статье разбираемся, с чего это в 2026-м проблемы кроссбраузерности никуда не делись, и пытаемся въехать, как ловить эти ошибки ещё до того, как они вылезут.

Читать далее

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
🦾 Нашли бесплатный опенсорсный инструмент для поиска вакансий

JobSync сам мониторит вакансии компаний на разных площадках, ИИ сравнивает их с вашим резюме и вытаскивает наиболее подходящие. Внутри ещё есть трекер откликов, разбор резюме, генерация сопроводительных и статистика поиска работы — короче, полный фарш.

Всё бесплатно, опенсорс.

✖️ xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
⁣content-visibility: auto: рендер-виртуализация без JS

Браузер по умолчанию считает layout и paint для всей страницы, даже если 80% контента за фолдом. content-visibility: auto говорит: пока элемент не «релевантен пользователю», пропускай style/layout/paint его поддерева. DOM, a11y-дерево и поиск по странице при этом работают - в отличие от content-visibility: hidden.

Но есть цена: у пропущенного элемента нет внутреннего размера, и его block-size схлопывается. Скроллбар прыгает, scrollHeight врёт, anchor-ссылки и scroll-restore уезжают.

Лечится contain-intrinsic-size - placeholder-размер, который подставляется вместо настоящего, пока секция не отрендерена:

.feed > article {
content-visibility: auto;
/* 420px - оценка; после первого рендера запомнится реальная высота */
contain-intrinsic-size: auto 420px;
}


Ключевое слово здесь - auto. Без него placeholder всегда будет тем, что вы написали. С ним браузер запоминает последний отрендеренный размер и дальше использует его как placeholder - при повторном выезде элемента скролл уже не дёргается. Поэтому оценку берите близкой к реальности: от неё зависит длина скроллбара и позиция скролла до первого рендера.

Нужны две оси - используйте две величины (width height) или логические contain-intrinsic-block-size / contain-intrinsic-inline-size.

Где ломается

1. content-visibility: auto неявно включает contain: layout style paint. Элемент становится containing block для absolute/fixed потомков, а overflow обрезается. position: fixed внутри секции перестаёт цепляться к вьюпорту, sticky ведёт себя иначе, выносы отрицательными margin обрезаются.
👍1
🤣 Типичный ИИ

💥 xCode Journal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
This media is not supported in your browser
VIEW IN TELEGRAM
«ИИ-агенты закроют до половины текущих операционных процессов» — такую цель обозначил Станислав Макеев, директор по технологиям и AI-трансформации Яндекс Лавки, на недавнем deep tech night.

По его словам, Лавка уже перекраивает процессы под то, чтобы решения в бизнесе принимал ИИ.

Скажем, в коммерции агент будет разбирать спрос, возиться с ассортиментом, искать поставщиков и готовить предложения. А человеку оставят самое ответственное — сложные переговоры. Правда, это пока хотелки: на текущий момент агент просто клепает управленцу короткие бизнес-справки с рекомендациями по действиям.

Хотя кое-что уже автоматизировали. Поиск потерявшихся посылок раньше вручную разгребал десяток человек на фуллтайме. Теперь этим занимается агент. Будущее, блин, уже тут 😨

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Claude Code наконец-то завёз поддержку AGENTS.md

Никаких допнастроек: теперь Claude Code по умолчанию первым делом читает AGENTS.md, а если файла нет — подхватывает CLAUDE.md.

Доступно с версии 2.1.277. 💬
⚡2
This media is not supported in your browser
VIEW IN TELEGRAM
Зачем держать localhost взаперти, если Cloudflare раздаёт туннель бесплатно? Всё, что крутится у тебя на машине, выставляется наружу для кого угодно. Хватит одной команды:

cloudflared tunnel --url http://localhost:8000


Дальше крути с этим что хочешь: локальные проекты, тестирование вебхуков, демонстрация клиентам, как там у тебя всё работает, быстрые превью и доступ ИИ-агентов к локальным приложениям

try.cloudflare.com

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Байка о npm‑либе morphing‑scroll

Автор трещит про свою npm‑библиотеку. На момент статьи это его второй npm‑проект — и самый сложный. В кишки кода он не полезет: в тексте — как оно создавалось и с какой мотивацией.

Читать далее

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
AgentCloak выкатил бесплатное браузерное расширение: личные данные больше не улетают в промпты к ИИ

Как говорит разработчик, прямо в браузере крутится небольшая ИИ-модель — локально. Она выцепляет имена, номера счетов и прочую личную требуху и подменяет её ненастоящими значениями ещё до того, как запрос куда-то уйдёт.

Ответ пришёл — расширение откатывает всё назад и подсовывает оригинальные данные. Из поддерживаемого: ChatGPT, Claude, Gemini, Grok, DeepSeek и другие модели. Регистрироваться не нужно. incountry.com

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Китайцы за пару дней выкатили аж ДВЕ нормальные модели — судя по всему, в ИИ-гонке они замедляться не намерены и вкалывают вообще без выходных.

Qwen3.8-LiveTranslate — штука для синхронного перевода в реальном времени. Держит 60 языков, различает, кто из говорящих сейчас вещает, и в переводе сохраняет их настоящие голоса. Средняя задержка просела с 2,8 до 2,3 секунды.

Qwen-Image-2.1 — свежая облегчённая модель для генерации картинок, и она обставляет Nano Banana 2.0. Рисует нативно в 2K, умеет прозрачный фон, переваривает сразу 10 референсов и точечно правит те области, которые отметили. На HF уже выложили. Ждём на неделе мощную ответочку

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
tinyjs: десктопные приложения на JavaScript меньше 10 МБ

В JavaScript Weekly #803 от 22 сентября 2026 года — про tinyjs. Автор собрал на нём приложение и остался впечатлён: бэкенд на txiki.js с полным доступом к системе (FFI в том числе), нативный рендеринг в webview, компактные сборки под macOS, Linux и Windows. Плюс подпись и нотаризация финального приложения — тоже проще.

Вариантов в этой нише — вагон. Electrobun: возможностей побольше, несколько окон и GPU, но рантайм TypeScript крупнее — хотя для крошечного нативного main-процесса там можно взять Zig, Rust, Go или Odin. Perry — AOT-компилятор TypeScript в нативный код; его основная модель UI рендерит виджеты AppKit, Win32 и GTK4, чтобы ощущалось привычнее по-нативному. Electron и экспериментальный Deno Desktop — мощные, но исполняемые файлы у них обычно в разы тяжелее. У Neutralinojs приложения бывают даже меньше, чем у tinyjs, — только привилегированный бэкенд на JavaScript там теряется по дизайну.

Полный выпуск: #803 — JavaScript Weekly

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
React 19.3 — уже в npm. View Transitions и Fragment Refs год назад закинули как экспериментальные API с прицелом на React. Теперь обе штуки дослужились до стабильного статуса в React 19.3.

В статье разбирают, как они работают, и заодно прочие заметные изменения этого релиза.

Читать далее

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
OpenAI тоже решила не отставать и притащила новый релиз: знакомьтесь — GPT-6 Sol и Luna.

Sol подешевела примерно вдвое: $2/$10 за 1 млн токенов. Luna просела по цене ещё жёстче — до $0.1/$0.5.

А подписчикам сверху отсыпали один сохранённый сброс лимита

Обе модели уже в подписках и API, а Luna — ещё и на бесплатном тарифе.

👉 Логово Верстальщика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM