文章目录
Web Component 包含了以下三个技术:
- Custom Element: 可以定义自定义的元素,如
<my-button></my-button>
,特点是包含一个中划线-
- ShadowDOM: 封装html和css
- HTML Templates: 使用
<template>
标签来定义一个html fragment,但是他们不立即渲染,只有用到他们的时候才会渲染。 - (未实现)HTML Modules
需要注意的是,上面的技术都是独立的,就是可以单独使用其中一种技术,也可以结合起来使用,还可以结合现在类似React、Vue等库来使用。
Reference
Custom Element
我们可以通过浏览器提供的API来定义自定义的html标签,实现类似原生<section>
、<video>
等功能。
与原生html标签不同的是,自定义的标签具有中划线-
,如:<my-slider>
。(可以参考youtube的html源码,里面多处用到Custom Element)
Custom-Element可以定义他们自己的语义、标志、行为,并且可以跨浏览器和框架运行。
1 | class myButton extends HTMLElement { |
Shadow DOM
Shadow DOM 可以用来封装 DOM,可以让用户更好地与其他html分离html fragment(类似组件化)
一个Shadow DOM 可以包含html代码、css样式等。
对比与 Light DOM:
- Shadow DOM 不能使用
document.querySelector
或者element.querySelector
来获取,需要使用shadowRoot.querySelector
来获取里面的元素 - shadowRoot 是一段html fragment
1 |
|
HTML Template
使用<template>
可以定义 HTML Template,在<template>
中的代码不会马上渲染,而是在后面使用,可以提高代码的复用性
1 | <template id="book-template"> |
1 | const books = [{ |