当前位置: 首页 > news >正文

五分钟搞懂 : 和 :: 的区别

背景

在给元素添加样式时,我们是否经常会对 ::: 傻傻分不清,只能通过反复尝试来确定呢?别担心,我也是这样过来的!不过,今天我们将一劳永逸地解决这个问题,让你自信运用 CSS 伪选择器。

这篇文章将通过示例讲解 ::: 的区别,并分享一些使用它们的技巧。

:::的区别

  • : 用于表示伪类,它关注于描述一个元素的特定状态。这些状态通常与用户交互有关,比如元素被鼠标悬停(:hover)、获得焦点(:focus)、被激活(:active)等。

  • :: 用于表示伪元素,它用于创建一些不在文档树中的元素,可以通过CSS生成并加以样式化。这些伪元素是选中元素内容的一部分,或者以选中元素为参照来定位,比如在元素内容之前(::before)或之后(::after)插入内容,或者定制占位符的样式(::placeholder)。

简而言之:

  • : 用于描述 选中元素 的状态,主要涉及到用户与元素的交互(例如,当鼠标悬停在元素上时)。
  • :: 用于创建属于 选中元素的某部分 ,或是创建一些不在DOM树中的元素,这些元素是对选中元素的内容或样式的补充。。

伪类(😃

伪类用于定义元素的特定状态。它们是元素在这些状态下的抽象表示,并不对应文档树中的实际元素。伪类以冒号 : 开头,后跟伪类名称

例如:

  • :hover - 当用户将鼠标悬停在元素上时为其添加样式(注意不是点击,而是鼠标悬停)。
  • :active - 当用户点击元素时为其添加样式(即元素处于活动状态时)。
  • :visited - 为用户点击过的锚标记(链接)添加样式。
  • :focus - 为用户单击的输入字段添加样式。
  • :first-child - 选择其父元素的第一个子元素。
  • :last-child - 选择其父元素的最后一个子元素。
  • :nth-child() - 选择其父元素的第n个子元素。

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Pseudo-classes Example</title>
<style>/* 为链接添加基本样式 */a {color: blue;text-decoration: none;}/* 当鼠标悬停在链接上时改变颜色 */a:hover {color: red;}/* 当链接被点击(处于活动状态)时改变颜色 */a:active {color: green;}/* 当链接被访问过后改变颜色 */a:visited {color: purple;}/* 为输入框添加基本样式 */input[type="text"] {border: 2px solid #ddd;padding: 10px;margin: 10px 0;width: 200px;}/* 当输入框被聚焦时改变边框颜色 */input[type="text"]:focus {border-color: blue;}
</style>
</head>
<body><h2>CSS 伪类示例</h2><!-- 链接示例 -->
<p>Hover over, click or visit the link:</p>
<a href="#" target="_blank">This is a link</a><!-- 输入框示例 -->
<p>Click inside the input field:</p>
<input type="text" placeholder="Hover over me"></body>
</html>

伪元素(::)

伪元素用于样式化文档的某些部分,这些部分并不是实际的DOM元素,但可以被视为文档树的一部分。伪元素以两个冒号 :: 开头,后跟伪元素名称

例如:

  • ::before - 定位在选中元素 之前 的创建元素。
  • ::after - 定位在选中元素 之后 的创建元素。
  • ::placeholder - 定位占位符属性的值。
  • ::first-letter - 选择块级元素的第一个字母。
  • ::first-line - 选择块级元素的第一行
  • ::selection - 选择用户选中或高亮的文本部分。

代码示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Pseudo-elements Example</title>
<style>/* 为段落添加基本样式 */p {position: relative;font-size: 16px;}/* 在每个段落之前添加内容 */p::before {content: "注意:";color: red;font-weight: bold;}/* 在每个段落之后添加内容 */p::after {content: "(请仔细阅读)";color: green;font-size: 12px;}/* 自定义输入框的占位符样式 */input::placeholder {color: #888;font-style: italic;}
</style>
</head>
<body><h2>CSS 伪元素示例</h2><!-- 段落示例 -->
<p>这是一个段落。</p><!-- 输入框示例 -->
<input type="text" placeholder="请输入文本"></body>
</html

使用建议

  • 仅在必要时使用 :: :虽然大多数现代浏览器都支持使用 :: 对伪元素进行选择,但为了确保向后兼容性,对于伪元素,建议在支持CSS3的环境中使用 ::,而在需要确保老版本浏览器兼容性的情况下使用 :。
  • 仅在必要时使用 CSS 生成的内容 :伪元素如 ::before 和 ::after 可以用来添加装饰性内容,但我们应避免用它们来添加重要的内容信息。因为CSS 生成的元素不会出现在 DOM 中,因此辅助功能工具无法解析它们。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL 分库分表
  • CSS选择器(1)
  • 【Linux信号】信号的保存、信号在内核中的表示、信号集操作函数、sigprocmask、sigpending
  • PYTHON自学笔记(二)查漏补缺
  • JVM参数调优经验
  • 自己动手写一个滑动验证码组件(后端为Spring Boot项目)
  • 六、 SpringBoot 配置⽂件 ★ ✔【value的引号注意事项、@ConfigurationProperties 、】
  • 进程间通信(下)
  • 【自学安全防御】二、防火墙NAT智能选路综合实验
  • STO SS1 SS2 SLS 安全释义
  • window下tqdm进度条
  • CloudCone服务器2核1G一年只需15刀
  • 领航Linux UDP:构建高效网络新纪元
  • 总结单例模式的写法
  • 掌握Python异步编程:一步一步迈向高效网络应用开发
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • classpath对获取配置文件的影响
  • Flannel解读
  • JavaScript 基本功--面试宝典
  • java多线程
  • JS学习笔记——闭包
  • PAT A1050
  • Redis 中的布隆过滤器
  • Redis字符串类型内部编码剖析
  • Sass 快速入门教程
  • Sequelize 中文文档 v4 - Getting started - 入门
  • uva 10370 Above Average
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 离散点最小(凸)包围边界查找
  • 如何在 Tornado 中实现 Middleware
  • 详解移动APP与web APP的区别
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (LeetCode 49)Anagrams
  • (LeetCode) T14. Longest Common Prefix
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (办公)springboot配置aop处理请求.
  • (多级缓存)多级缓存
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .Net - 类的介绍
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core引入性能分析引导优化
  • .net 设置默认首页
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net环境下的缓存技术介绍
  • .net连接MySQL的方法
  • .NET面试题(二)
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @Autowired和@Resource装配