JS CSS 关于 Shadow dom 的用法

news2024/12/24 21:00:31

一、什么是 Shadow DOM

你是否好奇过,浏览器自带的元素的样式是如何实现的,例如 videoinput ,又或者在某些网站中看到一些非浏览器自带且没见过的元素?
如果你打开 F12 查看定位该元素的信息,你会发现啥都没看到!
其实它只是默认情况下被设置隐藏了,这里可以打开控制面板,按住 F1,将 Show user agent shadow DOM 勾选即可:
在这里插入图片描述
在这里插入图片描述
这便是 Shadow DOM 技术,如果你看到了一些非原生标签,它也是用到了 Shadown DOM ,下面我将简单介绍它的用法。

二、为什么要用 Shadow DOM ?

Shadow dom 可以将某个 UI 功能封装起来,同事与外界保持隔离。即外部样式如选择器无法改变里面的样式,
这本质上就是一个组件开发思维。

三、Shadom DOM 的用法

Shadom DOM 的用法十分简单,如果你会 Vue 或者 React,那就更容易了,这其实就是一个自定义组件的过程。

3.1 第一种方式

自定义一个名为 my-text 的组件,代码如下:

<body>
  <h2>你好,John</h2>
  <my-text name="John"></my-text>
  <script>
    // 使用 Shadow DOM 方式1: 以自定义组件的方式来创建。
    class MyText extends HTMLElement {
      connectedCallback() {
        const shadow = this.attachShadow({ mode: 'open' });
        shadow.innerHTML = `<p>Hello, ${this.getAttribute('name')}</p>`;
      }
    }
    customElements.define('my-text', MyText);
  </script>
</body>

效果如图:
在这里插入图片描述

3.2 第二种方式

将 Shadown dom 组件代码载到某个元素里,代码如下:

<body>
  <div id='app'></div>
  <script>
    // 使用 Shadow DOM 方式2:挂载到某个元素下面,
    const element = document.getElementById('app');
    // 创建 Shadow,参数 mode 表示是否可被 JS 访问,open 可访问,closed 相反。 
    const shadow = element.attachShadow({ mode: 'open' });
    // 创建 Shadow dom 并挂载到 Shadow 中。
    const span = document.createElement('span');
    span.innerText = 'Hello,world';
    shadow.appendChild(span);
  </script>
</body>

效果如图:
在这里插入图片描述

完!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud Alibaba 完整使用及与各中间件集成

目录 前言 官方中文文档 使用版本 spring 中间件 使用到的组件与功能 环境安装 虚拟机 nexus nacos 集成过程 工程搭建 父工程搭建 子工程 服务集成 nacos 配置文件&#xff1a; 服务注册与发现-discovery 服务注册 启动 服务发现 测试 配置管理-config…

网络安全是一个好专业吗?

前言 网络安全作为一个专业领域&#xff0c;在当今数字时代正变得越发重要和关键。无论是企业还是个人&#xff0c;面对着越来越频繁的网络威胁和攻击&#xff0c;网络安全领域的专业人员扮演着至关重要的角色。那么&#xff0c;从一个资深网安工程师的角度来看&#xff0c;网…

nest context.switchToHttp().getRequest() 获取不到user

把你该死的Public注释掉&#xff0c;这玩意开了后不走JWT验证token&#xff0c;所以拿不到那该死的user。

pdf怎么合并在一起?软件操作更高效

PDF格式已经成为了许多文档和表格的首选格式。然而&#xff0c;当你需要合并多个PDF文件时&#xff0c;可能会遇到一些麻烦&#xff0c;在本篇文章中&#xff0c;我们将向您介绍一种简单易用的方法来合并PDF文件。 以下是可以用来合并PDF文件的软件&#xff1a; - PDF转换器&a…

当你在浏览器中输入 URL 时会发生什么?

下面的图解说明了步骤。 1.Bob 在浏览器中输入 URL 并按下 Enter。在这个例子中&#xff0c;URL 由 4 部分组成&#xff1a; &#x1f539; 协议 - http://. 这告诉浏览器使用 HTTP 发送连接到服务器。 &#x1f539; 域名 - example.com. 这是站点的域名。 &#x1f539; 路径…

C++STL— priority_queue的使用与模拟实现

priority_queue的使用 priority_queue的介绍 优先级队列默认使用vector作为其底层存储数据的容器&#xff0c;在vector上又使用了堆算法将vector中的元素构造成堆的结构&#xff0c;因此priority_queue就是堆&#xff0c;所有需要用到堆的位置&#xff0c;都可以考虑使用prio…

极米十年巅峰之作极米Z7X,能带走的百吋大屏

