见微知著,从两道有意思的 CSS 面试题,考察你的基础
admin
2024-01-20 08:30:26
0

今天在论坛,有看到这样一道非常有意思的题目,简单的代码如下:

First Paragraph

样式如下:

p#a {color: green;
}
div::first-line {color: blue;
} 

试问,标签

内的文字的颜色,是 green 还是 blue 呢?

有趣的是,这里的最终结果是蓝色,也就是 color: blue 生效了。

不对,正常而言,ID 选择器的优先级不应该比伪类选择器高么?为什么这里反而是伪类选择器的优先级更高呢?

并且,打开调试模式,我们定位到

元素上,只看到了 color: green 生效,没找到 div::first-line 的样式定义:

只有再向上一层,我们找到

的样式规则,才能在最下面看到这样一条规则:

因此,这里很明显,是**

标签继承了父元素

的这条规则,并且作用到了自身第一行元素之上,覆盖了原本的 ID 选择器内定义的 color: green**。

再进行验证

这里,另外一个比较迷惑的点在于,为什么 ID 选择器的优先级比 ::first-line 选择器更低。

我们再做一些简单的尝试:

下面的 DEMO 展示了 ::first-line 样式和各种选择器共同作用时的优先级对比,甚至包括了 !important 规则:

  • 第 1 段通过标签选择器设置为灰色
  • 第 2 段通过类选择器设置为灰色
  • 第 3 段通过 ID 选择器设置为灰色
  • 第 4 段通过 !important bash 设置为灰色

综上的同时,每一段我们同时都使用了 ::first-line 选择器。

::first-line vs. tag selector

This paragraph ...

::first-line vs class selector

This paragraph color i...

::first-line vs ID selector

This paragraph color is set ...

::first-line vs !important

This paragraph color is ....

p {color: #444;
}
p::first-line {color: deepskyblue;
}.p2 {color: #444;
}
.p2::first-line {color: tomato;
}#p3 {color: #444;
}
#p3::first-line {color: firebrick;
}#p4 {color: #444 !important;
}
#p4::first-line {color: hotpink;
} 

CodePen Demo – ::first-line: demo

看看效果:

可以看到,无论是什么选择器,优先级都没有 ::first-line 高。

究其原因,在于,::first-line 其实是个伪元素而不是一个伪类,被其选中的内容其实会被当成元素的子元素进行处理,类似于 ::before::after 一样,因此,对于父元素的 color 规则,对于它而言只是一种级联关系,通过 ::first-line 本身定义的规则,优先级会更高!

这也是为什么,在 MDN 文档中,更推荐的是双冒号的写法(当然浏览器都支持单冒号的写法)-- MDN – ::first-line

再来一题,MDN 的错误例子?一个有意思的现象

说完上面这题。我们再来看看一题,非常类似的题目。

在 MDN 介绍 :not 的页面,有这样一个例子:

/* Selects any element that is NOT a paragraph */
:not(p) {color: blue;
} 

意思是,:not(p) 可以选择任何不是

标签的元素。然而,上面的 CSS 选择器,在如下的 HTML 结构,实测的结果不太对劲。

p

div
span

h1

结果如下:

CodePen Demo – :not pesudo demo

意思是,:not(p) 仍然可以选中

元素。是的,在多个浏览器,得到的效果都是一致的。

看到这里,你可以再停一下,思考一下,为什么

元素的颜色仍旧是 color: blue

这是为什么呢?解答一下:

这是由于 :not(p) 同样能够选中 ,那么 的 color 即变成了 blue,由于 color 是一个可继承属性,

标签继承了 的 color 属性,导致看到的

也是蓝色。

我们把它改成一个不可继承的属性,试试看:

/* Selects any element that is NOT a paragraph */
:not(p) {border: 1px solid;
} 

OK,这次

没有边框体现,没有问题!

因此,实际使用的时候,需要一定要注意样式继承的问题!

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

