Questions
28 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?
28 / 50

What is the purpose of the :placeholder-shown pseudo-class?

Understanding the :placeholder-shown Pseudo-Class in CSS

The :placeholder-shown pseudo-class in CSS targets input or textarea elements that are currently displaying their placeholder text. This allows you to style elements differently when they are empty and showing a placeholder.

Key Points About :placeholder-shown
  1. 1

    Applies only to form elements with a placeholder attribute that is currently visible.

  2. 2

    Helps indicate an empty state visually or apply custom styling when input is not yet filled.

  3. 3

    Once the user enters text, the element no longer matches :placeholder-shown.

Example: Using :placeholder-shown

In this example, inputs with visible placeholders have a dashed gray border and light gray background. When the user types into the input, the border turns solid green and the background becomes light green, providing a clear visual cue.

Best Practices
  1. 1

    Use :placeholder-shown to differentiate empty inputs from filled inputs.

  2. 2

    Combine with transitions for smooth visual feedback as the user types.

  3. 3

    Do not rely solely on color; provide additional cues for accessibility.

  4. 4

    Test across browsers, as placeholder behavior may vary slightly.

Difficulty: 3/10
Topics: form placeholder styling, user experience, CSS pseudo-classes

Scenario Questions

0-2 years experience
  1. 1

    How would you style a form input to turn its border red only when the placeholder is visible, but revert to gray when the user starts typing?

  2. 2

    What happens if you apply :placeholder-shown to an input that already has text in it — does the style still apply?

2-5 years experience
  1. 1

    A form looks broken on mobile: the placeholder text is invisible, but the input border is still red. What could be causing this, and how would you debug it using :placeholder-shown?

  2. 2

    We’re seeing inconsistent placeholder styling across Safari and Chrome. How would you approach making it consistent without breaking other form elements?

5-8 years experience
  1. 1

    We’re building a reusable form component library and want to support dynamic placeholder text. How would you design the CSS to ensure :placeholder-shown works reliably across all input types without requiring developers to write custom styles each time?

  2. 2

    A legacy form uses inline styles and JavaScript to toggle placeholder appearance. How would you migrate this to use :placeholder-shown while maintaining accessibility and performance?

8+ years experience
  1. 1

    Our design system has hundreds of forms across 12 products, and placeholder styling is inconsistent. How would you architect a scalable, maintainable solution using :placeholder-shown that can be adopted across teams without breaking existing behavior?

  2. 2

    We’re planning to deprecate legacy placeholder JavaScript hacks. What migration strategy would you propose to ensure zero UX regression, especially for users with assistive technologies, while adopting :placeholder-shown at scale?

Follow-up Questions

  • What happens if you apply :placeholder-shown to a textarea that has no placeholder attribute?
  • How would you test that your placeholder styles are working correctly across browsers?
  • Why might a user see unexpected styling on a filled input even when you used :placeholder-shown?