The HTML <shadow> element is used as a shadow DOM insertion point. You might use it if you have created multiple shadow roots under a shadow host. It is not useful in ordinary HTML. It is used with Web Components.
The HTMLShadowElement.getDistributedNodes() method returns a static NodeList of the distributed nodes associated with this <shadow> element.
The HTML <element> element is used to define new custom DOM elements.
The HTML template element <template> is a mechanism for holding client-side content that is not to be rendered when a page is loaded but may subsequently be instantiated during runtime using JavaScript. 
The HTMLContentElement.getDistributedNodes() method returns a static NodeList of the distributed nodes associated with this <content> element.
The HTMLContentElement.select property reflects the select attribute. It is a DOMString containing a space-separated list of CSS selectors that select the content to insert in place of the <content> element.
The HTMLShadowElement interface represents a <shadow> HTML Element, which is used in Shadow DOM