Heim > Web-Frontend > CSS-Tutorial > Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

青灯夜游
Freigeben: 2022-09-28 19:53:55
nach vorne
2080 Leute haben es durchsucht
<p>Jianweizhizhu, in diesem Artikel werden Ihnen zwei interessante CSS-Interviewfragen vorgestellt, mit denen Sie Ihr Fundament testen können!

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

<p>Ich habe heute im Forum eine so interessante Frage gesehen. Der einfache Code lautet wie folgt:

<div>
    <p id="a">First Paragraph</p>
</div>
Nach dem Login kopieren
<p>Der Stil ist wie folgt:

p#a {
    color: green;
}
div::first-line {
    color: blue;
}
Nach dem Login kopieren
<p>Stellen Sie eine Frage, der Text im Tag <p&gt ; Ist die Farbe grün oder blau? <p> 内的文字的颜色,是 green 还是 blue 呢?

<p>有趣的是,这里的最终结果是蓝色,也就是 color: blue 生效了。【推荐学习:css视频教程

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

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

<p>并且,打开调试模式,我们定位到 <p> 元素上,只看到了 color: green 生效,没找到 div::first-line 的样式定义:

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

<p>只有再向上一层,我们找到 <div> 的样式规则,才能在最下面看到这样一条规则:

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

<p>因此,这里很明显,是<p> 标签继承了父元素 <div> 的这条规则,并且作用到了自身第一行元素之上,覆盖了原本的 ID 选择器内定义的 color: green

再进行验证

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

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

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

  • 第 1 段通过标签选择器设置为灰色
  • 第 2 段通过类选择器设置为灰色
  • 第 3 段通过 ID 选择器设置为灰色
  • 第 4 段通过 !important bash 设置为灰色
<p>综上的同时,每一段我们同时都使用了 ::first-line 选择器。

<h2>::first-line vs. tag selector</h2>
<p>This paragraph ...</p>  

<h2>::first-line vs class selector</h2>
<p class="p2">This paragraph color i...</p>  

<h2>::first-line vs ID selector</h2>
<p id="p3">This paragraph color is set ...</p>  

<h2>::first-line vs !important</h2>
<p id="p4">This paragraph color is ....</p>
Nach dem Login kopieren
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;
}
Nach dem Login kopieren
<p>CodePen Demo -- ::first-line: demo

<p>https://codepen.io/KittyGiraudel/pen/kWobaa/569e082a67400f5fb39a96030d0e9b6c

<p>看看效果:

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

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

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

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

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

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

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

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

/* Selects any element that is NOT a paragraph */
:not(p) {
  color: blue;
}
Nach dem Login kopieren
<p>意思是,:not(p) 可以选择任何不是 <p> 标签的元素。然而,上面的 CSS 选择器,在如下的 HTML 结构,实测的结果不太对劲。

<p>p</p>
<div>div</div>
<span>span</span>
<h1>h1</h1>
Nach dem Login kopieren
<p>结果如下:

<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

<p>CodePen Demo -- :not pesudo demo

<p>https://codepen.io/Chokcoco/pen/KKZbWjy

<p>意思是,:not(p) 仍然可以选中 <p> 元素。是的,在多个浏览器,得到的效果都是一致的。

<p>看到这里,你可以再停一下,思考一下,为什么 <p> 元素的颜色仍旧是 color: blue

Interessanterweise ist das Endergebnis hier blau, was bedeutet, dass color: blue wirksam wird. [Empfohlenes Lernen: CSS-Video-Tutorial]<p>

Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!🎜🎜Nein, normalerweise sollte der ID-Selektor das nicht tun die Priorität höher sein als der Pseudoklassenselektor? Warum hat der Pseudoklassenselektor hier eine höhere Priorität? 🎜🎜Wenn der Debugging-Modus aktiviert ist, finden wir außerdem das Element <p> und sehen nur, dass color: green wirksam wird, aber kein div: :first- Line Stildefinition: 🎜🎜 Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!🎜🎜Nur wenn wir eine Ebene nach oben gehen und die Stilregeln von <div> finden, können wir unten eine solche Regel sehen: 🎜🎜Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!🎜🎜Das ist hier also offensichtlich Das <p>-Tag erbt diese Regel vom übergeordneten Element <div> und wendet sie auf die erste Elementzeile an, wobei der ursprüngliche ID-Selektor überschrieben wird. Farbe: grün innerhalb definiert. 🎜

Erneut überprüfen

🎜Hier ist ein weiterer verwirrender Punkt, warum der ID-Selektor eine höhere Priorität hat als ::first -line</ Code> Selektor ist niedriger. 🎜🎜Machen wir ein paar einfache Versuche: 🎜🎜Die folgende DEMO zeigt den Prioritätsvergleich des <code>::first-line-Stils bei der Arbeit mit verschiedenen Selektoren, einschließlich wichtiger-Regeln : 🎜
  • Absatz 1 wird über den Tag-Selektor auf Grau gesetzt
  • Absatz 2 wird über den Klassen-Selektor auf Grau gesetzt
  • Absatz 3 Der Absatz wird auf Grau gesetzt über den ID-Selektor
  • Der 4. Absatz wird durch !important bash auf grau gesetzt
🎜Zusammenfassend verwenden wir für jeden Absatz gleichzeitig: :first- Zeilenselektor. 🎜
/* Selects any element that is NOT a paragraph */
:not(p) {
  border: 1px solid;
}
Nach dem Login kopieren
Nach dem Login kopieren
rrreee
🎜CodePen Demo -- ::first-line: demo🎜🎜https://codepen.io/KittyGiraudel/pen/kWobaa/569e082a67400f5fb39a96030d0e9b6c🎜
🎜Sehen Sie sich den Effekt an: 🎜🎜< img src = "https://img.php.cn/upload/image/158/170/509/166436525495988Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!" title="166436525495988Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!" alt="Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!"/>🎜🎜Sie können es sehen, nein Egal was es ist. Der Selektor hat eine höhere Priorität als ::first-line. 🎜🎜Der Grund dafür ist, dass ::first-line eigentlich ein Pseudoelement und keine Pseudoklasse ist und der von ihm ausgewählte Inhalt tatsächlich als untergeordnetes Element von verarbeitet wird Element, ähnlich wie Es ist dasselbe wie ::before und ::after Daher ist die Farbregel des übergeordneten Elements nur eine kaskadierende Beziehung dafür, durch < code>:: Die von first-line selbst definierten Regeln haben eine höhere Priorität! 🎜🎜Aus diesem Grund wird im MDN-Dokument eher die Doppelpunkt-Schreibmethode empfohlen (natürlich unterstützen Browser die Einzelpunkt-Schreibmethode) – MDN -- ::first-line🎜🎜 < img src="https://img.php.cn/upload/image/663/621/572/1664365270903088.png" title="1664365270903088.png" alt="Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!"/>🎜

Noch eine Frage: Was sind einige Beispiele für MDN-Fehler? Ein interessantes Phänomen

🎜Beenden Sie die obige Frage. Schauen wir uns eine andere Frage an, eine sehr ähnliche Frage. 🎜🎜Auf der MDN-Seite, auf der :not vorgestellt wird, gibt es ein Beispiel: 🎜rrreee🎜Es bedeutet, dass :not(p) alles auswählen kann, was nicht &lt ist ;p&gt ; Tag-Element. Die tatsächlich gemessenen Ergebnisse des oben genannten CSS-Selektors in der folgenden HTML-Struktur stimmen jedoch nicht ganz. 🎜rrreee🎜Die Ergebnisse sind wie folgt: 🎜🎜 Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen! 🎜
🎜CodePen Demo -- :keine Pesodo-Demo🎜🎜https://codepen.io/Chokcoco/pen/KKZbWjy🎜
🎜means, :not(p) Das Element <p> kann weiterhin ausgewählt werden. Ja, die Ergebnisse sind bei mehreren Browsern gleich. 🎜🎜Wenn Sie das sehen, können Sie innehalten und darüber nachdenken: Warum ist die Farbe des <p>-Elements immer noch color: blau? 🎜🎜Warum ist das so? Antwort: 🎜<p>这是由于 :not(p) 同样能够选中 <body>,那么 <body> 的 color 即变成了 blue,由于 color 是一个可继承属性,<p> 标签继承了 <body> 的 color 属性,导致看到的 <p> 也是蓝色。

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

/* Selects any element that is NOT a paragraph */
:not(p) {
  border: 1px solid;
}
Nach dem Login kopieren
Nach dem Login kopieren
<p>Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!

<p>OK,这次 <p>

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

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

<p>(学习视频分享:css视频教程web前端

Das obige ist der detaillierte Inhalt vonSchauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
css
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage