4

百分之四十的人都做错的一道 CSS 面试题

 2 years ago
source link: https://www.fly63.com/article/detial/11131
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
更新日期: 2022-02-11阅读量: 16标签: 面试题分享

扫一扫分享

前天的啥时候在微头条放了一道关于 css 选择器权重的面试题,只有两个答案,但是 40% 的人都回答错了,今天就来详细地看看。

<style>
 .box h1#title { color:red }
 #box h1.title { color:blue }
</style>
<div id="box" class="box">
 <h1 id="title" class="title"> fly63前端网</h1>
</div>

正确的答案:文字应该是蓝色。

这是一道关于 css 选择器权重相关的面试题,今天就来学习学习 css 选择器权重如何计算?

css 选择器权重

如果两组选择器都定位到同一元素,且对同一属性设置不同的样式,此时到底使用的是哪个样式,就需要通过选择器权重来决定到底使用的是哪个样式?

具体的样式继承顺序应该为:

选中且设置 !important 的 > 权重高的 > 权重相同位置靠后的 > 来自继承的。

一个选择器的优先级可以由四部分计算得分:

  • 千位:如果声明在 style 的属性里,则该部分得一分。
  • 百位:选择器包含 id 选择器,则该位得一分。
  • 十位:选择器包含类、属性选择器和伪类,则该位得一分。
  • 个位:选择器包含标签、伪元素选择器,则该位得一分。
#header p.content.active
/*
选择器权重计算过程:
千位:0 。样式没有定义在 style 中 ,所以千位为 0
百位:1。有一个 id 选择器。
十位:2。有两个类选择器。
个位:1。包含一个标签。
最终权重值为:0121
*/

实例1:p 标签内的文字应该是什么颜色?

<p> fly63前端网</p>
<style>
 p { color:red }
 body { color:blue !important }
</style>

正确答案:红色。

解析:上述只有 p 标签选中到对应 p 元素了,body 它是属于 p 的父级元素,所以是属于继承的,来自继承的权重是最低的,所以文字是红色。

实例2:a 标签文字会继承父级样式还是会使用浏览器默认颜色?

<a href="#">前端人</a>
<style>
 body { color:red !important }
</style>

正确答案:蓝色。

解析:虽然 a 标签没有设置样式,但是浏览器会有内置的默认颜色,使用调试工具可以看到:

6205b6ed343ad.jpg

按照权重规则来计算:

a:-webkit-any-link -> 0011
body                       -> 0001

所以浏览器会优先使用内置默认的文字颜色。

实例3:40% 都做错的面试题。

<style>
 .box h1#title { color:red }
 #box h1.title { color:blue }
</style>
<div id="box" class="box">
 <h1 id="title" class="title"> fly63前端网</h1>
</div>

正确答案:蓝色。

.box h1#title
/*
选择器权重计算过程:
千位:0 。样式没有定义在 style 中 ,所以千位为 0
百位:1。有一个 id 选择器。
十位:1。有 1 个类选择器。
个位:1。包含一个标签。
最终权重值为:0111
*/
#box h1.title
/*
选择器权重计算过程:
千位:0 。样式没有定义在 style 中 ,所以千位为 0
百位:1。有一个 id 选择器。
十位:1。有 1 个类选择器。
个位:1。包含一个标签。
最终权重值为:0111
*/

上述两个选择器的权重都是 0111。

css 选择器权重相同的时候,继承靠后面的样式。所以 h1 标签会继承后面的样式是蓝色。

上面这三个实例题都是非常典型的例子,可以对应着实例,好好理解上边的 css 权重介绍,内容总结性比较强。

来自:https://www.toutiao.com/a7050703688301658660

链接: https://www.fly63.com/article/detial/11131


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK