前端常见bug系列2::last-of-type 和 :first-of-type的误用

上一篇中曾提到,someselecttor:last-chid 所表示的并不是someselecttor选中的节点集合的最后一个。那么,怎么达到这个效果呢?对,可以用:last-of-type。来个例子试试看吧!

<style>
        .section{
            margin-bottom: 50px;
        }

        .section1-item:last-of-type{
            color: green;
        }
</style>
<section class="section section1">
    <header>header</header>
    <p class="section1-item">111</p>
    <p class="section1-item">222</p>
    <p class="section1-item">333</p>
    <p class="section1-item">444</p>
    <footer>footer</footer>
</section>

果然,把<p class="section1-item">444</p>给加上了绿色。不过,当我们把上面代码片段中的<footer>footer</footer>也加上class="section1-item",问题来了,居然给<p class="section1-item">444</p><footer class="section1-item">footer</footer>所标示的两个元素都给加上了绿色!

我们继续把上面的HTML代码片段进行修改,改成:

<section class="section section1">
    <header>header</header>
    <p class="section1-item">111</p>
    <p class="section1-item">222</p>
    <p class="section1-item">333</p>
    <footer class="section1-item">444</footer>
    <footer class="section1-item">footer</footer>
</section>

即只是把<p class="section1-item">444</p>改成了<footer class="section1-item">444</footer>,而CSS样式不作修改。当再次预览效果的时候,发现被加上绿色的元素分别是<p class="section1-item">333</p><footer class="section1-item">footer</footer>。这下答案就很明显了:

someselector:last-of-type不仅与someselector这个选择器相关,还与符合该选择器的元素的标签相关。

再看一下W3C的说明

The :last-of-type pseudo-class represents an element that is the last sibling of its type in the list of children of its parent element.

这里所谓 the last sibling of its type其实讲得并不是很清楚,但仔细琢磨,这里的type的意思应该就是不仅仅与选择器相关,还与标签相关。

这时,你可能已经想到了,:first-of-type肯定也有类似的问题。的确,如你所料。

有了这一篇和上一篇的经验,遇到那不太准的CSS选择器,先进行如下处理:

1、翻一下W3C的说明

2、试验一下

时间: 2024-10-28 20:09:11

前端常见bug系列2::last-of-type 和 :first-of-type的误用的相关文章

前端常见bug系列3:&lt;input type=&quot;text&quot;&gt;中emoji表情与文字并存时表情被截掉一部分

比如,有这个一个demo页面: <head> <meta charset="UTF-8"> <meta name="format-detection" content="telephone=no, address=no, email=no, time=no"> <meta name="viewport" content="width=device-width,user-sca

前端常见bug系列4: JavaScript中忘记类型转换所导致的条件判断错误举例

一.忘记类型转换的小数比较错误 举个例子,我们要进行一个字符串型的小数的比较:'8.8'>'8.7',结果自然是true. 那么'8.8'>'8.10'呢?结果仍然是true,但愿你没有将它误以为是8.8>8.10. 二.忘记类型转换的版本号比较错误 类似上面的问题,在进行版本号比较时,一样存在.比如,我们这么比较'8.8.1'>'8.10.1',结果就是错误的.合理的比较方法应该是将两个待比较的版本号按'.'作为分隔符进行拆分,并将每一位转换成数字,然后按位比较. 三.字符串型的

前端常见bug系列1:容易被误解的:last-child 和 :first-child

用某个选择器过滤出来一个元素集合,当我们想选中最后一个元素的时候,是不是很容易想到:last-child?比如,有下面一段CSS和HTML片段: <style> .section{ margin-bottom: 50px; } .section1-item:last-child{ color: blue; } </style> <section class="section section1"> <header>header</he

前端常见兼容性问题系列1:丢失的CSS补间动画

[前言] 有人说,前端开发的过程常常就是一个不断"入坑"和"出坑"的.这句话道出了前端开发中的磕磕绊绊以及相伴而来的成长.遗憾的是,这些成长大都只存储在工程师的脑海里,日复一日的,相信总有不少人花掉昂贵的时间在重复解决着同样的"坑". Stack Overflow是我们查找一些常见bug解决办法的好帮手,但我们每天也遇到各式各样的新问题以及有一定独特性的问题.若能花一点精力将自己遇到的问题.思考过程.解决方案.延伸感悟等记录下来,让经验更具延续性

Web项目添加Maven支持后的常见bug和错误

最近,对现有的Web项目添加Maven支持,结果出现了好多的bug,只好google查找原因,在此记录下 ,给自己和他人一个方便: 1.Maven命令执行失败,却没有出错信息  --> 可重新执行一次! 2.BaseConst.java:[1,0] 非法字符:\65279  --> 使用 notepad++ 工具打开之后,发现该文件格式为 UTF-8 (含BOM)格式,如下图: 开发常见bug"> 改为"UTF-8 无 BOM格式编码"即可. 分析:有可能是

C语言内存分配管理常见bug

标准C库提供了4个内存管理函数:malloc.calloc.realloc和free. bug1 调用free释放p指向的内存块之后,p就是一个悬挂指针--指向逻辑上不存在的内存的指针.如果引用这个悬挂指针,会导致不可预见的错误. ElemType* p = (ElemType*)malloc(sizeof(ElemType) * NUM); ... free(p);// p = NULL; ... *p = "..."; bug2 释放空闲内存,破坏内存管理函数所用的数据结构. El

JavaScript lodash常见用法系列小结_javascript技巧

lodash一开始是Underscore.js库的一个fork,因为和其他(Underscore.js的)贡献者意见相左.John-David Dalton的最初目标,是提供更多"一致的跨浏览器行为--,并改善性能".之后,该项目在现有成功的基础之上取得了更大的成果,并于一月份发布了3.0版本. 下面给大家说下javascript lodash知识,具体详情如下所示: 1 _.compact用法 _.compact([0, 1, false, 2, '', 3,'mm']); var

c++-C++字符串问题,char type[10]跟string type 有什么区别?

问题描述 C++字符串问题,char type[10]跟string type 有什么区别? 这是在刘汝佳的书上的一道例题,我做的时候遇到了一个问题,我是新手,请指点. #include using namespace std; int m,n; int a[100000+10]; int main(){ int shift_circular_left(int,int); int shift_circular_right(int,int); int find(int); cin>>m>&

SAP WM 为Storage Type启用SUM后要为Storage Unit Type指派Storage Bin Type

SAP WM 为Storage Type启用SUM后要为Storage Unit Type指派Storage Bin Type