网站首页 > 技术文章 正文
大家好,我是前端西瓜哥。今天我们来学习一些长得很像的两兄弟 :nth-of-type 和 :nth-child。
:nth-child
首先根据 :nth-chilid 前的样式规则,找到所有匹配元素的所有兄弟元素。然后我们从中找出 符合位置规则 的元素,并且这些元素也 符合样式规则,就应用样式。
这个位置规则其实是一个 an + b 的表达式。其中 a 和 b 表示一个类型为整数的常数,如果值为 0,可以省略不写。n 是一个变量,为从 0 开始的递增整数集合。
这里我们给几个表达式例子:
- nth-child(2n+1):匹配位置为奇数(即 1、3、5、7...)的元素。因为比较常用,比如表格的斑马线效果,所以我们可以用语义更好的关键字 odd 来替代 2n+1。需要特别注意的是,元素的索引是从 1 开始的,不是从 0 开始的。
- nth-child(2n):匹配位置为偶数(即 2、4、6、8...)的元素。同 nth-child(even)。
- nth-child(-n+3):匹配前三个元素。
- nth-child(1):匹配首元素,同 :first-child。
下面我们看一个具体的例子。
HTML 和 CSS 如下:
<style>
div.item:nth-child(2n+1) {
border: 1px solid salmon;
}
</style>
<div>
<div>div1</div>
<div class="item">div2 .item</div>
<div class="item">div3 .item</div>
<div class="item">div4 .item</div>
<div>div5</div>
</div>
渲染结果如下:
首先我们通过 div.item 找到 div2 这个元素,然后我们通过 2n+1 找到需要应用样式的兄弟元素。
符合规则 2n+1 有 div1、div3、div5,然后我们从中找出符合 .item 的,也就是 div3.item,给它应用样式。
:nth-of-type
:nth-of-type 和 :nth-child 非常像,也是通过在兄弟元素中找出符合 an+b 表达式的元素,给它们应用样式。
但有一点不同,就是元素的索引位置是从样式匹配的兄弟元素从上到下排序的。
我们看一个具体的例子。
HTML 和 CSS 如下:
<style>
div.item:nth-of-type(2n+1) {
border: 1px solid salmon;
}
</style>
<div>
<p>p1</p>
<div class="item">div1 .item</div>
<div class="item">div2 .item</div>
<p>p2</p>
<div class="item">div3 .item</div>
</div>
渲染结果如下:
我们通过 div.item 匹配到 div1 元素,然后找出它的兄弟元素中所有匹配 div.item 的元素,给它们按顺序标上 1、2、3、4... 索引值。最后从里面挑选索引符合 2n+1 表达式,也就是奇数位置的元素。
总结
简单来说,:nth-child 是先圈定所有兄弟元素,给它们顺序标上索引,然后从中找到既符合表达式也符合 div.item 的元素。而 :nth-of-type 是先圈定符合 div.item 的所有元素给它们标上索引,从中找出符合表达式的元素。
我是前端西瓜哥,热衷于分享前端知识,欢迎关注我。
猜你喜欢
- 2024-11-09 「项目实战」.作家管理系统之Web应用(四)
- 2024-11-09 jQuery 单引号和双引号区别 js单双引号转义
- 2024-11-09 jQuery的DOM操作 jquery对象和dom对象
- 2024-11-09 CSS2与CSS3中常用的伪类汇总大全 css伪类hover
- 2024-11-09 自动化测试:Selenium八大元素定位简单介绍
- 2024-11-09 想让AI 驱动 UI 测试?大佬推荐这个自动化工具!
- 2024-11-09 CSS怎么选择除了第一个子元素外的其余同级子元素
- 2024-11-09 js函数--倒计时模块+无缝滚动 js实现倒计时60秒的简单代码
- 2024-11-09 Web前端开发-CSS中伪类和伪元素 css3伪类和伪元素
- 2024-11-09 CSS 中的最后一个子级选择器与最后一个类型选择器
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-