谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
开本系列,谈谈一些有趣的 CSS
题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节。
解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。
不断更新,不断更新,不断更新,重要的事情说三遍。
谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型
谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
谈谈一些有趣的CSS题目(五)-- 单行居中,两行居左,超过两行省略
谈谈一些有趣的CSS题目(六)-- 全兼容的多列均匀布局问题
谈谈一些有趣的CSS题目(八)-- 纯CSS的导航栏Tab切换方案
谈谈一些有趣的CSS题目(九)-- 巧妙的实现 CSS 斜线
所有题目汇总在我的 Github 。
十、结构性伪类选择器(:root
,:target
,:empty
,:not
)
每一个 CSS 伪类及伪元素的出现,肯定都是为了解决某些先前难以解决的问题而应运而生的。
学习了解它们,是解决许多其他复杂 CSS 问题或者前沿技术的基础。
这里是 4 个基本的结构性伪类选择器,结构性伪类选择器的共同特征是允许开发者根据文档树中的结构来指定元素的样式。
:root
伪类
:root
伪类匹配文档树的根元素。应用到HTML,:root
即表示为<html>
元素,除了优先级更高外,相当于html标签选择器。
语法样式
:root { 样式属性 }
譬如,:root{background:#000}
,即可将页面背景色设置为黑色。
由于属于 CSS3 新增的伪类,所以也可以作为一种 HACK 元素,只对 IE9+ 生效。
介绍 :root
伪类,是因为在介绍使用 CSS变量
的时候,声明全局CSS变量时 :root
很有用。
:empty
伪类
:empty
伪类,代表没有子元素的元素。 这里说的子元素,只计算元素结点及文本(包括空格),注释、运行指令不考虑在内。
考虑一个例子:
div{
height:20px;
background:#ffcc00;
}
div:empty{
display:none;
}
<div>1</div>
<div> </div>
<div></div>
上述的例子,前两个div会正常显示,而第三个则会 display:none
隐藏。
也就是说,要想 :empty
生效,标签中连哪怕一个空格都不允许存在。
[Demo戳我::empty结构性伪类示例]
:not
伪类
CSS否定伪类,:not(X)
,可以选择除某个元素之外的所有元素。
X不能包含另外一个否定选择器。
关于 :not
伪类有几个有趣的现象:
-
:not
伪类不像其它伪类,它不会增加选择器的优先级。它的优先级即为它参数选择器的优先级。
我们知道,选择器是有优先级之分的,通常而言,伪类选择的权重与类选择器(class selectors,例如
.example
),属性选择器(attributes selectors,例如[type="radio"]
)的权重相同,但是有一个特例,就是:not()
。:not
否定伪类在优先级计算中不会被看作是伪类,但是在计算选择器数量时还是会把其中的选择器当做普通选择器进行计数。
- 使用
:not(*)
将匹配任何非元素的元素,因此这个规则将永远不会被应用。 - 这个选择器只会应用在一个元素上, 你不能用它在排除所有祖先元素。 举例来说, body :not(table) a 将依旧会应用在table内部的
<a>
上, 因为<tr>
将会被:not() 这部分选择器匹配。(摘自MDN)
:target
伪类
:target
伪类,在 #8、纯CSS的导航栏Tab切换方案
中已经实践过了,可以回过头看看。
:target
代表一个特殊的元素,若是谈论区别的话,它需要一个id去匹配文档URI的片段标识符。
:target
选择器的出现,让 CSS 也能够接受到用户的点击事件,并进行反馈。(另一个可以接收点击事件的 CSS 选择器是 :checked
)。
所有题目汇总在我的 Github ,发到博客希望得到更多的交流。
到此本文结束,如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
- 1647: [Usaco2007 Open]Fliptile 翻格子游戏
- 1295: [SCOI2009]最长距离
- 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课
- 数据结构之哈夫曼树和编码器的构造
- 1578: [Usaco2009 Feb]Stock Market 股票市场
- webp图片实践之路
- 3522: [Poi2014]Hotel
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
- 2272: [Usaco2011 Feb]Cowlphabet 奶牛文字
- 1632: [Usaco2007 Feb]Lilypad Pond
- 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
- Java设计模式(七)Decorate装饰器模式
- 1623: [Usaco2008 Open]Cow Cars 奶牛飞车
- 1622: [Usaco2008 Open]Word Power 名字的能量
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- (译)针对 Kubernetes 工作负载的策略工具
- 又被逼着优化代码,这次我干掉了出入参 Log日志
- 想去看机会?这10道最高频的手撕代码题都会了吗?
- 你知道Python中的4种变量作用域是哪些吗?
- 图解 Python 浅拷贝与深拷贝
- 打卡群刷题总结0716——不同路径
- 原理 + 代码|手把手教你用Python实现智能推荐算法
- 机器学习必刷题-基础概念篇(1):为什么用AUC做评价指标?
- 机器学习必刷题-手撕推导篇(3):FM与softmax
- Python面试必刷题系列(4)
- SQL面试必刷题(1) Case When
- 张量的数学运算
- 数据结构高频面试题-图
- nn.functional和nn.Module
- 20分钟学会DBSCAN聚类算法