:valid
is a CSS pseudo-class used to select and style form <input>
elements whose values validate according to their type specified in the type
attribute.
For example, email inputs (<input type="email">
) whose values match a valid email address pattern.
Trivia & Notes
When a number input type (<input type="number">
) is in the range of permitted values specified using the min
and max
attributes, then the :valid
pseudo-class matches, and also the :in-range
pseudo-class matches. Any styles applied using :in-range
will override the styles applied using :valid
only if the :in-range
styles come after the :valid
styles in the style sheet.
Just like other pseudo-class selectors, the :valid
selector can be chained with other selectors such as :hover
and :focus
, among others. For example, the following rule will provide focus styles for the element that is in an valid state, adding a soft green glow around it:
input:valid:focus { outline: 0; border: none; box-shadow: 0 0 3px 6px rgba(0, 200, 0, 0.3); }
You can see a live demo of this in the live demo section below.
Examples
input[type="number"]:valid { background-color: lightgreen; } input:valid { box-shadow: 0 0 3px 5px rgba(0, 200, 0, .2); }
Live Demo
The following demo shows different input types that will get a light green background color as long as the value entered in them is valid. The inputs will also get a subtle green box shadow when they are focused.
The demo also uses the :invalid
pseudo-class selector to style the inputs when the value inside them does not validate.
Browser Support
The :valid
pseudo-class is supported in Chrome 10+, Firefox 4+, Safari 5+, Opera 10+, Internet Explorer 10+ and on iOS.