写点什么

Web Components 系列(十)—— 实现 MyCard 的基本布局

作者:编程三昧
  • 2022 年 2 月 17 日
  • 本文字数:2410 字

    阅读完需:约 8 分钟

Web Components 系列(十)—— 实现 MyCard 的基本布局

前言

前面针对 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 让自定义元素实现可复用的效果。


~


~ 本文完,感谢阅读!


~


学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

发布于: 刚刚阅读数: 2
用户头像

编程三昧

关注

学习有趣的知识,塑造有趣的灵魂! 2019.08.30 加入

还未添加个人简介

评论

发布
暂无评论
Web Components 系列(十)—— 实现 MyCard 的基本布局