伪元素:似子元素,而非完全如此
让我们来看一个包含子元素的容器:
<div class="container"> <div>item</div> <div>item</div> <div>item</div> </div>
如果我们添加如下样式:
.container::before { content: "x"; }
效果相当于:
<div class="container"> [[[ ::before 伪元素 ]]] <div>item</div> <div>item</div> <div>item</div> </div>
伪元素的行为在大多数情况下类似于子元素。然而,一个重要的区别是,除了创建它的选择器(或类似的选择器,例如 ::before
或 ::after
)之外,没有其他选择器能直接选中它。
例如,假设我们将容器设置为 2x3 网格,每个子元素为药丸状设计:
.container { display: grid; grid-template-columns: 1fr 1fr; grid-gap: 0.5rem; } .container > * { background: darkgray; border-radius: 4px; padding: 0.5rem; }
如果没有伪元素,效果如预期。但添加伪元素后,你会发现它参与了网格布局,这可能出乎意料。伪元素通常用于装饰性目的,参与内容布局显得有些奇怪。
请注意,.container > *
选择器没有使伪元素也变为深灰色,因为你无法通过这种方式选择伪元素。这是另一个需要注意的小问题。
在日常开发中,伪元素通常使用 position: absolute
进行装饰性操作:
.container::before { content: ""; position: absolute; /* 装饰性样式 */ }
在这种情况下,你可能根本不会注意到伪元素的存在。虽然它在技术上仍然是子元素,参与了DOM结构,但它不会参与网格布局。这并非 CSS Grid 独有的现象,在 Flexbox 中,伪元素也会成为 Flex 项目。你可以随意使用浮动或其他布局方式来控制伪元素。
开发者工具清楚地显示伪元素在 DOM 中类似于子元素。
还有一些其他需要注意的问题:
其一是 :nth-child()
选择器。你可能会认为,如果伪元素是子元素,它们会影响 :nth-child()
计算,但事实并非如此。这意味着:
.container > :nth-child(2) { background: red; }
无论是否存在 ::before
伪元素,都会选择相同的元素。::after
、:nth-last-child
等选择器也是如此。这就是标题中“kinda”的原因。如果伪元素完全像子元素,它们会影响这些选择器。
另一个问题是,你无法像选择普通子元素那样在 JavaScript 中选择伪元素。document.querySelector(".container::before");
将返回 null
。如果你需要在 JavaScript 中访问伪元素的样式,可以使用 CSSOM:
const styles = window.getComputedStyle( document.querySelector('.container'), '::before' ); console.log(styles.content); // "x" console.log(styles.color); // rgb(255, 0, 0) console.log(styles.getPropertyValue('color')); // rgb(255, 0, 0)
你是否遇到过其他关于伪元素的问题?
以上是有点提醒您伪元素是孩子,有点。的详细内容。更多信息请关注PHP中文网其他相关文章!

对于Astro,我们可以在构建过程中生成大部分网站,但是有一小部分服务器端代码可以使用Fuse.js之类的搜索功能来处理搜索功能。在此演示中,我们将使用保险丝搜索一组个人“书签”


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver Mac版
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中