The scan media feature detects whether a display draws frames progressively or in interlaced lines. Learn the correct syntax and when this niche TV-focused query still matters.
01
@media
Media query.
02
progressive
Full frame.
03
interlace
Alt. lines.
04
tv
TV pairing.
05
flicker
Reduce motion.
06
fallback
Defaults.
Fundamentals
Introduction
Every screen must draw video frames somehow. Progressive scanning paints the entire frame in one pass — this is what phones, laptops, and modern TVs use. Interlaced scanning paints odd-numbered lines first, then even-numbered lines. That technique saved bandwidth on older CRT televisions but can make thin text and fast animations look shaky.
The CSS scan media feature lets you detect which method the output device uses and adjust styles accordingly — for example, toning down animations on interlaced displays.
Definition and Usage
Write @media (scan: progressive) for full-frame displays or @media (scan: interlace) for interlaced output. Pair with the tv media type when you specifically target television browsers: @media tv and (scan: interlace).
💡
Beginner Tip
Almost every device you use daily is progressive. The scan feature is mainly useful for TV and legacy hardware. Always write solid default styles first — treat scan queries as optional enhancement.
Foundation
📝 Syntax
Use (scan: progressive) or (scan: interlace) inside @media:
syntax.css
/* Progressive scanning (most modern screens) */@media(scan:progressive){/* Full-frame display styles */}/* Interlaced scanning (older TVs) */@media(scan:interlace){/* Interlace-friendly styles */}/* TV output with interlaced scanning */@mediatvand(scan:interlace){/* TV-specific interlace styles */}
Accepted Values
progressive Full frame drawn at once. Phones, laptops, modern TVs.
interlace Alternating lines per frame. Older CRT TVs, some broadcast signals.
scan vs resolution
@media (scan: interlace) How frames are drawn — “Does the display use interlaced lines?”
@media (min-resolution: 2dppx) Pixel density — “How sharp is the screen?”
scan vs grid
@media (scan: progressive) Frame drawing method — progressive vs interlaced video output.
There is no CSS default for scan queries. If no query matches, your base styles apply. In practice, nearly all modern browsers and devices behave as progressive.
Syntax Rules
Use parentheses: (scan: progressive) — not @media scan { }.
Do not use function syntax: scan(progressive) is invalid.
Only two values exist: progressive and interlace.
Combine with tv: @media tv and (scan: interlace) for television output.
Always provide base styles that work without any scan query.
Fast opacity changes can flicker on interlaced screens. Disabling animation is a practical, user-friendly fallback.
Tips
🛠 Usage Tips
Defaults first — Write styles that work without any scan query; most users never hit interlace.
Pair with tv — Use @media tv and (scan: interlace) when building TV-specific experiences.
Reduce motion — Disable animations and parallax on interlaced output.
Boost contrast — Thicker borders and larger text help on interlaced displays.
Test on real TVs — Desktop browsers rarely expose interlace mode; TV browsers are the real testbed.
Watch Out
⚠️ Common Pitfalls
Invalid syntax — @media scan { } and scan(progressive) are wrong; use (scan: progressive).
Calling it a property — scan is a media feature inside @media, not a CSS property.
Expecting desktop differences — Laptops and phones are progressive; you may never see interlace styles locally.
Critical layout dependency — Do not hide essential content behind scan queries alone.
Ignoring prefers-reduced-motion — Also respect user motion preferences alongside scan-based animation rules.
A11y
♿ Accessibility
Reduce flicker — Disable flashing or pulsing animations on interlaced displays.
Maintain contrast — Interlaced screens benefit from stronger color contrast, not weaker.
Readable text size — Avoid ultra-thin font weights that break apart on interlaced lines.
Combine with user prefs — Use prefers-reduced-motion for motion-sensitive users on all displays.
Do not rely on color alone — Scan-based color changes should not be the only way to convey information.
🧠 How scan Works
1
Browser checks output device
Reports whether the display uses progressive or interlaced scanning.
Detect
2
scan value is compared
Matches progressive or interlace in your media query.
Match
3
@media rules apply
Scan-specific colors, contrast, and motion rules take effect.
Apply
=
📺
Comfortable on every display
Content stays readable on both progressive and interlaced output.
Compatibility
🖥 Browser Compatibility
The scan media feature has limited browser support. The syntax is valid CSS, but few desktop browsers differentiate scan modes. Treat it as progressive enhancement.
⚠ Limited · Niche use
Scan media queries
Most useful on TV browsers and legacy display hardware. Desktop browsers typically report progressive.
LowPractical reach
scan media featureLimited support
Bottom line: Learn the syntax, but rely on strong defaults. Pair with prefers-reduced-motion for broader motion accessibility.
Wrap Up
🎉 Conclusion
The scan media feature targets how displays draw video frames — progressive (full frame) or interlace (alternating lines). Use @media (scan: progressive) and @media (scan: interlace) with correct parentheses syntax.
While niche today, scan queries remain valuable for TV web apps and teaching how CSS media features describe real device capabilities beyond screen width. Always provide fallbacks that work everywhere.
Use these points when targeting display scanning methods.
5
Core concepts
P01
progressive
Most common.
Value
I02
interlace
Older TVs.
Value
()03
(scan: …)
Correct syntax.
Syntax
tv04
tv and scan
TV pairing.
Pattern
!05
Fallbacks
Always needed.
Pitfall
FAQ
❓ Frequently Asked Questions
What does the CSS scan media feature do?
The scan media feature detects how a display draws each video frame. Progressive scanning draws the full frame at once; interlaced scanning draws alternating lines. Use @media (scan: progressive) or @media (scan: interlace) to tailor styles for each method.
What values does scan accept?
Two keyword values: progressive (full-frame scanning, used by almost all modern screens) and interlace (alternating-line scanning, common on older CRT TVs and some broadcast signals).
What is the difference between progressive and interlace?
Progressive displays render every line of a frame in one pass, producing a stable image. Interlaced displays render odd lines first, then even lines, which can cause flicker on fine details and fast motion — especially on older hardware.
When should I use scan in CSS?
Use it when building experiences for TV browsers, set-top boxes, or legacy displays where interlaced output still matters. Reduce animations, increase contrast, or simplify layouts on interlaced screens. Most desktop and phone browsers are progressive, so treat scan as progressive enhancement.
Is the scan media feature widely supported?
Browser support is limited. The syntax is valid CSS, but few desktop browsers differentiate scan modes today. Most devices report progressive. Always provide solid default styles and do not rely on scan queries for critical layout.