--- title: Веб-компоненты slug: Web/Web_Components translation_of: Web/Web_Components ---

{{DefaultAPISidebar("Веб-компоненты")}}

Веб-компоненты - это набор различных технологий, позволяющих создавать повторно используемые настраиваемые элементы с их функциональностью, инкапсулированной отдельно от остальной части вашего кода - и использовать их в ваших веб-приложениях.

Понятия и использование

Как разработчики, все мы знаем, что как можно больше повторного использования кода - хорошая идея. Традиционно это было не так просто для пользовательских структур разметки - подумайте о сложном HTML (и связанном с ним стиле и сценарии), которые вам иногда приходилось писать для визуализации пользовательских элементов управления UI, и о том, как их многократное использование может превратить вашу страницу в беспорядок если вы не будете осторожны.

Веб-компоненты направлены на решение таких проблем - они состоят из трех основных технологий, которые можно использовать вместе для создания универсальных настраиваемых элементов с инкапсулированной функциональностью, которые можно повторно использовать где угодно, не опасаясь коллизий кода.

Базовый подход к реализации веб-компонента обычно выглядит примерно так:

  1. Создайте класс, в котором вы указываете функциональность своего веб-компонента, используя синтаксис классов ECMAScript 2015 (дополнительную информацию см. в разделе Классы).
  2. Зарегистрируйте свой новый настраиваемый элемент с помощью метода {{domxref("CustomElementRegistry.define()")}}, передав ему имя элемента, который будет определен, класс или функцию, в которых указана его функциональность, и, необязательно, от какого элемента он наследуется.
  3. При необходимости прикрепите теневую DOM к настраиваемому элементу с помощью метода {{domxref("Element.attachShadow()")}}. Добавьте дочерние элементы, прослушиватели событий и т.д. в теневой DOM, используя обычные методы DOM.
  4. При необходимости определите HTML template, используя {{htmlelement("template")}} и {{htmlelement("slot")}}. Снова используйте обычные методы DOM, чтобы клонировать шаблон и прикрепить его к вашей теневой DOM.
  5. Используйте свой настраиваемый элемент везде, где хотите, на своей странице, как и любой обычный элемент HTML.

Учебники

Использование пользовательских элементов
Руководство, показывающее, как использовать функции настраиваемых элементов для создания простых веб-компонентов, а также рассказывает про обратные вызовы жизненного цикла и некоторые другие более сложные функции.
Использование shadow DOM
Руководство, которое рассматривает основы теневой DOM, показывает, как прикрепить теневую DOM к элементу, добавлять к теневому дереву DOM, стилизовать его и многое другое.
Использование шаблонов и слотов
Руководство, показывающее, как определить повторно используемую структуру HTML с помощью элементов {{htmlelement("template")}} и {{htmlelement ("slot")}}, а затем использовать эту структуру внутри ваших веб-компонентов.

Справка

Пользовательские элементы

{{domxref("CustomElementRegistry")}}
Содержит функции, связанные с настраиваемыми элементами, в первую очередь с методом {{domxref("CustomElementRegistry.define()")}}, используемым для регистрации новых настраиваемых элементов, чтобы их можно было затем использовать в вашем документе.
{{domxref("Window.customElements")}}
Возвращает ссылку на объект CustomElementRegistry.
Обратные вызовы жизненного цикла
Специальные функции обратного вызова, определенные внутри определения класса настраиваемого элемента, которые влияют на его поведение:
Расширения для создания пользовательских встроенных элементов
Псевдоклассы CSS
Псевдоклассы, относящиеся конкретно к настраиваемым элементам:
Псевдоэлементы CSS
Псевдоэлементы, относящиеся конкретно к настраиваемым элементам:

Shadow DOM

{{domxref("ShadowRoot")}}
Представляет корневой узел поддерева теневой модели DOM.
{{domxref("DocumentOrShadowRoot")}}
Миксин, определяющий функции, доступные для всех документов и теневых корневых узлов.
Расширения {{domxref("Element")}}
Расширения интерфейса Element, связанные с теневой DOM:
Соответствующие дополнения {{domxref("Node")}}
Дополнения к интерфейсу Node, относящиеся к теневой DOM:
Расширения {{domxref("Event")}}
Расширения интерфейса Event, относящиеся к теневой модели DOM:

HTML templates

{{htmlelement("template")}}
Содержит фрагмент HTML, который не отображается при первоначальной загрузке содержащего документа, но может отображаться во время выполнения с помощью JavaScript, который в основном используется в качестве основы для структур настраиваемых элементов. Связанный интерфейс DOM - {{domxref("HTMLTemplateElement")}}.
{{htmlelement("slot")}}
Заполнитель внутри веб-компонента, который можно заполнить собственной разметкой, что позволяет создавать отдельные деревья DOM и представлять их вместе. Связанный интерфейс DOM - {{domxref("HTMLSlotElement")}}.
Глобальный HTML атрибут slot
Назначает слот элементу в теневом дереве теневого DOM.
{{domxref("Slotable")}}
Миксин, реализованный как узлами {{domxref("Element")}}, так и {{domxref("Text")}}, определяющий функции, которые позволяют им стать содержимым элемента {{htmlelement("slot")}}. Миксин определяет один атрибут, {{domxref("Slotable.assignedSlot")}}, который возвращает ссылку на слот, в который вставлен узел.
{{domxref("Element")}} extensions
Расширения интерфейса Element, относящиеся к слотам:
Псевдоэлементы CSS
Псевдоэлементы, относящиеся конкретно к слотам:
Событие {{event("slotchange")}}
Вызывается для экземпляра {{domxref("HTMLSlotElement")}} (элемент {{htmlelement("slot")}}) при изменении узла(-ов), содержащихся в этом слоте.

Примеры

Мы создаем ряд примеров в репозитории GitHub с примерами веб-компонентов. Со временем будет добавлено больше.

Спецификации

Спецификация Статус Комментарии
{{SpecName("HTML WHATWG","scripting.html#the-template-element","<template> element")}} {{Spec2("HTML WHATWG")}} Определение {{HTMLElement("template")}}.
{{SpecName("HTML WHATWG","custom-elements.html#custom-elements","custom elements")}} {{Spec2("HTML WHATWG")}} Определение пользовательских HTML элементов
{{SpecName("DOM WHATWG","#shadow-trees","shadow trees")}} {{Spec2("DOM WHATWG")}} Определение Shadow DOM
{{SpecName("HTML Imports", "", "")}} {{Spec2("HTML Imports")}} Начальное определение HTML импорта
{{SpecName("Shadow DOM", "", "")}} {{Spec2("Shadow DOM")}} Начальное определение Shadow DOM

Совместимость с браузерами

В основном:

Для получения подробной информации о поддержке определенных функций браузером обратитесь к перечисленным выше справочным страницам.

Смотрите также