CSS - Pseudo-class :scope



The CSS pseudo-class :scope stands for elements that serve as a reference point, allowing selectors to access elements within a given scope. This feature is especially valuable for modular and component-based web development.

  • By using :scope, CSS styles can be contained within a specific subtree of the document, preventing them from affecting other elements outside that scope.

  • This isolation ensures that the styles for a particular component do not conflict with or get overridden by the styles of other components on the same page.

  • This modularity improves code maintainability and reduces the likelihood of unintended style conflicts in complex web applications.

Syntax

:scope {
    /* css declarations */
}

CSS :scope - Basic Example

The following example demonstrates the use of :scope pseudo-class.

<html>
<head>
<style>
   :scope h1 {
   color: red;
   background-color: lightblue;
   font-size:50px
   }
   :scope p {
   color: blue;
   background-color: beige;
   font-size:20px
   }
</style>
</head>
<body>
   <div>
   <h1>This is a heading</h1>
   </div>
   <div>
   <p>This is a paragraph</p>
   </div>
</body>
</html>

CSS :scope - Identity match

When used in a stylesheet, :scope is the same as :root, since there is currently no way to explicitly specify a scoped element.

When used with DOM API, such as querySelector(), querySelectorAll(), matches(), or Element.closest(), :scope matches the element on which the method was invoked.

Example

The following example demonstrates the usage of the :scope pseudo-class and the Element.matches() method.

  • The :scope pseudo-class is used to select the current element within a complex selector.

  • In this example, we apply the color: red; style to the :scope pseudo-class, which targets the div element.

  • The Element.matches() method in script is used to check if an element matches a specific selector.

<html>
<head>
<title>:scope and Element.matches() Example</title>
<style>
   :scope {
      color: red;
      font-size: 20px
   }
</style>
</head>
<body>
   <div>
      <p>This is a paragraph.</p>
      <ul>
         <li>This is list item 1</li>
         <li>This is list item 2</li>
         <li>This is list item 3</li>
      </ul>
   </div>
   <script>
      const listItems = document.querySelectorAll('li');
      listItems.forEach(item => {
         if (item.matches(':scope')) {
            item.style.backgroundColor = 'yellow';
         }
      });
   </script>
</body>
</html>
Advertisements