前端应该知道的Web Components

前端组件化的痛点

在前端组件化横行的今天,确实极大的提升了开发效率。不过有一个问题不得不被重视,拟引入的这些html、css、js代码有可能对你的其他代码造成影响。
虽然我们可以通过命名空间、闭包等一系列措施来加以防备,不过还是存在这些隐患。为了解决这些问题,有一个基本大家遗忘的技术还是可以了解一下的,
那就是Web Components。

Web Components 是什么

Web Components是一个浏览器的新功能,提供了一个面向web包括下面几个方面标准的组件模型。

你可以认为Web Components是一个可复用的用户接口部件,
属于浏览器的一部分,所以不需要一些额外的例如jQuery或者Dojo之类的工具库。
一个存在的Web Components的使用完全不需要写代码,
仅仅需要在HTML中加一个import 语句就可以了。
Web Components使用了一些新颖并且在开发中的浏览器功能。

上面提到的部分当前在浏览器中可以正常的运行,但是有好多Web Components可以用来创造的部分没有被提及。
使用Web Components 你几乎可以来做任何可以使用HTML,CSS,JS能做到的事情,并且可以更便捷的被复用。

有时候关于Web Components和谷歌的plymer之间可能会存在一些困惑
简介而论,Polymer是基于Web Components技术的一个框架,你当然可以在不适用其的情况下开发Web Components

Web Components浏览器支持性

Web Components并没有被所有浏览器来实现(截止2017年chrome已经完全支持,其他浏览器还在投票表决中),因此如果在不支持的浏览器上使用Web Components,
应该使用由google polymer开发的 polyfills来达到目的。使用之前最好通过Are We Componentized Yet查看浏览器兼容性。

Web Components 包括以下四种技术(每种都可以被单独使用)

  • Shadow DOM
    明确的定义如下:
    一种可以在document下组合多个同级别并且可以项目作用的DOM树的方法,因此可以更好完善DOM的构成
  • Custom Elements
    定义如下:
    一种可以允许开发者在document中定义并使用的新的dom元素类型,即自定义元素
  • HTML Templates
    模板没什么可说了,在标准实现之前其实我们一直都在用js来实现该方式
  • HTML Imports
    一种允许一个html文档在别的htmldocuments中包含和复用的方法

明确的文档定义如下:

  • 一种新的html元素: template
  • 关于 template 的接口: HTMLTemplateElement, HTMLContentElement (removed from spec) and HTMLShadowElement
  • HTMLLinkElement接口和 link 元素的扩展
  • 注册custom elements的接口:Document.registerElement()和对Document.createElement() and Document.createElementNS()的更新
  • 对html元素原型对象新增的生命周期回调
  • 默认为元素对象增加的新的css的伪类::unresolved
  • The Shadow DOM:ShadowRoot and Element.createShadowRoot(), Element.getDestinationInsertionPoints(), Element.shadowRoot
  • Event接口的扩展、Event.path
  • Document 接口的一些扩展
  • Web Components样式应用新的伪类::host, :host(), :host-context()

如何使用

接下看最直接的还是hello world 。直接上代码:  

index.html

   <!DOCTYPE>
<html>
    <head>
        <title>webcomponent</title>
        <link rel="import" href="./components/helloword.html" />
    </head>
    <body>
        <hellow-world></hellow-world>
    </body>
</html> 

helloworld.html

    <template>
    <style>
        .coloured {
            color: red;
        }
    </style>
    <p>the first webcompnent is  <strong class="coloured">Hello World</strong></p>
</template>
<script>
    (function() {
        // Creates an object based in the HTML Element prototype
        // 基于HTML Element prototype 创建obj
        var element = Object.create(HTMLElement.prototype);
        // 获取特mplate的内容
        var template = document.currentScript.ownerDocument.querySelector(‘template‘).content;
        // element创建完成之后的回调
        element.createdCallback = function() {
            // 创建 shadow root
            var shadowRoot = this.createShadowRoot();
            // 向root中加入模板
            var clone = document.importNode(template, true);
            shadowRoot.appendChild(clone);
        };
        document.registerElement(‘hellow-world‘, {
            prototype: element
        });
    }());
</script>

运行结果

结束语

上面就是关于WebComponents的基本介绍了,更多请移步webcomponent-demo查看。
作为一个目前都没有被浏览器全部支持的技术,当然是不会被大面积推广开来的。不过它的出现还是对组件的问题带来了一定的积极影响,
假以时日,也许会被所有浏览器全面支持,成为我们常用的一种方法。

参考文章:https://github.com/w3c/webcomponents

.

原文地址:https://www.cnblogs.com/jianxian/p/12079576.html

时间: 2024-10-09 06:24:13

前端应该知道的Web Components的相关文章

前端应该知道的SEO优化(转)

网站SEO优化分为站内.站外. 一.站内优化 1.做好HTML头标签 标题(title):标题是网页优化中相当有分量,一般网页title主要包含一些关键词.网站名称等. 关键词(keyword):重要性大家都知道!关键词设定要参考热度.百度指数等一些手段,当然选择这些的前提要与自己网站的主题相关.关键词不宜多,一般就是1-3个. 描述(description):主要是对网站的一个介绍,虽然没有前两个标签在搜索引擎蜘蛛眼中作用大,但是也是不可忽略的一个因素.用户搜索时显示在搜索引擎网页中的只有它跟

StackExchange:Web开发中你需要知道的事

在StackExchange上有人问了这样一个问题:What should every programmer know about web development?(关于Web开发,什么是所有程序员需要知道的?)里面给出的答案非常不错,所以,我翻译转载过来. 顺便说一下,StackExchange真是非常好,大家可以对同一个答案做贡献和修订,看看这个问题的修订过程你就知道了——专业的问答网站应该怎么去做.这就是我在这篇文章中也说过真正的用户体验是什么样的. 好了,下面是正文(我对原文做了一些批注

你需要知道的18个Web可用性原则

使用网格线来做网站页面结构 在你为一个有创意的网格页面框布局兴奋并尖叫的时候,你要保证你的整个网站的页面布局都在框子(Box)里边.网格结构能让访问者视线流固定在本页面,这是很关键的.一旦你将页面拉下来,页面也是很清晰简洁的 - 创造有趣的东西你需要放进优秀的设计放到网格里边. 不要忘记搜索表单 在你为一个有创意的网格页面框布局兴奋并尖叫的时候,你要保证你的整个网站的页面布局都在框子(Box)里边.网格结构能让访问者视线流固定在本页面,这是很关键的.一旦你将页面拉下来,页面也是很清晰简洁的 -

Web 设计与开发者必须知道的 15 个站点

新闻来源:catswhocode.com公司博客整整一个月没有更新了,最近一段时间,全公司都忙于两件事,为海尔集团做定制,为一个合作伙伴做 OEM,终于有了眉目.工作期间,常用到一些工具与帮助站点,今天读到一篇文章,介绍了15个对 Web 设计与开发师极端有用的站点,里面有不少也是我们一直在使用的,也许对很多人都有用,翻译出来以饷同仁. ColorCombos 配色是 Web 设计的首要大事,Color Combos 帮你预备了数千种配色方案,可以根据色调浏览选取.LIpsum Lorem Ip

网站开发人员应该知道的61件事

    作者 Hoogle, 火龙果软件 发布于:2014-01-23   有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情? 不出意料地,他得到了一大堆回答. 通常情况下,你需要把所有人的发言从头到尾读一遍.但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案.于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知". 我发现,这种概述性的问题,最适合这种集合群智.头脑风暴式的

[转载]网站开发人员应该知道的61件事

http://news.cnblogs.com/n/82363/ 网站开发人员应该知道的61件事 原文网址:http://stackoverflow.com/questions/72394 译者:阮一峰 一.界面和用户体验(Interface and User Experience) 1.1 知道各大浏览器执行Web标准的情况,保证你的站点在主要浏览器上都能正常运行.你至少要测试以下引擎:Gecko(用于Firefox).Webkit(用于Safari.Chrome和一些手机浏览器).IE(你可

使用Yeoman你必须要知道的

不得不说,这年头写JS程序变得越来越复杂了.虽然大家都为了让写JS变得更简单而创建框架.创建工具,但是感觉已经开始偏离了最初的目的. 今天来说说Yeoman,一帮人为了让写AngularJS程序更高端智能而创建的一个工具.可以利用简单的命令行操作帮你初始化一个Angular App,CSS.图片.View和JS应该放哪都帮你决定好了,连复杂的Grunt都帮你配好了.前端同志只要用"grunt serve"就可以预览你的Web App而不用配置Web服务器,用"grunt bu

[转]在做自动化测试之前你需要知道的

[转]在做自动化测试之前你需要知道的 2015-06-09 转自:在做自动化测试之前你需要知道的 什么是自动化测? 做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多.一直想动笔写一篇文章分享自动化测试实践中的一些经验.终于决定花点时间来做这件事儿. 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner.jmeter),或自己所写的一段程序,用于生成1到100个测试数据.

你需要知道的CSS3 动画技术

译自:你需要知道的CSS3 动画技术 译自:What You Need To Know About Behavioral CSS 请尊重版权,转载须注明本站链接! 译序:本文译自Smashingmagazine,但是原文讲述的内容有些浅,也不是很完整,前端观察在翻译的前提下,增加了更多的更系统的内容.如有不足之处,欢迎指正补充. 随着网络的发展,浏览器具有更强的渲染更高级代码的能力,我们正逐步实现跨越所有平台和浏览器的目标.我们不但可以要花费更少的时间来确保我们的盒模型在IE6中看起来正常,而且