Skip to main content

HTML Guide

Bad value X for attribute “sizes” on element “source”: Bad media condition: Parse Error at Y

sizes only accepts a valid media condition list (e.g., (min-width: 600px) 50vw, 100vw); malformed media conditions or missing length values trigger this parse error.

Detailed explanation

  • Element: source in a picture or audio/video context. For responsive images, use attributes srcset, optional media, and optional sizes.
  • Attribute: sizes applies only when srcset contains width descriptors (e.g., 320w, 640w). It is a comma-separated list of:
    • One or more media conditions followed by a length (e.g., (min-width: 800px) 50vw)
    • A final fallback length with no media condition (e.g., 100vw)

Common parse errors:

  • Missing parentheses around conditions: min-width: 600px → (min-width: 600px)
  • Using invalid units or tokens: 50 (needs a length like 50vw or 50rem)
  • Missing length after a condition: (min-width: 800px)
  • Trailing commas or malformed separators
  • Using sizes while srcset uses pixel density descriptors (1x, 2x); sizes is ignored for x-descriptors and may confuse validators
  • Valid media condition syntax mirrors CSS media queries without the @media keyword. Use logical operators and, or, not per CSS Media Queries spec, and ensure spaces and colons are correct.

HTML examples

  • Correct responsive image with width descriptors and sizes

    <picture>
    <source
      type="image/webp"
      srcset="hero-480.webp 480w, hero-800.webp 800w, hero-1200.webp 1200w"
      sizes="(min-width: 1200px) 1200px, (min-width: 800px) 800px, 100vw">
    <img
      src="hero-800.jpg"
      srcset="hero-480.jpg 480w, hero-800.jpg 800w, hero-1200.jpg 1200w"
      sizes="(min-width: 1200px) 1200px, (min-width: 800px) 800px, 100vw"
      alt="Hero image">
    </picture>
  • Using viewport width units for simpler sizing

    <img
    src="photo-640.jpg"
    srcset="photo-320.jpg 320w, photo-640.jpg 640w, photo-1024.jpg 1024w"
    sizes="(min-width: 900px) 50vw, 100vw"
    alt="Sample photo">
  • Correct when using pixel density descriptors (omit sizes)

    <img
    src="avatar@1x.jpg"
    srcset="avatar@1x.jpg 1x, avatar@2x.jpg 2x"
    alt="User avatar">

Fixing common mistakes

  • Add parentheses and a length:

    <img
    src="img-800.jpg"
    srcset="img-480.jpg 480w, img-800.jpg 800w"
    sizes="(min-width: 600px) 50vw, 100vw"
    alt="Example">
  • Remove stray comma and ensure final fallback:

    <img
    src="banner-800.jpg"
    srcset="banner-400.jpg 400w, banner-800.jpg 800w"
    sizes="(min-width: 700px) 60vw, 100vw"
    alt="Banner">
  • Minimal valid document example

    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Valid sizes Attribute</title>
    </head>
    <body>
      <img
        src="pic-800.jpg"
        srcset="pic-400.jpg 400w, pic-800.jpg 800w"
        sizes="(min-width: 600px) 50vw, 100vw"
        alt="Picture">
    </body>
    </html>

Learn more:

Last updated on

Related W3C validator issues