背景

HTML的标签大家不陌生,都是标准定义好的,我们只管用。但是有没有想过,我们可以定义自己的标签,封装成自己的组件。

DEMO

下面的demo,用于展示浏览器版本的支持情况。查看其DOM,发现标签是browser-support,这就是自定义标签。

实现

HTMLElement

Custom Elements - browser-support

browser-support {

display: block;

}

class browserSupport extends HTMLElement {

static get observedAttributes () {

return ['chrome-version', 'opera-version', 'firefox-version', 'safari-version', 'ie-version']

}

constructor () {

super();

this.render();

}

render () {

var shadowRoot = this.shadowRoot || this.attachShadow({mode: 'open'});

var ul = document.createElement('ul');

ul.style.listStyle = 'none';

ul.style.display = 'flex';

ul.style.width = '100%';

const browserList = [

{

text: 'Chrome',

img: '../../assets/img/chrome_189x189.png',

version: this.chromeVersion

},

{

text: 'Opera',

img: '../../assets/img/opera.png',

version: this.operaVersion

},

{

text: 'Firefox',

img: '../../assets/img/ff_189x189.png',

version: this.firefoxVersion

},

{

text: 'Safari',

img: '../../assets/img/safari_189x189.png',

version: this.safariVersion

},

{

text: 'IE',

img: '../../assets/img/IE8_189x189.png',

version: this.ieVersion

}

]

var liWidth = (100 / browserList.length) + '%';

for (let i = 0; i < browserList.length; i++) {

var li = document.createElement('li');

li.style.textAlign = 'center';

li.style.width = liWidth

let logoImg = document.createElement('img');

logoImg.src = browserList[i].img;

logoImg.style.width = '60px';

logoImg.style.height = '60px';

li.appendChild(logoImg);

let p1 = document.createElement('p');

p1.style.color = '#3a3a3a';

p1.style.fontSize = 14;

p1.innerText = browserList[i].text;

li.appendChild(p1);

let p2 = document.createElement('p');

p2.style.color = '#4a4a4a';

p2.style.fontSize = 12;

p2.innerText = browserList[i].version;

li.appendChild(p2);

ul.appendChild(li)

}

shadowRoot.innerHTML = ""

shadowRoot.appendChild(ul);

}

attributeChangedCallback (attr, oldValue, newValue) {

this.render()

console.log('attributeChangedCallback trigger')

}

disconnectedCallback () {

console.log('disconnectedCallback')

}

get chromeVersion () {

return this.getAttribute('chrome-version') || ''

}

get operaVersion () {

return this.getAttribute('opera-version') || ''

}

get firefoxVersion () {

return this.getAttribute('firefox-version') || ''

}

get safariVersion () {

return this.getAttribute('safari-version') || ''

}

get ieVersion () {

return this.getAttribute('ie-version') || ''

}

}

customElements.define('browser-support', browserSupport);

自定义html标签教程,HTML自定义标签相关推荐

  1. 我的世界服务器怎么修改合成表,《我的世界》1.8原版自定义合成表教程 怎么自定义合成表...

    <我的世界>1.8原版自定义合成方法,很多玩家还不了解,今天给大家带来玩家"真名"分享的<我的世界>1.8原版自定义合成表教程,一起来看看吧. 版本要求1. ...

  2. php taglib.php,thinkphp5 taglib自定义标签教程

    学着写了一下,终于搞定了,顺便分享一下! taglib是tp框架自定义标签功能,如果你用过cms,肯定见过类似: {dede:arclist typeid='' row='' col='' title ...

  3. beautifulsoup 搜索第二个标签_自定义网站搜索教程

    1.说明 自定义网站源是为了更大限度的扩展搜索结果,如果不会自定义也没关系,使用APP中推荐源就可以了,推荐源免嗅探,直接就能播放. 2.基本原理与参数 自定义站源规则,说白了就是APP直接请求所填的 ...

  4. OneNav一为主题魔改教程(四):自定义网址内容页的Tag标签到任意位置--洞五洞洞幺

    今日主题: 自定义网址内容页的Tag标签到任意位置 声明:本篇有违"魔改"这个标题:修改之前做好笔记或备份. 在原WebStackPro的版本中, 内容页中的Tag标签块紧帖着简介 ...

  5. JAVA自定义标签教程及实例代码

    自定义标签主要用于移除Jsp页面中的java代码 快速入门:使用自定义标签输出客户机的IP 移除jsp页面中的java代码,只需要完成两个步骤: 编写一个实现Tag接口的Java类,并覆盖doStar ...

  6. java标签uri,JSP自定义标签-定制URI

    JSP自定义标签-定制URI 1 JSP自定义标签的定制URI 默认情况下JSP自定义标签的tld文件存放在WEB-INF目录下,但是我们可以使用自定义URI来改变tld文件存放的位置.重点是,需要在 ...

  7. Python使用matplotlib可视化发散棒棒糖图、发散棒棒糖图可以同时处理负值和正值、并按照大小排序区分数据、为发散棒棒糖图的特定数据点添加标签、自定义背景填充色、自定义数据点颜色

    Python使用matplotlib可视化发散棒棒糖图.发散棒棒糖图可以同时处理负值和正值.并按照大小排序区分数据.为发散棒棒糖图的特定数据点添加标签.自定义背景填充色.自定义数据点颜色(Diverg ...

  8. pandas自定义设置dataframe每个索引的标签、自定义设置索引的列名称(customize index name and index label)

    pandas自定义设置dataframe每个索引的标签.自定义设置索引的列名称(customize index name and index label) 目录

  9. pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label)

    pandas使用rename函数自定义重命名dataframe指定索引标签(位置)的名称(customize rename index value or label) 目录

最新文章

  1. html怎么使用伪类清除浮动,JS中使用 after 伪类清除浮动实例
  2. python字符串补空格输出_Python去除空格,Python中常见字符串去除空格的方法总结...
  3. 工程设计论——如何写好工程代码
  4. launch images source启动图删除后上下有黑边
  5. CI Weekly #5 | 微服务架构下的持续部署与交付
  6. 如何获取到informix for linux?
  7. delphi.about.com 上的教材链接
  8. iptable之我也不知道
  9. 《视觉SLAM十四讲-第二版-ch8,OpenCV4报错及解决》
  10. 程序员面试:未来五年的规划是怎样的?
  11. JsDroid2开发教程
  12. 大数据技术之Spark(一)Spark Core
  13. 深度链接、延迟深度链接、App Links以及关于LinkedME实现深度链接的原理解析
  14. hadoop面试题 5 ---有用
  15. 【系统相关】远程连接,凭据不工作
  16. android epub 开源,EPUB SDK
  17. 华为MateBook16投屏设置
  18. linux学习11 正则表达式与文件格式化处理
  19. Win10蓝屏原因查找以及解决
  20. clojure_深入了解Clojure系列

热门文章

  1. LeetCode知识点总结 - 377
  2. TXT阅读器 C# winfrom 开发
  3. 对外投资全球跟踪数据、直接投资流量/存量、一带一路对外投资数据(1970-2021)
  4. 智慧数据助力航天梦,Smartbi为中国航天事业添砖加瓦
  5. 如何防止PDF内容随意分享并设定文件失效日期
  6. 无线干扰的20种错误说法
  7. PAR(Projected AR)投影增强现实系统使用Vuforia
  8. MySQL server PID file could not be found! 解决办法 (李作强)
  9. JAVA 将MultipartFile file转换成为File
  10. 推荐两个VS开发工具插件