Maison  >  Article  >  interface Web  >  Comprendre le Shadow DOM et quand l'utiliser

Comprendre le Shadow DOM et quand l'utiliser

DDD
DDDoriginal
2024-10-11 10:23:29437parcourir

Understanding the Shadow DOM and When to Use It

Comprendre le Shadow DOM et quand l'utiliser

Le Shadow DOM est une fonctionnalité puissante de la boîte à outils de développement Web moderne qui aide les développeurs à encapsuler des éléments et à isoler des styles. Essentiellement, le Shadow DOM vous permet de créer un "mini-DOM" à l'intérieur d'un élément complètement isolé du reste de la page. Cela signifie que le CSS et le JavaScript à l'intérieur de ce shadow DOM n'interféreront pas avec quoi que ce soit à l'extérieur, et vice versa.

L'un des principaux problèmes résolus par Shadow DOM est la fuite de style CSS, où les styles définis pour une partie de votre application affectent par inadvertance d'autres parties, entraînant un manque de prévisibilité et un code plus difficile à maintenir. Le Shadow DOM crée une limite de style, évitant ce problème.

Voici un exemple de cas d'utilisation où le Shadow DOM est particulièrement utile :

Imaginez que vous disposez d'un widget chatbot, comme le widget Hexabot, que vous souhaitez intégrer sur plusieurs sites Web. Chacun de ces sites Web possède son propre CSS et certains styles peuvent interférer avec l'apparence et le comportement de votre widget. Par exemple, un site Web peut avoir des styles globaux pour

éléments, et si les éléments de votre widget sont simplement ajoutés au DOM, ces styles pourraient changer l'apparence de votre widget.

Pour éviter que le CSS du site Web n'entre en conflit avec celui de votre widget, vous pouvez utiliser le Shadow DOM pour encapsuler votre widget. Voici un exemple simple pour illustrer cela :

Sans Shadow DOM :

<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<link rel="stylesheet" href="./style.css">
<script src="<<WIDGET URL>>/hexabot-widget.umd.js"></script>

<div id="hb-chat-widget"></div>
<script>
  const el = React.createElement;
  const domContainer = document.getElementById('hb-chat-widget');
  ReactDOM.render(
    el(HexabotWidget, {
      apiUrl: 'https://api.yourdomain.com',
      channel: 'offline',
      token: 'token123',
    }),
    domContainer,
  );
</script>

Dans cet exemple, tous les styles globaux du site Web peuvent interférer avec l'apparence du widget.

Avec ShadowDOM :

<script crossorigin src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"></script>
<script crossorigin src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="<<WIDGET URL>>/hexabot-widget.umd.js"></script>

<div id="hb-chat-widget"></div>
<script>
  // Create the shadow root and attach it to the widget container
  const widgetContainer = document.getElementById('hb-chat-widget');
  const shadowRoot = widgetContainer.attachShadow({ mode: 'open' });

  // Create a new div inside the shadow root to serve as the rendering target
  const shadowContainer = document.createElement('div');
  shadowRoot.appendChild(shadowContainer);

  // Add styles inside the shadow root by importing the CSS file into the shadow DOM
  const linkElement = document.createElement('link');
  linkElement.rel = 'stylesheet';
  linkElement.href = './style.css';
  shadowRoot.appendChild(linkElement);

  // Render the widget inside the shadow root
  const el = React.createElement;
  ReactDOM.render(
    el(HexabotWidget, {
      apiUrl: 'https://api.yourdomain.com',
      channel: 'offline',
      token: 'token123',
    }),
    shadowContainer,
  );
</script>

Dans cette version, le widget est rendu à l'intérieur d'une racine fantôme. Cela signifie que les styles définis pour le site Web n'impacteront pas le widget, et vice versa. Les styles CSS de votre widget sont isolés, garantissant une apparence cohérente sur tout site Web dans lequel le widget est intégré.

Quand devriez-vous utiliser le Shadow DOM ?

Le Shadow DOM est utile chaque fois que vous avez besoin de créer des composants autonomes qui ne seront pas affectés par ou n'affecteront pas d'autres parties de l'application. Voici quelques scénarios dans lesquels vous devriez envisager de l'utiliser :

  • Widgets ou plugins : Lors du développement de widgets réutilisables pouvant être intégrés dans divers environnements, l'utilisation du Shadow DOM empêchera les conflits CSS externes.
  • Composants d'interface utilisateur complexes : Si vous créez des éléments personnalisés tels que des curseurs, des carrousels ou d'autres composants d'interface utilisateur pour lesquels vous souhaitez un contrôle strict sur le style.
  • Besoins d'isolation : Tout scénario dans lequel vous avez besoin d'une isolation complète de CSS et JavaScript pour éviter les interactions involontaires.

En encapsulant les styles et le comportement d'un composant, le Shadow DOM peut être un outil crucial pour les développeurs qui créent des composants Web modulaires, réutilisables et robustes.

Le widget de chat en direct Hexabot utilise cette méthode pour garantir une expérience utilisateur transparente et cohérente sur différents sites Web, sans aucune interférence de styles externes. Si vous souhaitez voir cela en action, n'hésitez pas à consulter Hexabot et à mettre en vedette le référentiel GitHub pour soutenir le projet !


 Démarrez le référentiel Hexabot Github ⭐

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn