views:

65

answers:

2

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 with status- (A and C, but not B in following snippet):

<div id='A' class='foo-class status-important bar-class'></div>
<div id='B' class='foo-class bar-class'></div>
<div id='C' class='foo-class status-low-priority bar-class'></div>

Some sort of combination of:
div[class|=status] and div[class~=status-]

Is it doable under CSS 2.1? Is it doable under any CSS spec?

Note: I do know I can use jQuery to emulate that.

+3  A: 

This is not possible with CSS selectors. But you could use two classes instead of one, e.g. status and important instead of status-important.

Gumbo
+1  A: 

You can't do this no. There is one attribute selector that matches exactly or partial until a - sign, but it wouldn't work here because you have multiple attributes. If the class name you are looking for would always be first, you could do this:

<html>
<head>
<title>Test Page</title>
<style type="text/css">
div[class|=status] { background-color:red; }
</style>
</head>
<body>
<div id='A' class='status-important bar-class'>A</div>
<div id='B' class='bar-class'>B</div>
<div id='C' class='status-low-priority bar-class'>C</div>

</body>
</html>

Note that this is just to point out which CSS attribute selector is the closest, it is not recommended to assume class names will always be in front since javascript could manipulate the attribute.

SBUJOLD
yeah, thought of that. It might become an issue when jQuery gets into picture, since it might insert a class at the front.
Yeah I'll edit my post to make it clear it clearly isn't a recommended way of doing it. If you have control over the class names then Gumbo's suggestion definitely would be the way to go (plus attribute selectors on older IE browsers is not supported).
SBUJOLD