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

青灯夜游
Freigeben: 2022-09-28 19:53:55
nach vorne
1938 Leute haben es durchsucht

Jianweizhizhu, in diesem Artikel werden Ihnen zwei interessante CSS-Interviewfragen vorgestellt, mit denen Sie Ihr Fundament testen können!

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

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

First Paragraph

Nach dem Login kopieren

Der Stil ist wie folgt:

p#a { color: green; } div::first-line { color: blue; }
Nach dem Login kopieren

Stellen Sie eine Frage, der Text im Tag Ist die Farbe grün oder blau?

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

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

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

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

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

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

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!

因此,这里很明显,是

标签继承了父元素

的这条规则,并且作用到了自身第一行元素之上,覆盖了原本的 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 ....

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

CodePen Demo -- ::first-line: demo

https://codepen.io/KittyGiraudel/pen/kWobaa/569e082a67400f5fb39a96030d0e9b6c

看看效果:

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

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

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

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

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

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

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

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

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

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

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

p

div
span

h1

Nach dem Login kopieren

结果如下:

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

CodePen Demo -- :not pesudo demo

https://codepen.io/Chokcoco/pen/KKZbWjy

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

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

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

元素的颜色仍旧是 color: blue

Interessanterweise ist das Endergebnis hier blau, was bedeutet, dass color: bluewirksam wird. [Empfohlenes Lernen: CSS-Video-Tutorial]

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

und sehen nur, dass color: greenwirksam wird, aber kein div: :first- LineStildefinition: 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

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

-Tag erbt diese Regel vom übergeordneten Element

und wendet sie auf die erste Elementzeile an, wobei der ursprüngliche ID-Selektor überschrieben wird.Farbe: grüninnerhalb definiert.

Erneut überprüfen

Hier ist ein weiterer verwirrender Punkt, warum der ID-Selektor eine höhere Priorität hat als ::first -line Selektor ist niedriger. Machen wir ein paar einfache Versuche: Die folgende DEMO zeigt den Prioritätsvergleich des ::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: demohttps://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-lineeigentlich 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::beforeund::afterDaher ist die Farbregel des übergeordneten Elements nur eine kaskadierende Beziehung dafür, durch < code>:: Die von first-lineselbst 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 :notvorgestellt wird, gibt es ein Beispiel: rrreeeEs bedeutet, dass :not(p)alles auswählen kann, was nicht < ist ;p> ;Tag-Element. Die tatsächlich gemessenen Ergebnisse des oben genannten CSS-Selektors in der folgenden HTML-Struktur stimmen jedoch nicht ganz. rrreeeDie Ergebnisse sind wie folgt: Schauen Sie sich diese beiden CSS-Interviewfragen an, um Ihr Fundament zu testen!
CodePen Demo -- :keine Pesodo-Demohttps://codepen.io/Chokcoco/pen/KKZbWjy
means, :not(p) Das Element

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

-Elements immer nochcolor: blau? Warum ist das so? Antwort:

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

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

也是蓝色。

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

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

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

OK,这次

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

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

(学习视频分享: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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!