Home >Web Front-end >CSS Tutorial >@supports selector()

@supports selector()

Lisa Kudrow
Lisa KudrowOriginal
2025-03-18 12:06:10421browse

The @supports rule's ability to check for selector support is surprisingly robust! While often used to test for property: value pair compatibility, the selector() function extends its capabilities to evaluate selector support. This is done by simply placing the selector within the parentheses:

@supports selector(:nth-child(1 of .foo)) {
  /* Styles applied if the selector is supported */
}

The :nth-child(n of .foo) selector, a "selector list argument" compatible with :nth-child family selectors, serves as a good example. Currently, only Safari supports this specific selector.

Consider a scenario where you need to style a list with separators and zebra striping. Ideally, you'd use a selector like this to achieve the zebra striping while ignoring separators:

li:nth-child(odd of .list-item) {
  background: lightgoldenrodyellow;
}

However, due to limited browser support, you can use @supports to conditionally apply this style:

@supports selector(:nth-child(1 of .foo)) {
  li {
    padding: 0.25em;
  }
  li:nth-child(odd of .list-item) {
    background: lightgoldenrodyellow;
  }
  li.separator {
    list-style: none;
    margin: 0.25em 0;
  }
}
@supports not selector(:nth-child(1 of .foo)) {
  li.separator {
    height: 1px;
    list-style: none;
    border-top: 1px dashed purple;
    margin: 0.25em 0;
  }
}

This provides a fallback style for browsers lacking support for the advanced selector. An improved syntax, potentially using @when and @else, could simplify this:

/* Hypothetical future syntax */
@when supports(selector(:nth-child(1 of .foo))) {
  /* Styles for supporting browsers */
} @else {
  /* Fallback styles */
}

A JavaScript API also exists for testing selector support:

CSS.supports("selector(:nth-child(1 of .foo))")

This method returns true in Safari and false in Chrome (at the time of writing).

While the @supports rule is powerful, the number of CSS selectors with inconsistent cross-browser support, and the number of use cases requiring @supports for those selectors, is relatively small. Many previously problematic selectors, such as ::marker and case-insensitive attribute selectors, now enjoy broad support. Selectors like :fullscreen or :-webkit-full-screen might offer interesting and useful applications due to their unique lack of support in iOS Safari.

@supports selector()

The above is the detailed content of @supports selector(). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn