Модальное окно или диалог: как выбрать и не сломать доступность
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
✅ Алгоритм выбора: три вопроса, которые переводят проектное решение из разряда «по ощущениям» в разряд обоснованных критериев.
✅ Техническая реализация: что нативный
✅ Стилизация и анимация: важное ограничение
✅ Чек-лист доступности: 20+ пунктов для проверки перед релизом.
Бонус:Разбор вложенных модалок, работы с кастомными контролами и обработки длинного контента.
🖥 Читать статью
📱 @dev_notes_ru
#a11y #Frontend #CSS #HTML #JavaScript
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
<dialog> делает за вас, а за что всё ещё отвечаете вы (спойлер: возврат фокуса — за вами).transition и как его обойти.Бонус:
#a11y #Frontend #CSS #HTML #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Как писать CSS с
Помните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
🔹 Чем
Код можно копировать и вставлять в проект уже сегодня.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #JavaScript #scope
@scope: Полный разбор синтаксиса, изоляция стилей и donut scopingПомните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
@scope.🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
@scope. Это значит, что технология получила статус Baseline и готова к продакшену.В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
@scope: во внешних CSS или прямо в HTML-компонентах🔹 Чем
:scope в CSS отличается от :scope в JavaScriptКод можно копировать и вставлять в проект уже сегодня.
#CSS #Frontend #JavaScript #scope
Please open Telegram to view this post
VIEW IN TELEGRAM
JSDoc на практике: как добавить типизацию в JS-проект без TypeScript
Наверное, каждый сталкивался с дилеммой: хочется типизацию, но втягивать TypeScript в проект и настраивать сборку ради этого — слишком жирно. Есть ли золотая середина?
Да, и это связка JSDoc + TypeScript Compiler. Без единого
🔹 Как настроить
🔹 Как типизировать переменные, функции и DOM без боли.
🔹 Как собирать кастомные типы через
Код по-прежнему работает прямо в браузере, а ошибки отлавливаются на этапе написания.
🖥 Читать статью
📱 @dev_notes_ru
#jsdoc #JavaScript #TypeScript
Наверное, каждый сталкивался с дилеммой: хочется типизацию, но втягивать TypeScript в проект и настраивать сборку ради этого — слишком жирно. Есть ли золотая середина?
Да, и это связка JSDoc + TypeScript Compiler. Без единого
.ts файла, но с полноценной проверкой в редакторе и CI. Разобрал реализацию этого подхода в проекте Kelp (автор — Крис Фердинанди). Делюсь выводами и настройками:🔹 Как настроить
tsc для работы с ванильным JS.🔹 Как типизировать переменные, функции и DOM без боли.
🔹 Как собирать кастомные типы через
@typedef и не плодить дубли.Код по-прежнему работает прямо в браузере, а ошибки отлавливаются на этапе написания.
#jsdoc #JavaScript #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Fluid-типографика: полное руководство по созданию адаптивных и доступных текстов
Вы когда-нибудь увеличивали масштаб страницы (
Хорошая новость: современный CSS позволяет сделать так, чтобы текст одновременно:
✅ Плавно подстраивался под экран
✅ Уважал личные настройки шрифта
✅ Проходил WCAG 1.4.4 (доступность)
В новой статье разобрали подход от простых медиазапросов к сложной, но элегантной системе на
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #A11y
Вы когда-нибудь увеличивали масштаб страницы (
Ctrl/Cmd +), чтобы прочитать текст, но ничего не происходило? 🧐 Это не баг, а особенность «адаптивной» верстки, в которой размер привязан только к ширине экрана.Хорошая новость: современный CSS позволяет сделать так, чтобы текст одновременно:
В новой статье разобрали подход от простых медиазапросов к сложной, но элегантной системе на
clamp() и pow(). В конце — готовый чек-лист и формула, которую можно скопировать в проект.#CSS #Frontend #A11y
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Итераторы в JavaScript: подробное руководство с примерами
Вы точно пользуетесь итераторами каждый день — в
Если в голове каша из терминов «протокол итерации», Symbol.iterator и
✅ Чёткое разделение: iterable vs iterator — больше никакой путаницы
✅ Как работают
✅ Почему итераторы не создают копии данных в памяти (и когда это критично)
✅ Современный
И да, аналогия с книгой и закладкой действительно объясняет всё.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #Итераторы
Вы точно пользуетесь итераторами каждый день — в
for...of, spread-операторе, деструктуризации. Но сможете сходу объяснить, чем итерируемый объект отличается от итератора? 🤔Если в голове каша из терминов «протокол итерации», Symbol.iterator и
next(), вот чёткое объяснение с примерами:keys(), values(), entries() на самом делеIterator.from() и ленивые методы (take, drop, filter)И да, аналогия с книгой и закладкой действительно объясняет всё.
#JavaScript #Итераторы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Обработка параметров в JavaScript обработчиках событий
Вопрос управления обработчиками событий часто недооценивают, пока не возникает проблема с утечками памяти в SPA. Когда обработчику требуется передать параметры (например, ID сущности), стандартные подходы перестают работать предсказуемо, а удаление таких обработчиков становится нетривиальной задачей.
В новой статье системно разобрали эту тему:
✅ Почему нельзя просто написать
✅ Как работают замыкания и
✅ Когда делегирование событий производительнее индивидуальных обработчиков
✅ Шпаргалка: 4 вопроса, которые помогут выбрать правильный паттерн
Материал будет полезен, если вы пишете на чистом JS или хотите лучше понимать, как работают события внутри фреймворков.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript
Вопрос управления обработчиками событий часто недооценивают, пока не возникает проблема с утечками памяти в SPA. Когда обработчику требуется передать параметры (например, ID сущности), стандартные подходы перестают работать предсказуемо, а удаление таких обработчиков становится нетривиальной задачей.
В новой статье системно разобрали эту тему:
addEventListener('click', deleteTask(id))AbortController для передачи параметровМатериал будет полезен, если вы пишете на чистом JS или хотите лучше понимать, как работают события внутри фреймворков.
#JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👌1
Команда Laravel выпустила обновление v12.53.0. Этот релиз получился насыщенным: он добавляет новые возможности для работы с JSON-схемами и очередями, исправляет ряд неприятных багов и содержит несколько важных внутренних улучшений.
Ключевые нововведения
🔹Контроль параллелизма с любым кэшем: Добавлен метод
Cache::funnel() для ограничения одновременного выполнения задач (throttling) с использованием любого драйвера кэша. Раньше такая возможность была только у Redis через RedisThrottle, теперь она универсальна (#58439).🔹Улучшена работа с JSON Schema: Добавлена поддержка ключей
multipleOf для числовых типов (#58903) и uniqueItems для массивов (#58922). Это делает генерацию и валидацию сложных JSON-схем более точной и стандартизированной.🔹Полнотекстовый поиск по векторам: В
whereFullText() добавлена опция для работы с предварительно вычисленными tsvector колонками в PostgreSQL. Это ускоряет поиск, если векторы обновляются не в реальном времени (#58893).🔹Именованные аргументы в событиях: Теперь при диспатче событий и их трансляции можно использовать именованные аргументы, что повышает читаемость кода при работе с конструкторами событий (#58913).
🔹Поддержка сериализуемых классов в кэше: Внесены доработки для корректной работы с классами, реализующими интерфейс
Serializable, при помещении их в кэш (#58911).Существенные исправления
🔹Исправлена сериализация моделей в очередях: Устранена проблема, из-за которой при определенных условиях сериализация модели в задании очереди могла работать некорректно (#58939).
🔹Исправлена работа
RetryCommand для SQS FIFO: Команда повторной обработки проваленных заданий теперь корректно работает с очередями SQS FIFO (#58936).🔹Устранена проблема с deadlock в транзакциях: Добавлен откат "зависшей" PDO-транзакции перед повторной попыткой коммита при deadlock. Это повышает надежность работы с БД в высоконагруженных сценариях (#58906).
🔹Исправлена гонка при создании кэша real-time фасадов: Устранен редкий баг, который мог приводить к ошибкам при конкурентном создании файла кэша для фасадов (#58947).
Улучшения для разработчиков
🔹Тестирование сессий: Метод
assertSessionHasAll() при провале теста теперь показывает все несовпадающие значения, а не только первое. Это экономит время при отладке (#58946).🔹Очереди: В выводе команды
queue:monitor теперь гарантированно отображается значение oldest_pending для лучшего мониторинга "застрявших" заданий (#58952).🔹JSONP Check: Добавлена проверка для корректной работы с JSONP-запросами, повышающая безопасность и совместимость (#58971).
🔹Команда
down: Теперь поддерживает обновление опций режима обслуживания без необходимости повторного ввода всех флагов (#58918).Итог: Это мощный минорный релиз, который будет полезен практически всем. Обновление настоятельно рекомендуется, особенно если вы используете JSON Schema, очереди или сложную валидацию.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Руководство по стилю объектного проектирования для PHP 8.5
Хватит писать код, который только имитирует инкапсуляцию. 🙃
В 2019-м Нобак выпустил Object Design Style Guide — манифест о том, какими должны быть объекты. В 2025-м PHP 8.5 наконец-то догнал эту философию и встроил её прямо в синтаксис.
Теперь не нужно выбирать между «правильно» и «быстро». В статье рассматриваем, как новые фичи меняют повседневную практику:
✅ Асимметричная видимость — вместо связки private field + public getter.
✅ Хуки свойств — валидация и виртуальные поля без дублирования.
✅ Clone with и readonly-классы — настоящая иммутабельность без риска ошибиться.
✅ Pipe-оператор — линейные цепочки сервисов без ада вложенности.
🖥 Читать статью
📱 @dev_notes_ru
#PHP85 #PHP
Хватит писать код, который только имитирует инкапсуляцию. 🙃
В 2019-м Нобак выпустил Object Design Style Guide — манифест о том, какими должны быть объекты. В 2025-м PHP 8.5 наконец-то догнал эту философию и встроил её прямо в синтаксис.
Теперь не нужно выбирать между «правильно» и «быстро». В статье рассматриваем, как новые фичи меняют повседневную практику:
#PHP85 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥5
Firefox 148: обновления для разработчиков и улучшения безопасности
24 февраля 2026 года состоялся релиз стабильной версии Firefox 148. В этом выпуске представлен ряд изменений, направленных на повышение производительности, расширение поддержки веб-стандартов и усиление безопасности. Ниже приведён обзор ключевых нововведений.
🚀 Улучшения для веб-разработчиков
HTML
Синхронная загрузка
CSS
Якорное позиционирование. Реализована поддержка свойства position-try-order, позволяющего задавать порядок перебора запасных позиций для элементов с якорным позиционированием. Свойство position-area теперь гарантирует корректное удержание привязанного элемента в пределах видимой области.
Обработка переполнения. Свойства
Функция
JavaScript
Комбинирование итераторов. Добавлены статические методы
Модернизация устаревших возможностей RegExp. В рамках реализации предложения TC39 Legacy RegExp Features проведена нормализация статических свойств RegExp (
API
Защита от XSS-атак. Внедрена поддержка Sanitizer API для безопасной очистки HTML перед вставкой в DOM, а также Trusted Types API, обеспечивающего проверку данных, передаваемых в потенциально опасные функции и свойства.
Навигация и события. Реализовано свойство
Работа с буфером обмена. Команда "paste" для
🛠 WebDriver (WebDriver BiDi, Marionette)
Взаимодействие с chrome браузера. В WebDriver BiDi добавлена начальная поддержка chrome-контекстов. Команда
Исправления и оптимизация. Устранены состояния гонки при создании новых окон и навигации, а также ошибки, связанные с перенаправлением на страницы с ошибками и декодированием фрагментированных тел ответов. Производительность выполнения команд WebDriver BiDi улучшена при работе с недоступными контекстами.
Новые возможности Marionette. Добавлена команда
🧪 Экспериментальные функции
В версии 148 на стадии эксперимента (доступны в ночных сборках при включении соответствующей настройки) находится Document Picture-in-Picture API. API позволяет создавать окно поверх всех окон с произвольным HTML-содержимым, например, для отображения кастомных элементов управления видео или участников видеоконференции.
Полный список изменений доступен в официальной документации: Firefox 148 release notes.
📱 @dev_notes_ru
#Firefox
24 февраля 2026 года состоялся релиз стабильной версии Firefox 148. В этом выпуске представлен ряд изменений, направленных на повышение производительности, расширение поддержки веб-стандартов и усиление безопасности. Ниже приведён обзор ключевых нововведений.
🚀 Улучшения для веб-разработчиков
HTML
Синхронная загрузка
about:blank. Изменён механизм загрузки первоначального пустого документа. Теперь при навигации на about:blank документ загружается синхронно, что устраняет избыточную асинхронную замену и оптимизирует событие load. Изменение направлено на ускорение начальной отрисовки страниц.CSS
Якорное позиционирование. Реализована поддержка свойства position-try-order, позволяющего задавать порядок перебора запасных позиций для элементов с якорным позиционированием. Свойство position-area теперь гарантирует корректное удержание привязанного элемента в пределах видимой области.
Обработка переполнения. Свойства
overflow, overflow-x и overflow-y стали применимы к заменяемым элементам (например, изображениям) аналогично другим элементам, обеспечивая предсказуемое поведение при переполнении контейнера.Функция
shape(). Стандартизирована и включена по умолчанию поддержка функции shape() для создания сложных фигур в свойствах clip-path и offset-path. В отличие от path(), функция использует синтаксис CSS, что позволяет применять единицы измерения и математические функции для большей гибкости.JavaScript
Комбинирование итераторов. Добавлены статические методы
Iterator.zip() и Iterator.zipKeyed(), предназначенные для объединения данных из нескольких итераторов в позиционно согласованные группы.Модернизация устаревших возможностей RegExp. В рамках реализации предложения TC39 Legacy RegExp Features проведена нормализация статических свойств RegExp (
$1-$9, input и др.). Теперь они являются настраиваемыми и неперечисляемыми, что позволяет, например, удалять их с объекта RegExp.API
Защита от XSS-атак. Внедрена поддержка Sanitizer API для безопасной очистки HTML перед вставкой в DOM, а также Trusted Types API, обеспечивающего проверку данных, передаваемых в потенциально опасные функции и свойства.
Навигация и события. Реализовано свойство
Location.ancestorOrigins для определения происхождения родительских документов при встраивании через <iframe>. Для события pointerrawupdate добавлена корректная передача значений movementX и movementY.Работа с буфером обмена. Команда "paste" для
Document.execCommand() теперь доступна в веб-контенте и реализована через Clipboard API с соблюдением всех требований безопасности.🛠 WebDriver (WebDriver BiDi, Marionette)
Взаимодействие с chrome браузера. В WebDriver BiDi добавлена начальная поддержка chrome-контекстов. Команда
browsingContext.getTree с новым параметром moz:scope: chrome позволяет получать доступ к элементам интерфейса Firefox при запуске с флагом --remote-allow-system-access.Исправления и оптимизация. Устранены состояния гонки при создании новых окон и навигации, а также ошибки, связанные с перенаправлением на страницы с ошибками и декодированием фрагментированных тел ответов. Производительность выполнения команд WebDriver BiDi улучшена при работе с недоступными контекстами.
Новые возможности Marionette. Добавлена команда
Reporting:GenerateTestReport для генерации тестовых отчетов через Reporting API.🧪 Экспериментальные функции
В версии 148 на стадии эксперимента (доступны в ночных сборках при включении соответствующей настройки) находится Document Picture-in-Picture API. API позволяет создавать окно поверх всех окон с произвольным HTML-содержимым, например, для отображения кастомных элементов управления видео или участников видеоконференции.
Полный список изменений доступен в официальной документации: Firefox 148 release notes.
#Firefox
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝1
Чистое API для чтения PHP-атрибутов
Сколько строк кода вы пишете, чтобы просто прочитать один атрибут у класса? Обычно это 3-5 строк с
Spatie выпустили элегантное решение spatie/php-attribute-reader, которое превращает это безобразие в одну строку. Зацените:
Что ещё умеет пакет:
🔹Искать атрибуты по всей иерархии классов (с поддержкой
🔹Работать с повторяющимися атрибутами (например,
🔹Возвращать удобный объект с контекстом: к какому свойству или методу привязан атрибут.
В статье рассматриваем, как искать атрибуты по всему классу разом и работать с иерархиями.
🖥 Читать статью
📱 @dev_notes_ru
#PHP8 #PHP
Сколько строк кода вы пишете, чтобы просто прочитать один атрибут у класса? Обычно это 3-5 строк с
ReflectionClass, проверкой count($attributes) > 0 и вызовом newInstance(). А если нужно найти все атрибуты Validate в свойствах, методах и параметрах — код разрастается до неприличных размеров.Spatie выпустили элегантное решение spatie/php-attribute-reader, которое превращает это безобразие в одну строку. Зацените:
$route = Attributes::get(MyController::class, Route::class);
Что ещё умеет пакет:
🔹Искать атрибуты по всей иерархии классов (с поддержкой
IS_INSTANCEOF).🔹Работать с повторяющимися атрибутами (например,
#[Middleware]).🔹Возвращать удобный объект с контекстом: к какому свойству или методу привязан атрибут.
В статье рассматриваем, как искать атрибуты по всему классу разом и работать с иерархиями.
#PHP8 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Trusted Publishing в npm: пошаговое руководство по настройке
В связи с участившимися атаками на цепочки поставок и отзывом долгоживущих npm-токенов, разработчикам необходимо перейти на механизм доверенной публикации (trusted publishing). При обновлении рабочего процесса выяснилось, что ряд важных деталей в официальной документации npm либо опущены, либо изложены недостаточно явно.
В статье собраны практические шаги для успешной настройки:
✅ Регистрация доверенного издателя через интерфейс npm (и где его искать).
✅ Корректная конфигурация package.json и прав доступа в GitHub Actions.
✅ Типичные ошибки при публикации и способы их устранения (включая ошибку 403).
Материал будет полезен всем, кто поддерживает публичные npm-пакеты и использует автоматическую публикацию через GitHub Actions.
🖥 Читать статью
📱 @dev_notes_ru
#NodeJS #NPM
В связи с участившимися атаками на цепочки поставок и отзывом долгоживущих npm-токенов, разработчикам необходимо перейти на механизм доверенной публикации (trusted publishing). При обновлении рабочего процесса выяснилось, что ряд важных деталей в официальной документации npm либо опущены, либо изложены недостаточно явно.
В статье собраны практические шаги для успешной настройки:
Материал будет полезен всем, кто поддерживает публичные npm-пакеты и использует автоматическую публикацию через GitHub Actions.
#NodeJS #NPM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
URL Pattern API: Руководство по нативной маршрутизации в JavaScript
Обработка URL — одна из типовых задач как на клиенте, так и на сервере. Традиционный подход с ручным разбором строк быстро становится громоздким при появлении опциональных параметров или вложенных путей.
С сентября 2025 года у JavaScript-разработчиков появился встроенный инструмент для этой задачи — URL Pattern API. Он предоставляет единый синтаксис для валидации URL и извлечения параметров, который работает во всех современных браузерах и в Node.js/Deno/Bun.
В статье подробно разбираются:
✅ Синтаксис шаблонов: именованные группы, модификаторы, регулярные выражения.
✅ API: методы
✅ Практика: примеры использования в Service Worker, SPA и серверном приложении.
Также в материале затронуты вопросы производительности и ограничения использования API для высоконагруженных серверных проектов.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #WebAPI
Обработка URL — одна из типовых задач как на клиенте, так и на сервере. Традиционный подход с ручным разбором строк быстро становится громоздким при появлении опциональных параметров или вложенных путей.
С сентября 2025 года у JavaScript-разработчиков появился встроенный инструмент для этой задачи — URL Pattern API. Он предоставляет единый синтаксис для валидации URL и извлечения параметров, который работает во всех современных браузерах и в Node.js/Deno/Bun.
В статье подробно разбираются:
test() для проверки соответствия и exec() для извлечения данных.Также в материале затронуты вопросы производительности и ограничения использования API для высоконагруженных серверных проектов.
#JavaScript #WebAPI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Атрибуты и свойства HTML: в чём разница
Распространённая ситуация: разработчик пытается прочитать значение поля ввода через
Это не ошибка JavaScript, а следствие фундаментального различия между атрибутами и свойствами DOM. Атрибуты — это исходные параметры, заданные в HTML (чертёж элемента). Свойства — это текущее состояние DOM-объекта в памяти браузера (реальность). И они могут расходиться.
В новой статье детально разбирается:
✅ Почему
✅ Как работает
✅ Особенности логических атрибутов (
✅ Что важно знать о свойствах и атрибутах разработчикам на React.
Материал будет полезен как начинающим, так и опытным разработчикам, желающим систематизировать знания о DOM.
🖥 Читать статью
📱 @dev_notes_ru
#HTML #JavaScript #DOM #Frontend
Распространённая ситуация: разработчик пытается прочитать значение поля ввода через
getAttribute('value'), но получает не актуальные данные, введённые пользователем, а первоначальное значение из HTML-разметки.Это не ошибка JavaScript, а следствие фундаментального различия между атрибутами и свойствами DOM. Атрибуты — это исходные параметры, заданные в HTML (чертёж элемента). Свойства — это текущее состояние DOM-объекта в памяти браузера (реальность). И они могут расходиться.
В новой статье детально разбирается:
input.value и getAttribute('value') ведут себя по-разному.defaultValue и для чего он нужен.checked, disabled).Материал будет полезен как начинающим, так и опытным разработчикам, желающим систематизировать знания о DOM.
#HTML #JavaScript #DOM #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Зачем нужен
При верстке изображений у разработчиков часто возникает вопрос: чем отличается атрибут
О чем статья:
✅
✅
✅ Простой тест, который поможет определить, нужна ли изображению подпись или достаточно грамотно заполненного
Материал будет полезен всем, кто работает с контентом и стремится сделать верстку семантически правильной и доступной.
🖥 Читать статью
📱 @dev_notes_ru
#A11y #HTML #Frontend
figcaption, если есть altПри верстке изображений у разработчиков часто возникает вопрос: чем отличается атрибут
alt от элемента <figcaption> и можно ли их использовать взаимозаменяемо? На первый взгляд оба элемента отвечают за описание, но их функции принципиально различаются.О чем статья:
alt — это замена изображения для тех, кто не может его увидеть (пользователи скринридеров, отключенные изображения).<figcaption> — это видимая подпись, поясняющая роль изображения в тексте для всех читателей.alt.Материал будет полезен всем, кто работает с контентом и стремится сделать верстку семантически правильной и доступной.
#A11y #HTML #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Понижаем приоритет группы CSS-правил с помощью
Управление приоритетами CSS-правил — одна из ключевых задач при поддержке проекта любого масштаба. Традиционные методы (контроль порядка подключения, повышение специфичности) не всегда эффективны, особенно при работе со сторонними библиотеками или унаследованным кодом.
Альтернативный подход — использование каскадных слоёв (
В статье рассматриваются:
✅ Три типовых сценария для применения этой техники.
✅ Особенности интеграции слоёв в существующую архитектуру.
✅ Специфика работы
Будет полезно всем, кто стремится выстроить чистую и предсказуемую CSS-архитектуру.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend
@layerУправление приоритетами CSS-правил — одна из ключевых задач при поддержке проекта любого масштаба. Традиционные методы (контроль порядка подключения, повышение специфичности) не всегда эффективны, особенно при работе со сторонними библиотеками или унаследованным кодом.
Альтернативный подход — использование каскадных слоёв (
@layer). Помещение "базовых" стилей (например, reset.css) в отдельный слой гарантирует, что они будут уступать основным правилам проекта, написанным вне слоя.В статье рассматриваются:
!important внутри каскадного слоя.Будет полезно всем, кто стремится выстроить чистую и предсказуемую CSS-архитектуру.
#CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
📰 Ежемесячный дайджест Baseline: январь 2026
Привет! Встречайте первый в этом году выпуск Baseline Digest. Мы собрали для вас все важные новинки веб-платформы, которые в январе достигли новых этапов в проекте Baseline. Поехали!🚀
✅ Новое в категории Newly Available
Эти функции теперь стабильно работают во всех основных браузерах.
1. Псевдокласс
Позволяет стилизовать корневой элемент документа во время перехода между состояниями страницы (View Transition). Это дает тонкий контроль над анимацией смены контента.
2. JavaScript-модули в Service Workers
Теперь и в Service Worker можно использовать стандартные
3. Navigation API
Современная замена устаревшему History API, созданная специально для Single Page Applications (SPA). Дает единый способ управления навигацией, включая кнопки «назад/вперед», с меньшим количеством шаблонного кода.
4. Новые CSS-единицы (относительно root):
🌐 Новое в категории (Widely Available
Эти функции уже давно с нами, а теперь окончательно подтвердили свою стабильность и готовы к использованию в любых проектах.
1. Двухзначное свойство
Вместо
2. Свойство
Определяет, как накладываются друг на друга несколько анимаций, влияющих на одно и то же свойство. Доступны режимы:
3. Иммутабельные методы массивов
toReversed(), toSorted() и
🖥 January 2026 Baseline monthly digest
📱 @dev_notes_ru
#Baseline #Frontend
Привет! Встречайте первый в этом году выпуск Baseline Digest. Мы собрали для вас все важные новинки веб-платформы, которые в январе достигли новых этапов в проекте Baseline. Поехали!
✅ Новое в категории Newly Available
Эти функции теперь стабильно работают во всех основных браузерах.
1. Псевдокласс
:active-view-transitionПозволяет стилизовать корневой элемент документа во время перехода между состояниями страницы (View Transition). Это дает тонкий контроль над анимацией смены контента.
2. JavaScript-модули в Service Workers
Теперь и в Service Worker можно использовать стандартные
import/export! Просто добавьте { type: 'module' } при регистрации. Это упрощает организацию кода и управление зависимостями.3. Navigation API
Современная замена устаревшему History API, созданная специально для Single Page Applications (SPA). Дает единый способ управления навигацией, включая кнопки «назад/вперед», с меньшим количеством шаблонного кода.
4. Новые CSS-единицы (относительно root):
rcap: Высота заглавных букв корневого элемента. Идеально для точной типографики.rch: Ширина символа 0 в шрифте корневого элемента.rex: Высота строчных букв (ex) корневого элемента. Полезно для вертикального выравнивания.ric: Ширина/высота иероглифа (CJK) корневого элемента. Незаменимо для многоязычных интерфейсов.🌐 Новое в категории (Widely Available
Эти функции уже давно с нами, а теперь окончательно подтвердили свою стабильность и готовы к использованию в любых проектах.
1. Двухзначное свойство
displayВместо
inline-flex можно писать display: inline flex. Это разделяет «внешний» (как элемент взаимодействует с потоком) и «внутренний» (как ведут себя дочерние элементы) типы отображения. Более логично и гибко.2. Свойство
animation-compositionОпределяет, как накладываются друг на друга несколько анимаций, влияющих на одно и то же свойство. Доступны режимы:
replace (заменить), add (добавить) и accumulate (накопить).3. Иммутабельные методы массивов
toReversed(), toSorted() и
toSpliced() — новые методы, которые возвращают новый массив с изменениями, не трогая исходный. Это шаг к более чистому и предсказуемому функциональному программированию на JavaScript.#Baseline #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM