DEV Community

loading...

6 powerful CSS selectors that will really help you write clean CSS.

ibrahima92 profile image Ibrahima Ndaw Originally published at ibrahima-ndaw.com ・Updated on ・3 min read

Originally posted on my blog



Selectors in CSS are used to pick elements and style them. They can be very powerful following which one we use. In this post, I will lead you through 6 powerful CSS selectors that will really help you write clean CSS on your next project.

1. div > a

This selector will enable us to select all a element where the parent element is a div tag.

<!-- This one will be selected --> 
<div>
    <a></a>
</div>

<!-- This one will not be selected -->
<p>
    <a></a>
</p>

2. div + a

This one will select every a tag placed immediately after a div element. If we have an element between the div and the a tag, that element won't be selected.

<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

This one will select every a tag preceded by a div element on the same level. In other words, if the a tag is not immediately preceded by a div element, but has a div tag as a sibling element, that element will be selected.

<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]

e.g: [class^="list-"]
This selector will pick every element that contains a class attribute and its value begins with 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]

e.g: [src$=".png"]
This one will select every src attribute where its value ends with .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]

e.g: [class*="-list"]
This selector will pick every element whose class attribute contains -list. It does not matter if -list is at the beginning, the middle or at the end of the class's value. The most important is that the value must contain -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>

Conclusion

Sometimes it's really tough to find the needed element to style due to the fact that our CSS file can be overkill very quick. And using this kind of selector can be very useful depending on your use-case.

Discussion

pic
Editor guide
Collapse
rafaelliendo profile image
Rafael Liendo

Probably should tag this with #beginer

Collapse
hyftar profile image
Simon Landry

Yeah I also thought I was about to learn something new ;/

Collapse
mtliendo profile image
Michael Liendo

Not sure. The regex-like selectors are often times forgotten.

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'll add the beginner tag. Thanks

Collapse
rolandcsibrei profile image
Roland Csibrei

Yes, should be tagged as beginner, however it is good from time to time to refresh our knowledge and this was a perfect opportunity. Thanks a lot! Have a great day! R.

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'll add the beginner tag and thanks for your comment and have a great day too.

Collapse
yezehmat profile image
Ahmad Shahzad

What about selecting an a before a div?

<a></a>
<div></div>

Is this possible?

Collapse
verdedev profile image
verdedev

What you're describing is a "previous sibling" selector and it doesn't exist in CSS. Another popularly desired selector that doesn't exist is a "parent selector." While they both can be implemented in JavaScript pretty easily, the spec-writing gods of CSS, and the algorithm writers who implement those specifications have their reasons for denying us these things.

Collapse
alohci profile image
Nicholas Stimpson

The reasons come down to performance. We can see this from a couple of snippets from the Selectors Level 4 spec, where it discusses the Live and snapshot profiles

Selectors are used in many different contexts, with wildly varying performance characteristics. Some powerful selectors are unfortunately too slow to realistically include in the more performance-sensitive contexts.
ISSUE 1 - The categorization of things into the β€œlive” or snapshot profiles needs implementor review. If some things currently not in the live profile can reasonably be done in CSS Selectors, we should move them.

In this particular case <a> before <div> could be done using the has() pseudo-class as a:has(+ div) or a:has(~ div), but has() is only part of the snapshot profile and therefore not for implementation in CSS.

Collapse
aimadghssisse profile image
Aimad Ghssisse

Very useful thank you

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'm glad that you find it useful, Thanks for your comment.

Collapse
lucian2403 profile image
Lucian2403

Very useful tips. Thank you!

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'm glad that you find it useful, Thanks for your comment.

Collapse
bipan82gill profile image
bipan82gill

Great job

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

Thanks for your comment.

Collapse
hnnx profile image
Nejc

Some of these are really helpful and easy to understand, thanks

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'm glad that you find it useful, Thanks for your comment.

Collapse
mostafa_hegazi profile image
Mostafa Hegazy

Yes, it's common selectors but useful, thanks

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

Thanks a lot for your comment.

Collapse
ji2026 profile image
Collapse
ibrahima92 profile image
Collapse
kashanshah profile image
Syed Kashan Ali Shah

No matter this would help in writing clean code or not, but thanks for a quick recall to some of the unconventional selectors, which may surely help to style some typically written html 😁

Collapse
ibrahima92 profile image
Collapse
mikaelfante profile image
Mikael Fante

Nicely put. Thanks for the tips, good work done.

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

I'm glad it could help, Thanks for your comment.

Collapse
anuraghazra profile image
Anurag Hazra

Btw just realized that,
*, $, ^ are all valid Regex quantifires. 🀯

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

That's it..regex is super powerful.

Collapse
mikehu profile image
MikeHu

Really good article. Thanks

Collapse
ibrahima92 profile image
Ibrahima Ndaw Author

Thanks for your comment.

Collapse
goodmuyis profile image
goodmuyis

You might want to review your html markups, they wrongly type and will confused a learner.

Powerfull css selector are the pseudo selector

Collapse
doug_horne profile image
Douglas Horne

Yeah, I knew these too. But, so what? He took the time to write the article, and I am sure others will find it useful. Nice job!

Collapse
ibrahima92 profile image