Home >Web Front-end >JS Tutorial >ShadowDOM: The Underrated Gem Every Web Developer Should Know
In the world of web development, developers are often tasked with creating components that need to be reusable and independent of the environment they are placed in. This is where Shadow DOM comes into play—a technology that allows developers to encapsulate the internal structure of an element so it remains unaffected by the external styles or scripts around it.
But why is this important? And how has it transformed the user experience for my product LiveAPI? Let’s dive into it!
Shadow DOM is a web standard that provides a way to isolate a piece of the DOM (Document Object Model) within a host element. This isolation means that the internal structure and styling of the shadow tree are kept separate from the rest of the page. In simple terms, it’s like creating a mini-DOM within your DOM that is protected from the outside world.
With Shadow DOM, you can define a component’s HTML, CSS, and JavaScript in a way that ensures it doesn’t clash with other parts of the page. This makes it an essential tool for building reusable, modular, and scalable components.
LiveAPI is a product which I'm developing that helps to build API documentations instantly, by just connecting your Git repositories.
To make the generated documentations interactive, we developed LiveAPI widget which can be embedded. This is where our challenge came in.
In the initial phase we faced a significant challenge when embedding our LiveAPI widget across various websites. Our widget was designed to execute API requests and display the results in a user-friendly way. However, without Shadow DOM, we found that the widget would misbehave in some contexts due to conflicts with other page styles.
Here’s what went wrong:
This is where Shadow DOM came to our rescue. By encapsulating our widget within a shadow tree, we ensured that:
As a result, we were able to create a seamless, consistent experience for our users, regardless of where they placed the widget.
Let’s explore how you can use ShadowDOM in your projects.
To start using ShadowDOM, you'll need to create a shadow root on an existing element. You can achieve this by calling the attachShadow() method on the element you want to attach the shadow DOM to.
Here's an example of how to create a shadow root for an HTML element:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ShadowDOM Example</title> </head> <body> <div> <p>In this example:</p> <ul> <li>The attachShadow() method creates a shadow root on the #shadow-host element.</li> <li>The mode: 'open' option means that the shadow DOM is accessible via JavaScript (you can also use mode: 'closed' to make it inaccessible).</li> <li>Inside the shadow root, we define some CSS and HTML that will be encapsulated within the shadow DOM.</li> </ul> <h4> 2. <strong>Accessing the Shadow DOM</strong> </h4> <p>If you set the shadow DOM’s mode to open, you can access the shadow tree via JavaScript. Here’s an example of accessing and modifying the shadow DOM:<br> </p> <pre class="brush:php;toolbar:false"><script> const shadowHost = document.getElementById('shadow-host'); const shadowRoot = shadowHost.shadowRoot; // Accessing the shadow root // Modify the shadow DOM const paragraph = shadowRoot.querySelector('p'); paragraph.textContent = "The shadow DOM content has been updated!"; </script>
In this code:
element and changing its text.
Let's try to style the component inside the ShadowDOM. This will be isolated from the rest of the site.
<script> const shadowRoot = host.attachShadow({mode: 'open'}); shadowRoot.innerHTML = ` <style> p { color: red; font-weight: bold; } div { background-color: lightgray; padding: 10px; border-radius: 5px; } </style> <div> <p>This paragraph is styled inside the shadow DOM.</p> </div> `; </script>
Here, the p and div styles are scoped to the shadow DOM, meaning they won’t affect any elements outside the shadow tree. This ensures that the component behaves as intended, regardless of the styles applied to the rest of the page.
In summary, Shadow DOM is a game-changer for building robust, reusable components that need to be independent of their surrounding environment. By integrating this powerful technology, we were able to create the LiveAPI widget that works on any website without issues.
If you are curious about LiveAPI, you can check it out here at hexmos.com/liveapi and try to generate a doc. It's Free to try!
The above is the detailed content of ShadowDOM: The Underrated Gem Every Web Developer Should Know. For more information, please follow other related articles on the PHP Chinese website!