Is there a CSS selector by class prefix?

后端 未结 4 541
终归单人心
终归单人心 2020-11-22 05:08

I want to apply a CSS rule to any element whose one of the classes matches specified prefix.

E.g. I want a rule that will apply to div that has class that starts wit

4条回答
  •  盖世英雄少女心
    2020-11-22 05:48

    It's not doable with CSS2.1, but it is possible with CSS3 attribute substring-matching selectors (which are supported in IE7+):

    div[class^="status-"], div[class*=" status-"]
    

    Notice the space character in the second attribute selector. This picks up div elements whose class attribute meets either of these conditions:

    • [class^="status-"] — starts with "status-"

    • [class*=" status-"] — contains the substring "status-" occurring directly after a space character. Class names are separated by whitespace per the HTML spec, hence the significant space character. This checks any other classes after the first if multiple classes are specified, and adds a bonus of checking the first class in case the attribute value is space-padded (which can happen with some applications that output class attributes dynamically).

    Naturally, this also works in jQuery, as demonstrated here.

    The reason you need to combine two attribute selectors as described above is because an attribute selector such as [class*="status-"] will match the following element, which may be undesirable:

    If you can ensure that such a scenario will never happen, then you are free to use such a selector for the sake of simplicity. However, the combination above is much more robust.

    If you have control over the HTML source or the application generating the markup, it may be simpler to just make the status- prefix its own status class instead as Gumbo suggests.

提交回复
热议问题