Новинки веб-платформы в октябре 2026 на 9 октября: JPEG XL, текстовые импорты и CSS для списков
- 9 октября 2026
На 9 октября в обзоре есть новые возможности для изображений, списков и текста. Все они пока поддерживаются частью браузеров. Самый полезный старт — добавить JPEG XL с запасной фотографией в привычном формате.
Это промежуточный выпуск за 1–9 октября 2026 года. Месяц ещё продолжается. Сверяемся с октябрьской страницей Web Features Explorer и выбираем изменения для вёрстки и фронтенда.
Хронологию взяли из Explorer и дополнили релизом Edge 155 от 8 октября: в его примечаниях подтверждены все четыре возможности выпуска. Chrome 155 вышел шестого октября. Возможности остаются ограниченно доступными из-за отсутствия поддержки в Firefox или Safari.
Что пробовать с запасным вариантом
JPEG XL: дополнительный формат через picture
JPEG XL поддерживает сжатие с потерями и без потерь. В формате есть прозрачность и анимация. Здесь займёмся фотографией для карточки товара. Файл смогут открыть Safari, Chrome 155 и Edge 155; в Firefox поддержки пока нет.
Сохраните в папке images два варианта одной фотографии размером 800 × 600 пикселей: desk.jxl и desk.jpg. Подключение остаётся знакомым:
<figure class="product-photo">
<picture>
<source srcset="./images/desk.jxl" type="image/jxl">
<img
src="./images/desk.jpg"
width="800"
height="600"
alt="Рабочий стол с монитором и настольной лампой"
>
</picture>
<figcaption>Рабочее место для учебных проектов</figcaption>
</figure>.product-photo {
margin: 0;
}
.product-photo img {
display: block;
width: 100%;
height: auto;
}Браузер проверит type у <source>. Если JPEG XL ему доступен, выберет desk.jxl; иначе использует desk.jpg из <img>. Описание и размеры задаём на <img> для обоих вариантов. Размеры width и height резервируют место до загрузки, чтобы текст под карточкой не прыгал при появлении фотографии.
В панели сети проверьте, какой файл запросился. Затем сравните размер файлов и качество фотографии после вашей конвертации. Само расширение .jxl не гарантирует экономию: результат зависит от исходника и параметров сжатия. И держите оба файла доступными на сервере — запасной формат нужен посетителям без поддержки.
Выбор формата по type также не является обработчиком сетевых ошибок. Если выбранный .jxl отсутствует или повреждён, рассчитывать на автоматическое переключение к JPEG нельзя.
Даты поддержки — в карточке JPEG XL. Как браузер выбирает источник — в MDN про picture.
symbols(): маркеры списка без отдельного counter-style
Для списка материалов бывает нужен собственный знак вместо круглой точки. Возьмём symbols(). Эта функция задаёт стиль счётчика прямо в list-style-type. Отдельное правило @counter-style для такого случая не понадобится.
На 9 октября функцию поддерживают Chrome, Firefox и Edge, в Safari поддержки нет. Поэтому сначала зададим обычный маркер:
<ul class="materials">
<li>Макет каталога</li>
<li>Изображения товаров</li>
<li>Тексты карточек</li>
<li>Шрифты проекта</li>
</ul>.materials {
padding-inline-start: 1.5rem;
list-style-type: disc;
}
@supports (list-style-type: symbols(cyclic "›")) {
.materials {
list-style-type: symbols(cyclic "›");
}
}
.materials li + li {
margin-block-start: 0.5rem;
}Режим cyclic повторяет заданные символы по кругу. Здесь символ один. Поэтому знак › будет у каждого пункта, сколько бы материалов вы ни добавили. Если передать symbols(cyclic "›" "»"), маркеры начнут чередоваться. Между символами — пробел, запятая не нужна.
HTML-список остаётся списком. Не вкладывайте в декоративный маркер единственную информацию о статусе: слова «готово» и «нужна проверка» должны находиться в самом пункте. Тогда читатель поймёт состояние и в браузере с обычными точками.
Для повторного использования сложного стиля в нескольких местах удобнее именованное @counter-style. У symbols() имя не создаётся — это запись для конкретного значения свойства.
См. поддержку symbols() в Explorer и синтаксис в MDN.
Текстовые импорты: файл становится строкой
Короткие правила использования сервиса можно держать в отдельном terms.txt. Новый атрибут импорта type: 'text' загружает содержимое как строку. Даже если внутри текст похож на JavaScript, сам импорт его не выполняет.
Поддержка пока есть в Chrome, Firefox и Edge; Safari потребуется другой путь. Покажем импорт с переходом к обычному fetch() при ошибке. Создайте terms.txt со строкой «Учебный проект для практики». Рядом сохраните страницу и файл terms.js:
<h2>Правила проекта</h2>
<pre id="terms" aria-live="polite">Загружаем правила</pre>
<script type="module" src="./terms.js"></script>В terms.js:
const output = document.querySelector('#terms');
async function loadTerms() {
try {
const module = await import('./terms.txt', {
with: { type: 'text' }
});
return module.default;
} catch {
const response = await fetch('./terms.txt');
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.text();
}
}
try {
output.textContent = await loadTerms();
} catch (error) {
output.textContent = `Не удалось загрузить правила: ${error.message}`;
}Статическая форма в браузере с поддержкой выглядит как import terms from './terms.txt' with { type: 'text' };. Для примера с запасной веткой выбрали динамический импорт: его отказ можно поймать. fetch() здесь сработает и при другой ошибке импорта, поэтому при отладке сначала посмотрите причину в инструментах разработчика.
Откройте страницу через локальный HTTP-сервер. Сам terms.js должен приходить как JavaScript-модуль с подходящим типом содержимого. Файл .txt разумно отдавать как text/plain; charset=utf-8; при этом текстовый импорт игнорирует Content-Type этого ответа и декодирует данные как UTF-8. Для загрузки с другого домена остаются требования CORS.
Есть похожая запись у сборщиков: импорт пути с ?raw. Это отдельный механизм сборки. Добавление ?raw к URL не включает нативный type: 'text' в браузере.
Полученный текст выводим через textContent. HTML-разметка в файле останется текстом, что подходит для правил или справки. Для вставки чужого содержимого через innerHTML понадобилась бы отдельная проверка безопасности.
Поддержку можно проверить в карточке text modules. Синтаксис и доставка описаны в MDN про атрибуты импорта, устройство текстового модуля — в предложении TC39 Import Text.
text-decoration-skip-spaces: подчёркивание пропускает пробелы
Длинная текстовая ссылка иногда выглядит аккуратнее, если линия прерывается между словами. text-decoration-skip-spaces: all управляет именно пропусками под пробельными символами.
На 9 октября свойство поддерживают настольный Chrome 155 и Edge 155. У Firefox и Safari поддержки нет; у Chrome на Android её тоже пока нет по карточке Explorer. Это небольшое визуальное улучшение поверх рабочего оформления:
<p>
<a class="reading-link" href="/articles">
Материалы для самостоятельной практики
</a>
</p>.reading-link {
text-decoration-line: underline;
text-decoration-thickness: 0.08em;
text-underline-offset: 0.18em;
}
@supports (text-decoration-skip-spaces: all) {
.reading-link {
text-decoration-skip-spaces: all;
}
}При поддержке линия прерывается под пробелами. В остальных браузерах сохраняется обычное подчёркивание. none сохраняет линию под пробелами; start и end пропускают их только в начале и конце строки соответственно. Начальное значение в спецификации — start end.
У букв с нижними выносными элементами отдельная история: обход таких частей букв задаёт text-decoration-skip-ink. С новым свойством меняем только работу с пробелами. Проверьте ссылку при переносе на две строки и с тем шрифтом, который реально используется в проекте.
Поддержка — в Explorer, значения — в CSS Text Decoration Level 4.
Что попробовать в своём проекте
Для первого эксперимента выберите JPEG XL через <picture>: базовая фотография остаётся доступна в JPEG, а выбор браузера видно в панели сети. Текстовый импорт пока лучше оставить в отдельном учебном примере, чтобы спокойно проверить запасную ветку.
Перед переносом изменения:
- откройте пример в браузере с поддержкой и без неё;
- убедитесь, что запасной файл существует и действительно загружается;
- проверьте смысл списка и ссылки с клавиатуры, без декоративных маркеров;
- для текста проверьте отказ запроса и содержимое с символами HTML.
Какой файл изображения получает Safari, а какой Firefox? Остаётся ли текст правил читаемым, если импорт отказал? Ответы должны появиться в проверке вашего примера, прежде чем новинка попадёт в рабочий проект.
«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.