Привет, Хабр!

Предлагаю вашему вниманию перевод статьи «6 powerful CSS selectors that will really help you write clean CSS» автора Ibrahima Ndaw.

Селекторы в CSS используются для выбора элементов и стиля. Селекторы производительны и поэтому пользуются популярностью у разработчиков. В этой статье приведены 6 селекторов CSS, которые помогут написать чистый CSS в вашем следующем проекте (если, конечно, вы его используете).

  1. div >a

    Этот селектор позволит выбрать а-элементы, где родительский элемент будет div тегом.

    <!-- This one will be selected --> 
    <div>
        <a></a>
    </div>
    
    <!-- This one will not be selected -->
    <p>
        <a><b></b></a>
    </p>
  2. div +a

    При этом будут выбраны а-теги, размещенные сразу после div элемента. Если между div тегом и а тегом стоит элемент, этот элемент не будет использован.

    <main>
    <!-- This one will be selected -->
        <div></div>
        <a></a>
    <!-- This one will be not selected -->
        <div></div>
        <p></p>
        <a></a>
    </main>
  3. div ~a

    Это селектор будет выбирать каждый a тег, предшествующий div элементу на том же уровне. Другими словами, если a тег не предшествует непосредственно div элементу, но имеет div тег в качестве одноуровнего элемента, этот элемент будет выбран.

    <main>
    <!-- This one will be selected -->
        <div></div>
        <a></a>
    <!-- This one will be selected -->
        <div></div>
        <p></p>
        <a></a>
        <section>
    <!-- This one will be selected -->
        <div></div>
        <p></p>
        <a></a>
        </section>
    
        <footer>
    <!-- This one will be not selected -->
        <p></p>
        <a></a>
        </footer>
    </main>
  4. [attribute^=value]

    Например: [class =«list-»]

    Этот селектор будет выбирать каждый элемент, содержащий class атрибут, где значение начинается с list-

    <main>
    <!-- This one will be selected -->
        <div class="list-element"></div>
    <!-- This one will be selected -->
        <div class="list-container"></div>
    <!-- This one will be selected -->
        <div class="list-item"></div>
    <!-- This one will be not selected -->
        <div class="list__footer"></div>
    </main>
  5. [attribute$=value]

    Например: [src$=".png"]

    Это селектор будет выбирать каждый src атрибут, где значение заканчивается .png

    <div>
    <!-- This one will be selected -->
        <img src="image1.png">
    <!-- This one will be not selected -->
        <img src="image2.jpg">
    <!-- This one will be selected -->
        <img src="image3.png">
    <!-- This one will be not selected -->
        <img src="image4.svg">
    </div>
  6. [attribute*=value]

    Например: [class*="-list"].

    Этот селектор будет выбирать каждый элемент, class атрибут которого содержит -list. Это не рассматривается, если -list стоит в начале, середине или в конце значения класса.Главное, чтобы значение включало в себя -list

    <main>
    <!-- This one will be selected -->
        <div class="main-list-container"></div>
    <!-- This one will be selected -->
        <div class="primary-list"></div>
    <!-- This one will be selected -->
        <div class="primary-list-item"></div>
    <!-- This one will be not selected -->
        <div class="list-footer"></div>
    </main>

Вывод


Иногда сложно найти необходимый элемент для стиля, потому что CSS-файл работает на высокой скорости. И использование такого рода селекторов полезно в зависимости от случая использования.

Комментарии (10)


  1. CoolCmd
    14.12.2019 19:26
    +3

    ужасная статья, ужасный перевод.


    вот "статья", которой достаточно для понимания селекторов: http://www.w3.org/TR/css3-selectors/#selectors


    1. Alexufo
      16.12.2019 00:27

      У w3 вырвиглазно. Вот ут гараздо нагляднее
      www.w3schools.com/cssref/css_selectors.asp


  1. sfi0zy
    14.12.2019 19:35
    +3

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

    Да не производительные они, а являются мощным инструментом в умелых руках. Производительность — это все же про скорость работы.

    Если между div тегом и а тегом стоит элемент, этот элемент не будет использован.

    Не элемент не будет использован, а тег «а» не будет выбираться селектором.

    Это селектор будет выбирать каждый a тег, предшествующий div элементу на том же уровне.

    Ровно наоборот, он будет выбирать тег «a», которому предшествует «div».

    Иногда сложно найти необходимый элемент для стиля, потому что CSS-файл работает на высокой скорости.

    Ох, гуглопереводы они такие, да. Но по теме вспоминается статья
    The 30 CSS Selectors You Must Memorize
    , там подборка всякого полезного более полная.


  1. Paul_King
    14.12.2019 21:47

    Дожили…
    Такого на хабре я еше не видал. Базовые вещи из начальной главы любого учебника по верстке преподносятся как «мощный» инструмент для «чистого кода».

    Ждем статьи с содержанием вида «а вы знали, что в HTML есть мощнейший тег, который позволит создавать ссылки на другие страницы!? Встречайте! Тег !»


    1. k12th
      15.12.2019 19:10

      Как вы угадали! https://habr.com/ru/post/480382/


  1. Mat1lda
    14.12.2019 22:19

    [attribute^=value]

    Например: [class =«list-»]

    Очепятка ^????


    1. jt3k
      15.12.2019 02:41

      В первой строке опечатки нет. [foo^=bar] выберет все элементы у которых значение атрибута foo начинается с bar. Например


      1. jt3k
        15.12.2019 02:47

        Пример исчез. Вот он: <a foo=barier>


      1. Mat1lda
        15.12.2019 17:52

        Так и [class =«list-»] выберет то же самое. Я именно про символ ^.


  1. Aingis
    15.12.2019 16:22
    +1

    Такое интересно будет разве что тем, кто про селекторы вообще ничего не слышал. Могло сойти для туториала, но тему стоило бы раскрыть больше. Например, специфичность селектора * + .class относительно .class:not(:first-child).