← Back to all briefs
CSS57s read

Chrome 155 Ships CSS symbols(), margin-trim, and Text Modules

The stable release adds three CSS conveniences, native text imports, a Rust JPEG XL decoder, and post-quantum WebCrypto algorithms.

Chrome 155 reached stable on October 6, and the CSS changes remove three recurring workarounds. symbols() defines an anonymous counter style inline, so list-style-type: symbols(cyclic "→") replaces a separate @counter-style block. margin-trim removes the leading margin on a container's first child and the trailing margin on its last, for block and multicol containers only; flex and grid still ignore it. text-decoration-skip-spaces controls whether decorations break at whitespace, so a multi-word link underline can run continuously or break between words instead of taking the default.

JavaScript gets text modules. import rules from "./rules.txt" with { type: "text" } loads the file as a string, replacing the fetch().then(r => r.text()) wrapper around shader, config, and fixture files. Blink also stops caching failed module loads, so you can retry a transient 502 on an import().

Under the hood, Blink decodes JPEG XL through jxl-rs, a Rust decoder with progressive, HDR, and animation support. WebCrypto adds ML-KEM, ML-DSA, ChaCha20-Poly1305, and X-Wing. That only matters if your app does cryptography in the browser, so most teams can leave it alone for now.

Treat JPEG XL as progressive enhancement. Do not drop AVIF or WebP yet. The release also carries 247 security fixes, four of them critical use-after-frees, so update your test browsers today.