19

What is the syntax for selecting the first element with a certain class? Please specify whether that method of selection is part of CSS3 or CSS2.1.

0

5 Answers 5

63

If you need the first element with a certain class among its siblings, you can use

.myclass {
    /* styles of the first one */
}

.myclass ~ .myclass {
    /* styles of the others (must cancel the styles of the first rule) */
}

Don't try to use .myclass:not(.myclass ~ .myclass) to do this in only one rule, it won't work since :not() only accepts simple selectors in the parentheses.

If you want the first .myclass in the whole document, there is no way to do it with CSS alone.

The :nth-of-type() or :nth-child() approaches posted are wrong, even if they coincidentally happen to match the elements you want in your page.

Browser support of sibling selector (~): IE7+ and all others.

Sign up to request clarification or add additional context in comments.

4 Comments

Browser support is actually better than the CSS structural pseudoclasses. Edited my answer to include it.
Fail me... I just realized I had thought of this myself some time after you posted this, completely forgetting about your answer. I've credited you here now: stackoverflow.com/questions/2717480/…
do you know for the last element with the same class?
you save my day man, thanks!! just in case, instead of override, you can select the first one like this: .myclass:not(.myclass ~ .myclass)
1

2023 answer

You can now use selectors inside :nth-child and :nth-last-child. So if you have:

<div class="my-container">
   <div class="class1"></div>
   <div class="class1"></div>
   <div class="class2"></div>
   <div class="class2"></div>
</div>

Select the div with the first class2 with this:

:nth-child(1 of .class2) {
  background: white
}

Or, if you want more specificity, this:

.my-container .class2:nth-child(1 of .class2) {
  background: white
}

Further reading:

Comments

0

This problem sucks as bad as the solutions. IMO you should just give the first element a class of .first{} programmatically.

Comments

-1

Try this

.testparent .test:first-child {
    color: red;
}

<div class="testparent">
<div class="test">test</div>
<div class="test">test</div>
<div class="test">test</div>
</div>

the first div 'test' has red color only.

3 Comments

Um, no, that matches the first p of every .test.
And if the first child doesn't have .test, but some other sibling does, then nothing gets selected.
@ngduc It has worked for me using class names instead of element types. Thanks
-2
.class-name:first-of-type {
  ⋮ declarations
}

1 Comment

The :first-of-type selector applies to element names, not class names: developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.