Open Playground
CSS ReferencesLesson #211

CSS Pseudo-classes

A CSS pseudo-class is a keyword that can be added to a selector, to define a style for a special state of an element.

A CSS pseudo-class is a keyword that can be added to a selector, to define a style for a special state of an element.

Some common use for pseudo-classes:

  • Style an element when a user moves the mouse over it
  • Style visited and unvisited links differently
  • Style an element when it gets focus
  • Style valid/invalid/required/optional form elements
  • Style an element that is the first child of its parent

Syntax

Pseudo-classes are always denoted by a single colon (:) followed by the pseudo-class name:

Example

Example Code

css
Try it Yourself
selector:pseudo-class-name {
  CSS properties
}

The table below lists all the pseudo-class keywords in CSS:

Pseudo-classExamplesExample description
:activea:activeSelects the active link
:any-linka:anylink area:anylinkSelects any <a> or <area> element with an href attribute
:auto-fillinput:autofillSelects any <input> element with its value autofilled by the browser
:checkedinput:checked option:checkedMatches any <input> or <option> element that is checked
:defaultinput:default button:default option:defaultSelects form elements that are default in a group of related elements
:defined:definedSelects any element that has been defined (standard or custom elements)
:dir():dir(ltr) :dir(rtl)Selects any element with the specified text direction
:disabled:disabled input:disabled option:disabledSelects any element that is disabled. Most used for form elements
:emptydiv:emptySelects any element that has no children (including text nodes)
:enabled:enabled input:enabledSelects any element that is enabled. Most used for form elements
:first@page :firstRepresents the first page of a printed document (used with the @page rule)
:first-childp:first-child li:first-childSelects the element that is the first child of its parent (among a group of sibling elements)
:first-of-typep:first-of-type li:first-of-typeSelects the first element of its type among a group of sibling elements
:focusinput:focus select:focusSelects the element that gets focus. Most used for form elements
:focus-visiblebutton:focus-visibleSelects the element that gets focus (used to apply focus styles only when the keyboard is used to focus something, not the mouse)
:focus-withinform:focus-within label:focus-withinMatches an element if the element or any of its descendants gets focus
:fullscreen:fullscreenSelects any element that is currently in full-screen mode
:has()h2:has(+p)Selects h2 elements that are immediately followed by a p element, and applies the style to h2
:hovera:hover p:hoverSelects element on mouse over
:in-rangeinput:in-rangeSelect any <input> element with a value within the specified range limit
:indeterminateinput:indeterminateSelects any form element that is in an indeterminate state
:invalidinput:invalid fieldset:invalidSelects invalid form elements
:is():is(ul, ol)Selects all <ul> and <ol>elements
:lang()p:lang(it)Selects any <p> element with a lang attribute equal to "it" (Italian)
:last-childli:last-childSelects any <li> element that is the last child of its parent
:last-of-typep:last-of-typeSelects any <p> element that is the last <p> element of its parent
:left@page :leftRepresents all left-hand pages of a printed document (used with the @page rule)
:linka:linkSelects any unvisited link
:modal:modalSelects the element that is in a modal state
:not():not(p)Selects any element that is not a <p> element
:nth-child()p:nth-child(2)Selects any <p> element that is the second child of its parent
:nth-last-child()p:nth-last-child(2)Selects any <p> element that is the second child of its parent, counting from the end
:nth-last-of-type()p:nth-last-of-type(2)Selects any <p> element that is the second <p> element of its parent, counting from the end
:nth-of-type()p:nth-of-type(2)Selects any <p> element that is the second <p> element of its parent
:only-childp:only-childSelects any <p> element that is the only child of its parent
:only-of-typep:only-of-typeSelects any <p> element that is the only <p> element of its parent
:optionalinput:optional select:optional textarea:optionalSelects any <input>, <select>, or <textarea> elements without a "required" attribute
:out-of-rangeinput:out-of-rangeSelects any <input> element with a value outside the specified range limit
:placeholder-showninput:placeholder-shown textarea:placeholder-shownSelects any <input> or <textarea> element that is currently displaying placeholder text
:popover-open:popover-openSelects any element that is in a showing popover state
:read-onlyinput:read-onlySelects input elements with the "readonly" attribute specified
:read-writeinput:read-writeSelects editable input elements
:requiredinput:requiredSelects input elements with the "required" attribute specified
:right@page :rightRepresents all right-hand pages of a printed document (used with the @page rule)
:root:rootSelects the document's root element
:scope:scopeSelects elements that are a reference point, or scope, for selectors to match against
:state():state()Selects custom elements that have the specified custom state
:target:targetSelects the current active target element
:user-invalid:user-invalidSelects any form element with an invalid value (after the user have interacted with it)
:user-valid:user-validSelects any form element with a valid value (after the user have interacted with it)
:validinput:validSelects all input elements with a valid value
:visiteda:visited area:visitedSelects all visited links
:where():where(ol, ul)Selects all <ul> and <ol>elements


Interactive Code Examples

Example 1

css
Try it Yourself
CSS syntax and property demonstration.
selector:pseudo-class-name {
  CSS properties
}