Web Components是一个汇集html,css,js的一个可复用组件。
这样开发者就能够在网络上经过插件或组件的形式分享本身的代码片断(具备独立的功能),也能够理解成web组件或插件。css
定义:浏览器将模板、样式表、属性、JavaScript代码等,封装成一个独立的DOM元素。外部的设置没法影响到其内部,而内部的设置也不会影响到外部,与浏览器处理原生网页元素(好比<video>
元素)的方式很像html
<!DOCTYPE html> <html> <head> <title>Shadow DOM</title> <style> button { font: 18px Century Schoolbook; border: thin solid gray; background: rgba(200, 200, 200, 0.5); padding: 10px; } </style> </head> <body> <div class="container"></div> <script> var host = document.querySelector('.container'); var root = host.createShadowRoot(); root.innerHTML = '<p>How <em>you</em> doin?</p>' </script> </body> </html>
temp.htmlweb
<script> var proto = Object.create(HTMLElement.prototype); proto.createdCallback = function() { var name = this.getAttribute('name'); this.innerHTML = '欢迎来到web组件, <b>' + (name || '?') + '</b>'; }; document.registerElement('say-hi', {prototype: proto}); </script>
temp2.html浏览器
<template id="t"> <style> ::content > * { color: red; } </style> <span>I'm a shadow-element using Shadow DOM!</span> <content></content> </template> <script> (function() { // 指向被加载的网页 var importDoc = document.currentScript.ownerDocument; // 定义并登记<shadow-element> var proto2 = Object.create(HTMLElement.prototype); proto2.createdCallback = function() { var template = importDoc.querySelector('#t'); var clone = document.importNode(template.content, true); var root = this.createShadowRoot(); root.appendChild(clone); }; document.registerElement('shadow-element', {prototype: proto2}); })(); </script>
shadow.html网络
<link rel="import" href="temp.html"/> <link rel="import" href="temp1.html"/>
直接经过link的方式引入app