相关内容

热门资讯

幼儿园安吉室外投放哪些材料 幼儿园安吉室外投放哪些材料幼儿园安吉室外投放材料滚筒、积木、长板、木箱、梯子、沙水、锅、碗、瓢、盆、...
爱情的十字路口我该怎么选择? 爱情的十字路口我该怎么选择?真爱掌握在你自己手中!爱他就努力争取,不顾一切!还不是很爱他,那就等等,...
有没有和《恶魔狂想曲之明日骄阳... 有没有和《恶魔狂想曲之明日骄阳》差不多精彩的小说?女主角很多,个性鲜明,主角多情但不滥情,富于正义文...
功利主义是否认为道德应该是一种... 功利主义是否认为道德应该是一种绝对的命令?最源头的定义是边沁的观点,使所有人的快乐最大化。之后有缪尔...
什么是CC猫啊 什么是CC猫啊CC是一只可爱活泼的猫猫,因为诞生于沪江网校所以全称:沪江网校CC猫。CC猫常常出没于...
美剧迷失第三季好看吗? 美剧迷失第三季好看吗?个人觉得,迷失第一季还不错,很惊异.越往后看越没意思.相信我你会越看越迷失的....
求推荐一些奇幻和爱情主题的动漫 求推荐一些奇幻和爱情主题的动漫刀剑神域 强烈推荐妖精的尾巴哈尔的移动城堡~~强烈推荐刀剑神域!!!...
张晓风的这篇柳运用什么的修辞手... 张晓风的这篇柳运用什么的修辞手法张晓风的这片《柳》运用了比喻,对比的修辞手法。希望我的解答对我有帮助...
我想在手机上看童话书,请问在哪... 我想在手机上看童话书,请问在哪里找?我记得有类似的书,是不是一本红皮的?那个是有点类似杂志或者丛书的...
远古是一个怎样的世界 远古是一个怎样的世界漫漫四十多亿年哪,多长的时间呀,搞不好,以前主宰地球的物种的科技比我们还牛些的!...
有色没胆 有胆没色 有色没胆 有胆没色这两种男人有什么区别?哦这个.有色就是好色也不敢动手.有胆就是胆大不好色.或者是自...
华胥引中君伟的结局 华胥引中君伟的结局君玮最后是和苏仪在一起了。七七微段子里提到的慕言和阿拂家的孩子其实是君玮和苏仪的然...
带烁字的男孩名字 带烁字的男孩名字带烁字的男孩名字,用烁字起名烁(shuò):烁表示光亮、烁亮、烁烁。 繁体:烁;部首...
《披荆斩棘的哥哥》正在热播,看... 《披荆斩棘的哥哥》正在热播,看完这档节目后你有什么观后感?看完这档节目之后,我觉得挺好的,这次的节目...
我女儿的生辰八字:壬午年 丙... 我女儿的生辰八字:壬午年 丙午月 丙寅日 庚寅时 (2002年6月27日农历五月十七日早上...
点读机什么品牌好啊,怎么选啊? 点读机什么品牌好啊,怎么选啊?步步高点读机比较好,选大商场的正品,不要上网或电子市场买。
吴用只是个文弱书生,李逵为何会... 吴用只是个文弱书生,李逵为何会对他言听计从?尽管吴用只是一个文弱书生,但他对李逵忠心耿耿,所以李逵会...
开心星星球里甜心超人魔方玩了4... 开心星星球里甜心超人魔方玩了4秒是哪一集39集,新人。。。第四部《甜心超人的新爱好》
为什么会乐极生悲? 为什么会乐极生悲?从易经的观点看,任何事物都是相对立的。有生就有死,又高就有矮,有长久有段,同样,有...
一千零一夜中给国王讲故事的人是... 一千零一夜中给国王讲故事的人是谁山鲁佐德在《一千零一夜》中给萨桑王国国王讲故事的那位女性就是:萨桑王...