<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>优先级 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E4%BC%98%E5%85%88%E7%BA%A7/</link><description>Recent content in 优先级 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 10 Nov 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E4%BC%98%E5%85%88%E7%BA%A7/index.xml" rel="self" type="application/rss+xml"/><item><title>优先级</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-004/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/css/css-004/</guid><description>&lt;p&gt;在前端面试中，经常会遇到CSS选择器的问题三连：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;说一下CSS的选择器有哪些&lt;/li&gt;
&lt;li&gt;优先级是怎样的&lt;/li&gt;
&lt;li&gt;权重计算方式&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今天就来给大家介绍选择器的优先级和权重计算方式。&lt;/p&gt;
&lt;h2 id="优先级是什么有什么用"&gt;优先级是什么？有什么用？&lt;/h2&gt;
&lt;p&gt;先提出一个问题：如果一个元素通过多种方式设置了字体大小，那么浏览器在最后渲染时会使用哪个属性值呢？&lt;/p&gt;
&lt;p&gt;其实，浏览器会通过优先级来判断哪些属性值与一个元素最为相关，从而在该元素上应用这些属性值。优先级是基于不同种类选择器组成的匹配规则。&lt;/p&gt;
&lt;p&gt;换种说法，优先级就是分配给指定的 CSS 声明的一个权重，它由 &lt;strong&gt;匹配的选择器&lt;/strong&gt; 中的 &lt;strong&gt;每一种选择器类型的数值&lt;/strong&gt; 决定。&lt;/p&gt;
&lt;p&gt;总结一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;权重决定了你css规则怎样被浏览器解析直到生效，css权重关系到你的css规则是怎样显示的。&lt;/li&gt;
&lt;li&gt;当很多的样式被应用到某一个元素上时，权重决定哪种样式生效。&lt;/li&gt;
&lt;li&gt;每个选择器都有自己的权重。你的每条css规则，都包含一个权重级别。 这个级别是由不同的选择器加权计算的，通过权重，不同的样式最终会作用到你的网页中 。&lt;/li&gt;
&lt;li&gt;如果两个选择器同时作用到一个元素上，权重高者生效。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="权重的计算规则"&gt;权重的计算规则&lt;/h2&gt;
&lt;p&gt;接着介绍权重的计算规则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一优先级：&lt;code&gt;!important&lt;/code&gt;会覆盖页面内任何位置的元素样式&lt;/li&gt;
&lt;li&gt;内联样式，如&lt;code&gt;style=&amp;quot;color: green&amp;quot;&lt;/code&gt;，权值为&lt;strong&gt;1000&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;ID选择器，如&lt;code&gt;#app&lt;/code&gt;，权值为&lt;strong&gt;0100&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;类、伪类、属性选择器，如&lt;code&gt;.foo&lt;/code&gt;, &lt;code&gt;:first-child&lt;/code&gt;, &lt;code&gt;div[class=&amp;quot;foo&amp;quot;]&lt;/code&gt;，权值为&lt;strong&gt;0010&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;标签、伪元素选择器，如&lt;code&gt;div::first-line&lt;/code&gt;，权值为&lt;strong&gt;0001&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;通配符、子类选择器、兄弟选择器，如&lt;code&gt;*, &amp;gt;, +&lt;/code&gt;，权值为&lt;strong&gt;0000&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;继承的样式没有权值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;权值计算公式：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;权值&lt;/code&gt; = &lt;code&gt;第一等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第二等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第三等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;，&lt;code&gt;第四等级选择器&lt;/code&gt; x &lt;code&gt;个数&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;选择器&lt;/th&gt;
&lt;th&gt;千位&lt;/th&gt;
&lt;th&gt;百位&lt;/th&gt;
&lt;th&gt;十位&lt;/th&gt;
&lt;th&gt;个位&lt;/th&gt;
&lt;th&gt;优先级&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;h1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;h1 + p::first-letter&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0003&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;li &amp;gt; a[href*=&amp;ldquo;en-US&amp;rdquo;] &amp;gt; .inline-warning&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;0022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#identifier&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内联样式&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="权重的比较规则"&gt;权重的比较规则&lt;/h2&gt;
&lt;p&gt;当两个权值进行比较的时候，是从高到低逐级将等级位上的权重值（如 权值 1,0,0,0 对应&amp;ndash;&amp;gt; 第一等级权重值，第二等级权重值，第三等级权重值，第四等级权重值）来进行比较的，而不是简单的 1000个数 + 100个数 + 10个数 + 1个数 的总和来进行比较的，换句话说，低等级的选择器，个数再多也不会越等级超过高等级的选择器的优先级的。&lt;/p&gt;</description></item></channel></rss>