Portal¶
The <h-portal> webcomponent is a wrapper for a content that is to be rendered in a different location.
The children of the <h-portal> webcomponent will be rendered in the specififed <h-portal-target> element. The component is used internally by the Modal, Dropdown, and Tooltip webcomponents. Every <h-portal> element should have a hidden attribute as we don't want to show portaled children in the DOM.
Note: h- stands for headless. This is naming convention used for every webcomponent as they must have a two-part name.
Attributes¶
<h-portal> to attribute is used to specify the target element. There may be multiple <h-portal> webcomponents with the same to attribute. The <h-portal-target> name must be unique. There may be only one <h-portal-target> element with the same name attribute.
DOM events¶
This webcomponent dispatches the following DOM events:
Example¶
Example¶
<h-portal to="target" hidden>
<div>This content will be rendered in corresponding `h-portal-target`</div>
</h-portal>
<div>
<h-portal to="target" hidden>
<div>This content will also be rendered in corresponding `h-portal-target`</div>
</h-portal>
</div>
<div>
<h-portal-target name="target"></h-portal-target>
</div>
<h-portal to="target" hidden></h-portal>
<div>
<h-portal to="target" hidden></h-portal>
</div>
<div>
<h-portal-target name="target">
<div>This content will be rendered in corespoding `h-portal-target`</div>
<div>This content will also be rendered in corresponding `h-portal-target`</div>
</h-portal-target>
</div>
Portals also may be disabled by setting the disabled attribute to true. This is useful when you want to disable the portal for a specific element. Enabling the portal will automatically portal elements to target element.
Multiple <h-portal-target> elements¶
We can have multiple <h-portal> webcomponents targeting multiple <h-portal-target> elements.
Example¶
<h-portal to="portal-1" hidden>
<div>This content will be rendered in portal-1</div>
</h-portal>
<h-portal to="portal-2" hidden>
<div>This content will be rendered in portal-2</div>
</h-portal>
<div>
<h-portal-target name="portal-1"></h-portal-target>
</div>
<h-portal-target name="portal-2"></h-portal-target>
<h-portal to="portal-1" hidden></h-portal>
<h-portal to="portal-2" hidden></h-portal>
<div>
<h-portal-target name="portal-1"><div>This content will be rendered in portal-1</div></h-portal-target>
</div>
<h-portal-target name="portal-2"><div>This content will be rendered in portal-2</div></h-portal-target>