CSS scan Media Feature

Beginner
⏱️ 6 min read
📚 Updated: Jul 2026
🎯 4 Examples
Media Queries

What You’ll Learn

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.

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.

📝 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 */
@media tv and (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.
@media (grid) Layout capability — whether the device supports CSS Grid layout.

Basic Example

scan-basic.css
body {
  background-color: #f1f5f9;
}

@media (scan: progressive) {
  body {
    background-color: #dbeafe;
  }
}

@media (scan: interlace) {
  body {
    background-color: #fef3c7;
  }
}

Default Value

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.

Related Topics

  • resolution — pixel density queries
  • print — printed output media type
  • grid — CSS Grid layout capability
@media (scan: progressive) @media (scan: interlace) @media tv and (scan: interlace)

⚡ Quick Reference

QuestionAnswer
Feature namescan
What it measuresFrame scanning method (progressive vs interlaced)
Valuesprogressive, interlace
Most common todayprogressive
Typical use caseTV browsers, legacy displays, reduce flicker
Pair withtv media type for television output
Browser supportLimited — treat as progressive enhancement

When to Use scan

Reach for scan when the display’s frame-drawing method affects readability:

  • TV web apps — Simplify layouts on interlaced TV output.
  • Reduce flicker — Disable or slow CSS animations on interlaced screens.
  • Increase contrast — Use bolder colors and thicker borders on interlaced displays.
  • Legacy hardware — Support set-top boxes or embedded browsers that report interlace.
  • Educational demos — Teach how media features describe device capabilities beyond width and height.

👀 Live Preview

This block is gray by default, blue on scan: progressive, and amber on scan: interlace. Most browsers will show the progressive (blue) style:

Scanning Method Demo Your display’s scan mode determines the color Default: gray · Progressive: blue · Interlace: amber

Examples Gallery

Practice scan with progressive backgrounds, interlace colors, TV pairing, and animation reduction.

📜 Core Patterns

Target progressive and interlaced scanning with the scan media feature.

Example 1 — Progressive scan background

Apply a blue background when the display uses progressive scanning:

scan-progressive.css
body {
  background-color: #f1f5f9;
}

@media (scan: progressive) {
  body {
    background-color: #dbeafe;
  }
}
Try It Yourself

How It Works

Corrected from the old reference’s invalid @media scan(progressive) syntax. Most modern devices match this query.

Example 2 — Interlace-friendly colors

Use warm, high-contrast colors on interlaced displays:

scan-interlace.css
body {
  background-color: #fff;
  color: #1e293b;
}

@media (scan: interlace) {
  body {
    background-color: #fef3c7;
    color: #78350f;
  }
}
Try It Yourself

How It Works

Interlaced screens can struggle with very thin lines and low contrast. Warmer backgrounds with darker text improve readability.

Example 3 — TV with interlaced scanning

Combine the tv media type with scan: interlace for television output:

scan-tv.css
.banner {
  padding: 1rem;
  background: #334155;
  color: #f8fafc;
}

@media tv and (scan: interlace) {
  .banner {
    background: #7c2d12;
    border: 2px solid #fbbf24;
  }
}
Try It Yourself

How It Works

The tv media type narrows the query to television devices. Adding scan: interlace targets only interlaced TV rendering.

Example 4 — Disable animation on interlace

Stop pulsing animations on interlaced displays to reduce flicker:

scan-motion.css
.pulse {
  animation: pulse 1.5s ease-in-out infinite;
}

@media (scan: interlace) {
  .pulse {
    animation: none;
    background: #16a34a;
  }
}
Try It Yourself

How It Works

Fast opacity changes can flicker on interlaced screens. Disabling animation is a practical, user-friendly fallback.

🛠 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.

⚠️ Common Pitfalls

  • Invalid syntax@media scan { } and scan(progressive) are wrong; use (scan: progressive).
  • Calling it a propertyscan 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.

♿ 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.

🖥 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.

Low Practical reach
scan media feature Limited support

Bottom line: Learn the syntax, but rely on strong defaults. Pair with prefers-reduced-motion for broader motion accessibility.

🎉 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.

💡 Best Practices

✅ Do

  • Use (scan: progressive)
  • Provide base fallbacks
  • Pair with tv media type
  • Reduce motion on interlace
  • Test on TV browsers

❌ Don’t

  • Use @media scan { }
  • Call it a CSS property
  • Rely on it for layout
  • Expect desktop interlace
  • Skip prefers-reduced-motion

Key Takeaways

Knowledge Unlocked

Five things to remember about scan

Use these points when targeting display scanning methods.

5
Core concepts
I 02

interlace

Older TVs.

Value
() 03

(scan: …)

Correct syntax.

Syntax
tv 04

tv and scan

TV pairing.

Pattern
! 05

Fallbacks

Always needed.

Pitfall

❓ 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.

Practice in the Live Editor

Open the HTML editor and experiment with @media (scan: progressive) and (scan: interlace).

HTML Editor →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful