Недавно на работе мы боролись с некоторым эффектом зависания в приложении React. Сначала мы сосредоточились на решении этой проблемы с помощью JS, и в конечном итоге это стало естественнее и быстрее сделать в CSS.

Я пишу эту статью, потому что чувствую, что мы все больше и больше сосредотачиваемся на JS в мире интерфейсов. Забыть о возможностях CSS и HTML.

В этой статье я расскажу о некоторых селекторах CSS, начиная с дочернего селектора, и надеюсь закончить еще одним удивительным. Наслаждаться

Дочерний селектор

Прямой дочерний селектор идентифицирует только p элементы, которые попадают непосредственно в article элемент.

article > p {…}

<p>...</p>
<article>
  <p>This paragraph will be selected</p>
  <div>
    <p>...</p>
  </div>
</article>

Общий селектор братьев и сестер

Общий родственный селектор выбирает элементы, которые следуют за одним и тем же родителем. H2 элемент должен стоять после p элемента.

p ~ h2 {…}

<h2>...</h2>
<article>
  <h2>...<h2p>
  <p>...</p>
  <h2>This h2 will be selected</h2>
  <div>
    <p>...</p>
  </div>
  <h2>This h2 will be selected</h2>
</article>

Селектор смежных братьев и сестер [+]

Селектор смежных родственников выбирает элемент, который непосредственно следует за одним и тем же родителем.

Будут выбраны только p элементов, следующих непосредственно за img элементом.

img + p {…}

<p>…</p>
<article>
 <p>…</p>
 <img>…</img>
 <p>This paragraph will be selected</p>
 <div>
 <p>…</p>
 </div>
</article>

Селекторы атрибутов

Селекторы атрибутов выбирают элемент на основе наличия или / или значения данного атрибута. Есть несколько типов, примеры ниже.

div[alt] {...}

Выбирает все элементы с атрибутом alt.

<div alt=”something”>This div will be selected</div>
<div alt=””>This div will be selected</div>

div[alt=”something”] {…}

Выбирает все элементы, у которых есть alt с точным значением.

<div alt=”something”>This div will be selected</div>
<div alt=””>…</div>
<div alt=”abc”>…</div>

div[alt*=”something”] {…}

Выбирает элементы, содержащие значение, но в селекторе также точное значение. (просто нужно, чтобы где-нибудь в значении атрибута было что-то)

<div alt=”something”>This div will be selected</div>
<div alt=”something else”>This div will be selected</div>
<div alt=””>…</div>

div[alt^=”something”] {…}

Выбирает элементы, которые начинаются со значения селектора.

<div alt=”something”>This div will be selected</div>
<div alt=”something else”>This div will be selected</div>
<div alt=”else something”>…</div>
<div alt=””>…</div>

div[alt$=”something”] {…}

Выбирает элементы, заканчивающиеся значением селектора.

<div alt=”something”>This div will be selected</div>
<div alt=”something else”>…</div>
<div alt=”else something”>This div will be selected</div>
<div alt=””>…</div>

div: nth-last-child (2) {…}

Выбирает последние два div, они должны быть братьями и сестрами / иметь одного родителя

<span>
 <div>…</div>
 <div>…</div>
 <div>This div will be selected</div>
 <div>This div will be selected</div>
</span>
<div>…</div>
<div>…</div>

: not (: last-child) {…}

Выбирает все элементы, которые являются not последним дочерним элементом. Комбинация :not и :last-child.

<span>
 <div>This div will be selected</div>
 <div>This div will be selected</div>
 <div>This div will be selected</div>
 <div>…</div>
</span>
<div>This div will be selected</div>
<div>This div will be selected</div>

div: first-of-type {…}

Выберите первых братьев и сестер этого типа.

<span>
 <div>This div will be selected</div>
 <div>…</div>
 <div>…</div>
 <div>…</div>
</span>
<div>This div will be selected</div>
<div>…</div>

div: only-of-type {…}

Выбирает элементы, которые являются единственным дочерним элементом, не имеющим братьев и сестер в родительском контейнере.

<span>
 <div>This div will be selected</div>
</span>
<div>…</div>
<div>…</div>
<span>
 <div>…</div>
 <div>…</div>
</span>

Надеюсь, это поможет. Поделитесь своими самыми интересными селекторами в комментариях!