CSS3 selector :first-of-type with class name?

后端 未结 9 1976
梦毁少年i
梦毁少年i 2020-11-22 03:06

Is it possible to use the CSS3 selector :first-of-type to select the first element with a given class name? I haven\'t been successful with my test so I\'m thin

相关标签:
9条回答
  • 2020-11-22 03:25

    You can do this by selecting every element of the class that is the sibling of the same class and inverting it, which will select pretty much every element on the page, so then you have to select by the class again.

    eg:

    <style>
        :not(.bar ~ .bar).bar {
            color: red;
        }
    <div>
        <div class="foo"></div>
        <div class="bar"></div> <!-- Only this will be selected -->
        <div class="foo"></div>
        <div class="bar"></div>
        <div class="foo"></div>
        <div class="bar"></div>
    </div>
    
    0 讨论(0)
  • 2020-11-22 03:28

    Simply :first works for me, why isn't this mentioned yet?

    0 讨论(0)
  • 2020-11-22 03:31

    Not sure how to explain this but I ran into something similar today. Not being able to set .user:first-of-type{} while .user:last-of-type{} worked fine. This was fixed after I wrapped them inside a div without any class or styling:

    https://codepen.io/adrianTNT/pen/WgEpbE

    <style>
    .user{
      display:block;
      background-color:#FFCC00;
    }
    
    .user:first-of-type{
      background-color:#FF0000;
    }
    </style>
    
    <p>Not working while this P additional tag exists</p>
    
    <p class="user">A</p>
    <p class="user">B</p>
    <p class="user">C</p>
    
    <p>Working while inside a div:</p>
    
    <div>
    <p class="user">A</p>
    <p class="user">B</p>
    <p class="user">C</p>
    </div>
    
    0 讨论(0)
  • 2020-11-22 03:35

    No, it's not possible using just one selector. The :first-of-type pseudo-class selects the first element of its type (div, p, etc). Using a class selector (or a type selector) with that pseudo-class means to select an element if it has the given class (or is of the given type) and is the first of its type among its siblings.

    Unfortunately, CSS doesn't provide a :first-of-class selector that only chooses the first occurrence of a class. As a workaround, you can use something like this:

    .myclass1 { color: red; }
    .myclass1 ~ .myclass1 { color: /* default, or inherited from parent div */; }
    

    Explanations and illustrations for the workaround are given here and here.

    0 讨论(0)
  • 2020-11-22 03:36

    I found a solution for your reference. from some group divs select from group of two same class divs the first one

    p[class*="myclass"]:not(:last-of-type) {color:red}
    p[class*="myclass"]:last-of-type {color:green}
    

    BTW, I don't know why :last-of-type works, but :first-of-type does not work.

    My experiments on jsfiddle... https://jsfiddle.net/aspanoz/m1sg4496/

    0 讨论(0)
  • 2020-11-22 03:36

    This is an old thread, but I'm responding because it still appears high in the list of search results. Now that the future has arrived, you can use the :nth-child pseudo-selector.

    p:nth-child(1) { color: blue; }
    p.myclass1:nth-child(1) { color: red; }
    p.myclass2:nth-child(1) { color: green; }
    

    The :nth-child pseudo-selector is powerful - the parentheses accept formulas as well as numbers.

    More here: https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child

    0 讨论(0)
提交回复
热议问题