Skip to content

Options ​

Internally, Van Elements use attachShadow to attach a Shadow root to the element. You can change attachShadow's options with an extra argument to the define function.

js
define("my-element", () => p("Closed root, delegating focus 🎉"), {
  mode: "closed",
  delegatesFocus: true,
});

You can read more about the Shadow root options on MDN.

Disable Shadow DOM ​

Instead of the options object, you can pass false as third argument to disable the Shadow DOM completely.

js
define(
  "van-element",
  () => p("I don't like isolation 🤗"),
  false // Passing false as 3rd argument will disable the Shadow DOM
);

Things that will stop working:

  • DOM and style isolation
  • slots

Everything else will work the exact same, including:

  • $this, mount, attr
  • all VanJS logic
  • hydration and reusability

Shadow DOM or not? ​

You can safely disable the Shadow DOM if:

  • All you want is easy hydration
  • Isolation gets in the way
  • You don't need slots

You should not disable it if:

  • You are building isolated components (component library, design system)
  • You need slots for composition