slot全局属性 <slot>标签</slot> ::slotted()伪元素 笔记240223

slot全局属性 标签 ::slotted()伪元素

MDN HTML全局属性

MDN HTML全局属性 slot

MDN HTML <slot>标签元素

MDN CSS ::slotted()为元素

MDN 使用 templates and slots

<slot>标签

<slot>标签是的 displaycontents




在Web开发中,<slot>元素和::slotted()伪元素都与Web组件(特别是Shadow DOM)有关。这些功能允许开发者创建可复用的自定义元素,这些元素可以像任何其他HTML元素一样使用,但具有封装的内部结构和样式。

  1. <slot> 元素:

<slot>元素用于在自定义元素的Shadow DOM中定义插槽,这些插槽允许主DOM(即自定义元素的常规HTML内容)中的元素被渲染到Shadow DOM中的特定位置。插槽可以具有名称(通过name属性指定)或无名称(默认插槽)。

例如,在自定义元素的Shadow DOM中,您可能有以下内容:

<div class="card"><slot name="header"></slot><div class="content"><slot></slot> <!-- 默认插槽 --></div><slot name="footer"></slot>
</div>

在主DOM中,您可以这样使用这个自定义元素:

<my-custom-element><h2 slot="header">标题</h2><p>这是一些内容。</p> <!-- 这将进入默认插槽 --><div slot="footer">页脚信息</div>
</my-custom-element>
  1. ::slotted() 伪元素:

::slotted()伪元素允许您从Shadow DOM内部选择并样式化插槽内容。换句话说,它让您能够影响那些通过插槽传递进来的元素的样式。这在您希望保持Shadow DOM的封装性,同时又需要某种程度地控制插槽内容的样式时非常有用。

例如,如果您想更改通过默认插槽传递进来的文本的颜色,您可以在自定义元素的样式表中这样做:

::slotted(*) {color: blue; /* 这将影响所有插槽的内容 */
}/* 或者更具体地针对默认插槽 */
::slotted(:not([slot])) {color: blue; /* 这将只影响默认插槽的内容 */
}

请注意,::slotted()的样式只会应用到插槽的直接子元素上。如果需要影响更深层次的子元素,您可能需要在主DOM中提供额外的样式或结构。

总的来说,<slot>::slotted()提供了强大的工具来创建可复用、可定制且封装良好的Web组件。




在您提供的代码片段中,<slot slot="slot"></slot> 似乎是一个尝试使用 <slot> 元素的示例,但它实际上是不正确的。在 HTML 和 Web 组件的上下文中,<slot> 元素通常不会带有 slot 属性,除非是在某些特定的框架或库中有特别的规定。标准的用法是,<slot> 元素可以有一个 name 属性来指定插槽的名称,如 <slot name="header"></slot>

然而,如果您在开发环境中遇到 <slot slot="slot"></slot> 这样的代码,并且它按预期工作,那么这可能是因为您正在使用的框架或库对 <slot> 元素进行了自定义处理。但在原生 Web 组件和标准的 Shadow DOM 中,这样的用法是不常见的,也可能是错误的。

至于 ::slotted(),正如我之前解释的那样,它是一个 CSS 伪元素,用于从 Shadow DOM 内部选择并应用样式到插槽的内容。但是,它应该与具体的选择器一起使用,而不是单独出现。例如:

::slotted(p) {color: red; /* 这将把通过任何插槽传递进来的 <p> 元素的文本颜色设置为红色 */
}

或者,如果您想针对具有特定 slot 属性的插槽内容应用样式(尽管这不是标准用法),您可能需要在主 DOM 中使用普通的 CSS 选择器,因为 ::slotted() 本身不支持基于 slot 属性的选择。例如:

/* 这不会工作,因为 ::slotted() 不支持属性选择器来匹配插槽的名称 */
::slotted([slot="slot"]) {color: red; /* 这将不会应用,因为选择器不正确 */
}

实际上,如果您想根据插槽的 name 属性应用样式,您应该在主 DOM 中为插槽内容指定类名或直接使用元素选择器,并在 Shadow DOM 中使用相应的 ::slotted() 选择器来匹配这些类名或元素。但是,请记住,::slotted() 只能影响插槽的直接子元素。

如果您确实看到了 <slot slot="slot"></slot> 这样的代码,并且它在您的项目中有效,我建议您查阅您正在使用的框架或库的文档,以了解这是否是该环境的特定语法或行为。在标准的 Web 组件和 Shadow DOM 中,这样的用法通常是不正确的。




在Web组件的上下文中,slot 既可以作为一个全局属性(用于分配内容到指定的插槽),也可以作为 <slot> 元素(用于在Shadow DOM中定义插槽)。而 ::slotted() 是一个CSS伪元素,用于从Shadow DOM内部选择并样式化插槽的内容。

首先,让我们澄清一下 slot 作为全局属性的用法。通常,您不会直接将 slot 属性应用于 <slot> 标签本身。相反,slot 属性是应用于自定义元素的子元素,以指示这些子元素应该被分配到哪个插槽。

例如,如果您有一个自定义元素 <my-card>,它在其Shadow DOM中定义了几个插槽:

<!-- my-card的Shadow DOM结构 -->
<div class="card"><header><slot name="header"></slot></header><main><slot></slot> <!-- 默认插槽 --></main><footer><slot name="footer"></slot></footer>
</div>

当您在常规HTML中使用 <my-card> 时,您可以通过 slot 属性将内容分配到这些插槽中:

<my-card><h1 slot="header">Welcome to My Card</h1><p>This is some default content.</p> <!-- 这将进入默认插槽 --><p slot="footer">©2023 My Company</p>
</my-card>

在这里,slot="header"slot="footer" 是全局属性,它们告诉浏览器将这些元素分配到 <my-card> 的相应插槽中。没有指定 slot 属性的元素默认会进入无名(默认)插槽。

接下来是 <slot> 元素。如上所示,<slot> 元素在自定义元素的Shadow DOM中定义了一个插槽,它可以接收来自主DOM的内容。插槽可以是命名的(通过 name 属性)或默认的(没有 name 属性)。

最后,::slotted() 伪元素允许您从Shadow DOM内部选择并应用样式到通过插槽传递进来的内容。例如:

/* 在my-card的Shadow DOM样式表中 */
::slotted(h1) {color: blue; /* 这将把通过名为"header"的插槽传递进来的<h1>元素的文本颜色设置为蓝色 */
}::slotted(p) {color: gray; /* 这将影响所有通过插槽传递进来的<p>元素,除非它们的样式被更具体地覆盖 */
}

请注意,::slotted() 只能影响直接插入到插槽中的元素。如果您需要影响更深层次的子元素,您可能需要在主DOM中提供额外的样式或结构,或者使用其他CSS组合器来增加选择器的特异性。




HTML <slot> 标签是 Web 组件技术中的一部分,特别是与 Shadow DOM 一起使用时。<slot> 元素在自定义元素的 Shadow DOM 中创建了一个占位符,该占位符可以由使用该自定义元素的主 DOM 中的内容填充。

以下是使用 HTML <slot> 标签的基本步骤:

  1. 创建自定义元素:首先,您需要定义一个自定义元素,这通常是通过使用 JavaScript 和 class 关键字扩展 HTMLElement 来完成的。

  2. 附加 Shadow DOM:为您的自定义元素附加一个 Shadow DOM。Shadow DOM 允许您将封装的结构、样式和行为与主 DOM 分离。

  3. 在 Shadow DOM 中使用 <slot>:在 Shadow DOM 的模板中,使用 <slot> 标签来定义插槽。您可以为 <slot> 元素指定一个 name 属性,以便能够将特定的内容分配给特定的插槽。

  4. 在主 DOM 中使用自定义元素:在主 DOM 中,像使用任何其他 HTML 元素一样使用您的自定义元素。要填充插槽,请将内容放在自定义元素的开始和结束标签之间,并使用 slot 属性指定要插入内容的插槽名称(如果插槽有名称的话)。

下面是一个简单的例子:

自定义元素定义

<!-- 假设这是在一个 JavaScript 文件中 -->
<script>
class MyCustomElement extends HTMLElement {constructor() {super(); // 必须首先调用 super()// 创建一个 shadow rootconst shadow = this.attachShadow({ mode: 'open' });// 创建一个插槽const slot = document.createElement('slot');slot.setAttribute('name', 'my-slot'); // 可以选择给插槽命名// 将插槽附加到 shadow DOMshadow.appendChild(slot);}
}// 定义自定义元素
customElements.define('my-custom-element', MyCustomElement);
</script>

在 HTML 中使用自定义元素

<!-- 在 HTML 文件中使用这个自定义元素 -->
<my-custom-element><p slot="my-slot">这段内容将被插入到名为 "my-slot" 的插槽中。</p><!-- 如果没有指定 slot 属性,或者 slot 属性值与任何插槽不匹配,则内容不会被插入到 Shadow DOM 中 -->
</my-custom-element>

然而,在实际情况中,您通常会在 Shadow DOM 的模板中使用 <slot>,而不是通过 JavaScript 动态创建它。这可以通过使用 <template> 元素和 innerHTML 来实现,如下所示:

<script>
class MyCustomElement extends HTMLElement {constructor() {super(); // 必须首先调用 super()// 创建一个 shadow rootconst shadow = this.attachShadow({ mode: 'open' });// 创建一个模板并添加到 shadow DOMconst template = document.createElement('template');template.innerHTML = `<div>Some internal structure</div><slot name="my-slot"></slot> <!-- 在模板中定义插槽 -->`;const node = document.importNode(template.content, true);shadow.appendChild(node);}
}customElements.define('my-custom-element', MyCustomElement);
</script>

在这个例子中,<slot name="my-slot"></slot> 是在模板字符串中定义的,然后整个模板内容被导入到 Shadow DOM 中。这种方法更常见,因为它允许您以更声明式的方式定义自定义元素的内部结构。







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

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

相关文章

【高德地图】Android搭建3D高德地图详细教

&#x1f4d6;Android搭建3D高德地图详细教程 &#x1f4d6;第1章 高德地图介绍✅了解高德地图✅2D地图与3D地图 &#x1f4d6;第2章 搭建3D地图并显示✅第 1 步&#xff1a;创建 Android 项目✅第 2 步&#xff1a;获取高德Key✅第 3 步&#xff1a;下载地图SDK✅第 4 步&…

照片上多余的人怎么处理?这几种方法让你的照片更完美!

照片怎么去掉多余人像&#xff1f;这是许多摄影爱好者经常遇到的问题。有时候&#xff0c;我们拍摄了一张非常美好的照片&#xff0c;但由于某些原因&#xff0c;照片中出现了不希望出现的人物。这时候&#xff0c;我们该如何处理呢&#xff1f;下面&#xff0c;我将分享几种常…

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探&#xff08;端口扫描和IP扫描&#xff09; 2、SCAPY的应用 3、Python攻击脚本&#xff08;SYN半连接…

【More Effective C++】条款22:采用op+=取代op+优势

采用operator实现operator优点&#xff1a; 降低维护成本&#xff0c;只需要维护operator即可&#xff1b;如果operator为publicoperator不需要称为class的友元&#xff1b;通过模板的方式自动实现operator版本&#xff1b;提供两种操作方式&#xff0c;operator效率高&#x…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

冲突管理最佳实践

任何团队都无法避免冲突&#xff0c;如何有效管理冲突&#xff0c;将冲突转化为团队成长和凝聚的动力&#xff0c;是任何一个团队管理者的必修课。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 冲突在任何组织中都不可避免&…

计算机网络中的与或非运算

三种基本逻辑运算关系 搭建中小公司网络&#xff0c;根据网址计算&#xff0c;用户的人数 需要ip和掩码&#xff0c;确定可分配的ip数 与运算电路为串联电路&#xff0c;的&#xff0c;A,B的组合情况 具体参考三种基本逻辑运算关系

图片参考网站

摄图网-正版高清图片免费下载_商用设计素材图库 (699pic.com) AIGC数字艺术素材图片-数字艺术-数字艺术图片-摄图网 (699pic.com) 花瓣网 - 陪你做生活的设计师&#xff08;创意灵感天堂&#xff0c;搜索、发现设计灵感、设计素材&#xff09; (huaban.com) 千图网-免费在线…

python视频流处理工具

在当今数字化的时代&#xff0c;视频处理应用变得越来越普遍。无论是视频流分析、实时视频处理还是视频流转码&#xff0c;都需要强大的工具来实现。Python Vidgear 库就是这样一个工具&#xff0c;它为开发人员提供了丰富的功能&#xff0c;用于处理实时视频流。本文将深入探讨…

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

Feign接口GET方式注意事项

1. GET请求方式&#xff0c;对于feign接口一定得用 RequestParam/SpringQueryMap等注解声明是路径参数&#xff0c;否则会自动识别为body params报错(controller接口则可不用&#xff0c;springmvc会自动匹配相同字段名) demo: API 层controller接口&#xff1a; 前端传参可直…

ABB触摸屏维修工控机显示屏维修CP405 A1/A0

ABB人机界面维修常见故障&#xff1a;黑屏白屏花屏&#xff0c;按触摸屏无反应或反应慢触摸不好&#xff0c;内容错乱&#xff0c;进不了系统界面&#xff0c;无背光背光暗&#xff0c;有背光无字符&#xff0c;不能通信&#xff0c;按键无无反应等均可维修。 此维修检测方法有…

geoserver 热力图样式

<?xml version"1.0" encoding"ISO-8859-1"?> <StyledLayerDescriptor version"1.0.0" xsi:schemaLocation"http://www.opengis.net/sld StyledLayerDescriptor.xsd" xmlns&…

英文输入法(C 语言)

题目 主管期望你来实现英文输入法单词联想功能&#xff0c;需求如下&#xff1a; 依据用户输入的单词前缀&#xff0c;从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列&#xff0c;如果联想不到&#xff0c;请输出用户输入的单词前缀。 注意 英…

Java设计模式 | 七大原则之单一职责原则

一、单一职责原则 基本介绍 对类来说&#xff0c;一个类应该只负责一项原则&#xff0c;如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2。 注…

常见算法解法——链表篇

链表 链表中每一个节点为一个对象&#xff0c;对象中包含两个成员变量&#xff0c;第一个是val&#xff0c;代表链表的值&#xff0c;第二个是next&#xff0c;它指向下一个节点&#xff0c;是下一个节点对象的引用。 定义链表 class ListNode:def __init__(self, x):self.v…

玩主机游戏能省去不少烦恼?+主机该购买哪台?

文/嘉兰SK 来到次世代&#xff0c;玩家们最关心的问题逐渐变成了购买的游戏能否支持升级。 各个游戏厂商也没有闲着。 此前还有标准版、黄金版、终极版、决定版等一系列。 想出很多招数。 于是很多新玩家开始疑惑&#xff1a;你们都说玩主机游戏可以省去很多麻烦&#xff0c;可…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

【机器学习】机器学习是什么?

机器学习是一种人工智能领域的技术&#xff0c;旨在使机器能够通过数据和经验来自动学习和改进。它通过构建和训练模型&#xff0c;使机器能够从输入数据中提取规律和模式&#xff0c;并根据这些规律和模式做出预测或者决策。 机器学习的核心思想是让机器通过大量的数据进行学…

springboot网站开发02-接入持久层框架mybatisPlus

springboot网站开发02-接入持久层框架mybatisPlus&#xff01;经过上一小节内容分享&#xff0c;我们的项目嵌套模式框架搭建好了&#xff0c;下面就是开始编辑具体的业务代码了&#xff0c;我们使用到了持久层框架是mybatisPlus插件。下面是一些具体的植入框架的操作步骤。 第…