Questions
21 of 50
1What is a pseudo-class in CSS?
2How are pseudo-classes different from pseudo-elements?
3What is the syntax of a pseudo-class in CSS?
4Give some commonly used pseudo-classes.
5What does the :hover pseudo-class do?
6What’s the purpose of the :active pseudo-class?
7How does the :visited pseudo-class work for links?
8What is the :focus pseudo-class used for?
9What does the :checked pseudo-class do?
10How does the :disabled pseudo-class behave?
11What is the difference between :first-child and :first-of-type?
12How do :nth-child() and :nth-of-type() differ?
13How do you select every odd or even element using pseudo-classes?
14How can you style an element when it’s being hovered over along with its child?
15What does the :not() pseudo-class do?
16How can you use multiple pseudo-classes together?
17What is the difference between :link and :visited?
18What does the :target pseudo-class represent?
19How can you use :empty to detect empty elements?
20How does the :root pseudo-class differ from the html selector?
21What does the :valid and :invalid pseudo-class do?
22How can you use :required and :optional pseudo-classes in forms?
23What is the use of :in-range and :out-of-range?
24What does :read-only and :read-write do?
25How can you style an input field when it’s autofilled?
26How does the :focus-within pseudo-class work?
27What’s the difference between :focus and :focus-visible?
28What is the purpose of the :placeholder-shown pseudo-class?
29How can you style a checkbox when it is checked or unchecked?
30How can you style invalid form inputs without JavaScript?
31Can pseudo-classes be chained together? Give an example.
32What is the specificity of pseudo-classes compared to normal selectors?
33How can you use :not() effectively to exclude elements from styling?
34How does :has() pseudo-class work, and why is it powerful?
35Is :has() supported in all browsers?
36How does :is() differ from :where() in terms of specificity?
37How can you combine :is() or :where() with other selectors for cleaner code?
38What’s the difference between :nth-child() and :nth-last-child()?
39How can you style only the last element of a list using pseudo-classes?
40What does the :lang() pseudo-class do?
41How do you change a button’s color when hovered but not when disabled?
42How can you highlight the current section in a menu using :target?
43How can you style a form field differently when focused and valid?
44How do you style every third list item differently?
45How can you style alternate table rows without adding extra classes?
46How do you hide empty <p> tags using pseudo-classes?
47How can you style the parent when any child inside it is focused?
48How can you highlight a link only when it’s both focused and hovered?
49How can you style the first letter of only the first paragraph using pseudo-classes?
50How would you use :has() to select a <div> that contains an image?
21 / 50

What does the :valid and :invalid pseudo-class do?

Understanding the :valid and :invalid Pseudo-Classes in CSS

The :valid and :invalid pseudo-classes in CSS are used to style form elements based on their validation state. They apply automatically when form inputs have constraints like required, pattern, type, min, or max.

How They Work
  1. 1

    :valid – Selects form elements whose current value satisfies all HTML validation constraints.

  2. 2

    :invalid – Selects form elements whose current value does not meet the validation requirements.

  3. 3

    These pseudo-classes work dynamically as the user interacts with form fields, providing immediate visual feedback.

Example: Using :valid and :invalid

In this example, the email and password inputs will have a green border when their values are valid and a red border when invalid, giving users immediate feedback on the correctness of their input.

Best Practices
  1. 1

    Use :valid and :invalid to provide real-time visual feedback on form fields, improving UX.

  2. 2

    Combine with :focus or :hover for enhanced styling while interacting with the form.

  3. 3

    Always pair CSS validation feedback with HTML5 validation or JavaScript for accessibility.

  4. 4

    Test across browsers, as some older browsers may not fully support these pseudo-classes.

Difficulty: 3/10
Topics: CSS form validation, pseudo-class styling, user feedback states

Scenario Questions

0-2 years experience
  1. 1

    How would you style a required email input to turn red when the user types an invalid email, and green when it's valid, using only CSS?

  2. 2

    What happens if you apply :invalid to a text input that has no validation attributes like required or pattern?

2-5 years experience
  1. 1

    A form field is showing :invalid styles even though the user entered a valid phone number — what could be wrong, and how would you debug it?

  2. 2

    Our design team wants all form errors to use a red border, but :invalid is also styling fields that haven’t been touched yet — how do you fix that without JavaScript?

5-8 years experience
  1. 1

    You're building a dynamic form with 50+ fields that use :valid/:invalid for real-time feedback — how do you avoid performance issues or layout thrashing during user input?

  2. 2

    How would you design a reusable form component library that correctly handles :valid/:invalid states across different input types while maintaining accessibility and consistency?

8+ years experience
  1. 1

    We’re migrating a legacy form system that relies on JavaScript validation to native HTML5 validation — what are the biggest risks in relying on :valid/:invalid across browsers and assistive technologies?

  2. 2

    How would you architect a cross-team validation strategy where design, frontend, and QA teams all agree on the behavior of :valid and :invalid states, especially when legacy forms still use custom JS validation?

Follow-up Questions

  • How would you handle a case where :invalid styles conflict with your design system’s error state?
  • What happens if a form field is empty but not marked as required?
  • Why might :valid not trigger even when the input looks correct?