前言
后面针对 Web Components 学习了一些根本的理论知识,咱们理解到的概念有:
- Custom Elements
- Shadow DOM
- Templates
- Slots
以及和这些概念相干的子知识点。
理论知识基本上够用了,从当初开始咱们须要将实践使用到实际中,让实践为实际服务。明天,咱们就应用 Web Components 的相干常识来实现 MyCard 的制作,原型呢就以咱们人人都有的身份证做参照吧。
最终实现的根本布局成果如下:
应用 Templates 布局
这里咱们应用 HTML 模板将布局先构建进去,代码如下:
<template id="card_layout"> <style> * { box-sizing: border-box; } :host { display: inline-block; width: 400px; height: 240px; border: 1px solid black; border-radius: 10px; box-shadow: -2px -2px 5px 0px #7a8489; } .container { display: flex; flex-direction: column; padding: 10px; height: 100%; } .card-body { flex: 1; display: flex; } .card-footer { padding: 10px 0; } .main-info { flex: 2; } .photo { flex: 1; display: flex; align-items: center; } .photo img{ width: 100%; } .info-row { display: flex; padding-top: 15px; } .info-column { display: flex; align-items: center; } .info-title { padding: 0 10px; color: #0e5bd3; font-size: 12px; word-break: keep-all; } .info-content { letter-spacing: 2px; } </style> <div class="container"> <div class="card-body"> <div class="main-info"> <div class="info-row"> <div class="info-column"> <div class="info-title">姓名</div> </div> <div class="info-content">编程三昧</div> </div> <div class="info-row"> <div class="info-column"> <div class="info-title">性别</div> <div class="info-content">男</div> </div> <div class="info-column"> <div class="info-title">民族</div> <div class="info-content">汉</div> </div> </div> <div class="info-row"> <div class="info-column"> <div class="info-title">出世</div> <div class="info-content">2022</div> </div> <div class="info-column"> <div class="info-title">年</div> <div class="info-content">12</div> </div> <div class="info-column"> <div class="info-title">月</div> <div class="info-content">12</div> </div> <div class="info-column"> <div class="info-title">日</div> </div> </div> <div class="info-row"> <div class="info-column"> <div class="info-title">住址</div> </div> <div class="info-content">xx省xx市xx区xx街道xx小区xx楼xx单元xx楼xx室</div> </div> </div> <div class="photo"> <img src="./static/photo.jpg"> </div> </div> <div class="card-footer"> <div class="info-row"> <div class="info-column"> <div class="info-title">公民身份号码</div> </div> <div class="info-content">12345678901234567X</div> </div> </div> </div> </div></template>
创立自定义元素
应用咱们后面学习过的办法,创立一个根本的自定义元素 my-card
,在自定义组件中引入 Templates 布局,代码如下:
class MyCard extends HTMLElement { constructor () { super(); this.shadow = this.attachShadow({mode: "open"}); let tempEle = document.getElementById("card_layout"); this.shadow.appendChild(tempEle.content); }}customElements.define("my-card", MyCard);
应用自定义元素
在 HTML 的 body 中引入 my-card
标签:
<my-card></my-card>
总结
最终实现的成果如文章结尾所示。
在这篇文章中,咱们只应用 Custom Elements 和 Templates 实现了根本布局和款式,实用价值根本为零。
在后续中,会退出 Slots 让自定义元素实现可复用的成果。
~
~ 本文完,感激浏览!
~
学习乏味的常识,结识乏味的敌人,塑造乏味的灵魂!
大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢送关注,心愿大家多多指教!