Firefox 151 для разработчиков — Шведская лошадка подбросила сразу несколько фич: position-anchor: normal для якорей, @container style() в условных запросах, Document Picture-in-Picture API для окон «поверх всего», Web Serial API на десктопе, CanvasRenderingContext2D.lang, keyboardLock в requestFullscreen() и экспериментальное field-sizing для форм. Хороший апдейт, если пишешь под Firefox.
Статьи, мнения, туториалы
JS/TS
Next.js cssnano ломает типизацию CSS @property — Если объявить @property --var { syntax: "<percentage>"; initial-value: 0% }, Next.js (через встроенный cssnano) оптимизирует 0% в 0 — и тип теряется. Бордеры: писать 0.0% или менять на <length-percentage>, пока Next не обновит cssnano. Полезна отладка для тех, кто активно использует custom properties.
CSS
border-shape (Una Kravets) — кастомные формы бордеров на чистом CSS — Раньше, чтобы нарисовать пузырь речи или сердечко, приходилось резать бордеры через clip-path. Теперь — border-shape. Новый CSS primitive задаёт собственную форму для бордера элемента. clip-path() заслужила свой отдых, и border-shape — её достойная замена для задач, где нужен и бордер, и кастомная форма.
text-fit — текст в контейнере без vw/vh хаков — Скоро в CSS (в рамках CSS Text Module) появится свойство text-fit, которое позволит вписать текст в контейнер без скриптов и костылей с vw/vh. Пока за флагом в Chrome, но само обсуждение в CSS Working Group уже идёт — похоже, до стандарта дело дойдёт.
CSS Custom Highlight API + поиск: подсветка результатов прямо в тексте — CSS Custom Highlight API используется не только для подсветки кода — его можно комбинировать с поиском по тексту страницы. Браузер создаёт highlight ranges, а CSS рисует подсветку через ::highlight(). Похоже на то, как работают поисковые подсвечивания в редакторах, но — нативно, через CSS, без JS-обвязки.
HTML/Accessibility
Chrome: автоматическая замена HTML-шаблона на контент через <?marker> и <template for> — Команда Chrome предлагает API для стриминга: ставишь <?marker name="placeholder"> в HTML, а потом — <template for="placeholder"> с реальным контентом. Браузер сам подменяет шаблон на данные, когда они готовы. Работает и со стримингом, и с JS-ответами. Удобно для progressive enhancement и уменьшения perceived latency.