HTML5 Validation error with select required attribute
Use the following
<option value="">Choose</option>
Append the above series as first option
- considered valid as the first child element has no content.
Maintainer of the W3C HTML Checker (aka validator) here.
Now it seems you must use a non-breaking space to pass the validator:
<option value=""> </option>
Yeah I’m not sure when I changed that in the checker. I thought I hadn’t changed anything there in a couple of years but regardless, the checker is conforming to the HTML spec on this, because if you go to https://html.spec.whatwg.org/multipage/forms.html#the-option-element and read the Content model subsection in the head of that section, you’ll see:
If the element has no label attribute: Text that is not inter-element whitespace.
In HTML, the definition of which characters can be inter-element whitespace
characters includes just U+0020 (space), tab, U+000A (LF), U+000C FORM FEED, and U+000D (CR).
In other words, HTML essentially considers the non-breaking space character to be Text—not a space character—so putting it inside an option
element makes that option
element “non-empty” (as far as the spec is concerned).
So, doing <option value=""> </option>
isn’t really a hack; instead, it’s a perfectly reasonable way (again, as far as the spec is concerned) to make an option
non-empty.