280

If the HTML has elements like this:

id="product42"
id="product43"
...

How do I match all of those id's starting with "product"?

I've seen answers that do this exactly using javascript, but how to do it with only CSS?

abc123
  • 8,043
  • 7
  • 49
  • 80

5 Answers5

496
[id^=product]

^= indicates "starts with". Conversely, $= indicates "ends with".

The symbols are actually borrowed from Regex syntax, where ^ and $ mean "start of string" and "end of string" respectively.

See the specs for full information.

Niet the Dark Absol
  • 320,036
  • 81
  • 464
  • 592
86

I'd do it like this:

[id^="product"] {
  ...
}

Ideally, use a class. This is what classes are for:

<div id="product176" class="product"></div>
<div id="product177" class="product"></div>
<div id="product178" class="product"></div>

And now the selector becomes:

.product {
  ...
}
Blender
  • 289,723
  • 53
  • 439
  • 496
  • 1
    @Blender, thanks, I chose the other answer because it explains a bit more to me and understand the symbols being used. I can't use classes for this scenario, otherwise, yes it would be nicer. – abc123 Jul 16 '12 at 14:14
8

Use the attribute selector

[id^=product]{property:value}
Musa
  • 96,336
  • 17
  • 118
  • 137
4

I want to share this solution too, maybe in the future it could help someone.
As the others said you can write [id^=product] for id

But we can give an example for the class as well: [class^="product-"] which indicates classes starts with product and also * like this [class*="product-"]

This is a simple example :

/* Icons */
[class^="icon-"], [class*=" icon-"] {
  /* use !important to prevent issues with browser extensions that change fonts */
  font-family: 'mk-font' !important;
  font-size: 3em;
}

good luck ...

Freeman
  • 9,464
  • 7
  • 35
  • 58
0

I noticed that there is another CSS selector that does the same thing . The syntax is as follows :

[id|="name_id"]

This will select all elements ID which begins with the word enclosed in double quotes.

  • How did you notice? reference? – Ben Bozorg Aug 25 '17 at 01:16
  • Doc for this here : https://www.w3.org/TR/selectors-3/#attribute-selectors This should select all id which start or equal to "name_id" – Dessauges Antoine Apr 11 '19 at 06:22
  • `att|=val` is NOT the same as `att^=val`. From the reference mentioned : The `|=` selector "Represents an element with the att attribute, its value either being exactly "val" or beginning with "val" **immediately followed by "-"**. " So an id like "product42" would not be matched by `|=`, but "product-42" would. – Goozak Jan 10 '20 at 15:36