Author: Prakash Upadhyay
Discussion: w3c/csswg-drafts#14616
Published: 18 Oct 2026. Feedback welcome: open an issue.
Versions: balanced · this page (technical) · plain language · live demo
Related: csswg-drafts #11790, CSS Color HDR 1, Media Queries 5
HDR screens can show content much brighter than normal page white. That is great for a movie. It is not great when a single image on an ordinary page uses that headroom and suddenly glows several times brighter than everything around it.
This happens today, by accident. A 100 x 100 company logo in a LinkedIn job alert, viewed in Yahoo Mail in Chrome on a MacBook XDR display, rendered far brighter than the rest of the email. Its JPEG carries an Apple “Rec. ITU-R BT.2100 PQ” color profile, so its white pixels ask for 10,000 nits, about 49 times the 203 nits that ITU-R BT.2408 recommends for graphics white. Nobody meant it to glow. It was most likely exported from an Apple tool with an HDR color space selected.

Phone photos of the live demo on a MacBook Pro XDR display, same exposure (screenshots are SDR and cannot show this). The animation switches every 1.5 s; with reduced motion turned on, you see the still side-by-side instead.
A screenshot of the page looks normal, because screenshots are saved in SDR and clip anything above normal white. So the problem is invisible in design reviews, bug reports and chat threads. You only see it live, on an HDR screen.
The harm is the sudden jump, not the overall brightness. Scrolling a dim inbox at night and hitting one HDR logo is like a TV ad that is much louder than the programme around it.
| What | Who controls it | Gap |
|---|---|---|
dynamic-range-limit: standard \| constrained \| no-limit (CSS Color HDR 1) |
The developer | Only works if the developer knows about HDR and sets it. Used on 0.66% of Chrome page loads. |
@media (dynamic-range: high) (Media Queries 5) |
The hardware | Says the screen can show HDR, not whether the person wants it. |
| Reduce White Point (iOS, iPadOS) | The user | Dims the whole screen, including the text you need to read. The bright element is still several times brighter than its surroundings. |
| Android “Enhanced HDR brightness” | The user | Reported in beta builds only. Not exposed to apps. |
| Windows HDR on/off per display | The user | All or nothing for the whole display. |
Native APIs: UIImageView.preferredImageDynamicRange, SwiftUI .allowedDynamicRange(_:), CALayer.DynamicRange, Android Window.setDesiredHdrHeadroom() |
The developer | Same as CSS: they let apps cap HDR, but none tells the app what the user prefers. |
The CSS Color HDR 1 spec, Accessibility Considerations (Working Draft, 8 October 2026) already says:
“Some individuals may have a sensitivity to very bright colors, so user agents should provide a mechanism to limit the maximum luminance at user option.”
It is a “should”, not a “must”, and the spec does not define the mechanism. Its only concrete suggestion is that dynamic-range-limit “could also be set to standard or constrained in a user stylesheet”, which in today’s cascade loses to author rules unless marked !important (the point the spec editor raised in #11790). I found no browser that offers such a setting today.
Today a developer can cap HDR for everyone on an HDR screen, or for no one. They cannot do it just for the people who need it.
| Feature | Share of Chrome page loads |
|---|---|
prefers-reduced-motion |
58.3% |
prefers-contrast |
27.2% |
dynamic-range (HDR capability) |
6.6% |
prefers-reduced-transparency |
5.5% |
dynamic-range-limit (HDR cap) |
0.66% |
Pages check whether the screen can show HDR ten times more often than they cap it, and the cap appears on about 1/90th as many page loads as reduced-motion. Meanwhile HDR content keeps growing from the camera side: phones save HDR photos by default, and anything users upload (avatars, logos, product photos) can bring HDR into pages whose developers never chose it.
dynamic-range-limit model instead of inventing a new one.Call for use cases. The CSS Working Group asks for concrete, real-world use cases before it adds a media feature (#6757). If sudden HDR brightness affects you, or people you support, please share your experience in an issue. Groups this is likely to matter for:
Two parts that work together. Shipping both is the strongest option.
A browser or OS setting that forces dynamic-range-limit to standard or constrained with user-level !important priority, so author styles cannot undo it. This is the direction the spec editor suggested in #11790 (“always treat no-limit as constrained-high”).
Same model as prefers-reduced-motion: the system setting handles rendering, and the media feature lets developers redesign for the people who asked. Two candidate names are offered on purpose, to invite the naming debate rather than fight it.
Option A: levels
@media (prefers-dynamic-range: standard) {
img, video { dynamic-range-limit: standard; }
.hero-video { display: none; } /* show the SDR poster instead */
}
Values: standard | constrained | no-preference.
dynamic-range-limit’s three values, and onto Apple’s three rendering styles (standard, constrained HDR, full HDR).constrained and standard look clearly different in Chrome, so the middle level is real and useful.dynamic-range: standard and prefers-dynamic-range: standard differ by one word, and the wrong one fails silently.prefers-contrast: more | less | custom | no-preference.Option B: on/off
@media (prefers-reduced-peak-brightness: reduce) {
img, video { dynamic-range-limit: standard; }
}
Values: reduce | no-preference. Alternative name: prefers-reduced-highlights.
prefers-reduced-motion, prefers-reduced-transparency, prefers-reduced-data.Audio solved the same problem: one segment much louder than everything around it.
| Audio | HDR screens | |
|---|---|---|
| Measure | LUFS (ITU-R BS.1770), perceived loudness relative to the programme | Nits and HDR headroom. No agreed measure of a perceived brightness jump. |
| Content standard | EBU R128, ATSC A/85 | ITU-R BT.2408 (graphics white at 203 nits), mostly ignored outside broadcast |
| Law | US CALM Act (2010): ads may not be louder than the programme | None |
| Playback normalization | Spotify, Apple Music and YouTube adjust every track | None. Browsers render HDR as the file asks. |
| User preference | Spotify: Loud, Normal, Quiet, or off | None |
Lessons:
standard / constrained / no-limit.“OS-level dimming is enough.” (Raised in #11790.) For pure rendering, a browser or OS cap is the best protection, which is why part 1 of this proposal exists. But dimming alone falls short:
prefers-reduced-motion was still added, because the system can slow animations down but only the developer can redesign them.“We already have dynamic-range.” That query describes the hardware. It is true on an HDR laptop whether the person loves HDR or gets a headache from it. Motion follows the same split: the hardware decides whether animation is possible, and prefers-reduced-motion says whether the person wants it.
Fingerprinting. Every prefers-* feature adds a bit of entropy. prefers-reduced-motion, prefers-contrast and prefers-reduced-transparency all shipped anyway. If the feature only matches on HDR-capable screens (open question 4), it adds nothing on SDR screens.
Live demo: a recreated inbox with the real logo, a toolbar to switch between “Today (no limit)”, “Constrained” and “If my preference were respected”, and a side-by-side tile of the same pixels as normal white, full HDR and capped. Needs an HDR screen and Chrome, Edge 136+ or Safari 26+. Screen recordings do not capture the difference.
prefers-reduced-strobing, a stalled photosensitivity preference.standard or constrained?Specs and discussions
Browser support and usage
Native platforms
Graphics white and loudness