近年来&#xff0c;随着人们娱乐消费的升级&#xff0c;家用投影仪消费市场不断扩大&#xff0c;增长速度也非常可观。据IDC最新发布的数据显示&#xff0c;2022年中国投影机市场总出货量505万台&#xff0c;同比增长7.4%。其中&#xff0c;智能投影机市场&#xff08;搭载有OS…

ChatGPT:免费可用 ChatGPT 网页版(免登录、免注册、不限制使用次数)

一、什么是chatgpt ChatGPT是一种基于GPT-3(Generative Pre-trained Transformer 3)的聊天机器人。GPT-3是由OpenAI公司开发的自然语言处理模型&#xff0c;具有非常强的语言理解和生成能力。 ChatGPT使用了GPT-3的预训练模型&#xff0c;在此基础上进行了微调和优化&#xf…

机器学习:基于Apriori算法对中医病症辩证关联规则分析

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注…

【Linux】进程间通信的有关基础概念

在以前我们使用多进程时&#xff0c;我们一般都是让父子进程分别执行各自的代码&#xff0c;进程之间几乎没有通信&#xff0c;但是实际过程中&#xff0c;进程间的通信是十分重要的的一件事情&#xff0c;一个复杂的程序一般都是有多个进程相互通信&#xff0c;协调进行来完成…

重磅发布 |《2023年消费品企业数字化转型调研白皮书》

数字经济时代&#xff0c;数字化转型对于消费品企业越来越重要&#xff0c;已成为消费品企业增加经济效益、提升竞争力的重要策略之一。随着数字化转型进入深水区&#xff0c;越来越多涉及到商业模式、业务模式和产业链生态的创新变革开始出现&#xff0c;给消费品企业带来了一…

【UE】windows包蓝图分辨率设置

【UE】windows包蓝图分辨率设置 屏幕模式&#xff08;SetFullscreenMode&#xff09; 模式说明全屏可以任意修改分辨率的全屏窗口化全屏适配显示器分辨率的全屏窗口化窗口化 分辨率修改方法(SetScreenResolution) 控制台修改分辨率方法(ExecuteConsoleCommand) 命令 &#xf…

股票量化分析工具QTYX使用攻略——挖掘主升浪中的人气个股(更新2.6.5)

搭建自己的量化系统 如果要长期在市场中立于不败之地&#xff01;必须要形成一套自己的交易系统。 行情不等人&#xff01;边学习边实战&#xff0c;在实战中学习才是最有效地方式。于是我们分享一个即可以用于学习&#xff0c;也可以用于实战炒股分析的量化系统——QTYX。 QTY…

如何有效运用测评自养号来提升阿里国际店铺权重

在阿里国际平台上提升销售并非易事&#xff0c;但是借助强大的营销策略和有效的自养号技术&#xff0c;你可以大幅度提升你的店铺销量。以下是一些具体的步骤和技巧。 1. 数据分析和市场调研 首先&#xff0c;要了解你的目标客户群体和市场趋势。分析你的销售数据&#xff0c…

chatgpt赋能python:Python编程教程:使用Python生成0到100的列表

Python编程教程&#xff1a;使用Python生成0到100的列表 Python是一种流行的编程语言&#xff0c;因其简单易学、强大而受到广泛欢迎。本文将介绍如何使用Python编程语言来生成0到100的数字列表。 什么是Python? Python是一种高级编程语言&#xff0c;由Guido van Rossum 在…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat/phpmyadmin用户首次登录系统需要注册一个用户&#xff0c;用户在登陆平…

day4-项目软硬件环境分析和通讯结构体

硬件部分 fs4412开发板 3*zigbee模块 摄像头 gprs&#xff08;用于通讯&#xff09; fs4412部分 3个USB接口分别用于zigbee协调器、usb摄像头、gprs模块 陀螺仪与加速计作为数据采集端&#xff0c;发送到HTML USB-OTG用于安卓下载 电位器用于测量电压 蜂鸣器基于PWM来…

【LeetCode中等】二进制矩阵中的最短路径

给你一个 n x n 的二进制矩阵 grid 中&#xff0c;返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径&#xff0c;返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格&#xff08;即&#xff0c;(0, 0)&#xff09;到 右下角 单元格&#xff08;即&#xff0c;(…

在TP6.0引入Bootstrap4分页样式

1. TP6.0 默认分页 默认分页驱动类文件 vendor/topthink/think-orm/src/paginator/driver/Bootstrap.php 默认分页代码 <ul class"pagination"> <li><a href"?page1">&laquo;</a></li> <li><a hre…

​Win10更新清理怎么做?

“我有一台华硕二合一笔记本电脑&#xff0c;发现它开始运行缓慢。有时&#xff0c;屏幕会卡在加载界面上&#xff0c;不得不重新启动。为了让电脑更加流畅&#xff0c;我已经将其更新到Windows 10版本&#xff0c;现在希望通过Win10更新清理来进一步提升性能。请问如何进行Win…