I’m wondering if there is a possibility to make a div ignore all css rules in the document and instead using a different stylesheet for itself and all of its child nodes.
A little example:
<html>
<head>
<style>
div{color:red}
</style>
</head>
<body>
<div>This is red text</div>
<div stylesheet="/path/to/my/stylesheet.css">
This is text in a color defined in the other stylesheet
<div>This is also not red</div>
</div>
</body>
</html>
As you can see, I want to define a stylesheet directly onto a div, and not globally. Is there a way to do something like that?
What I want to achieve is more encapsulation of my code. I know there also possibilities like pseudo-namespacing, but that’s ugly as hell and still does not guarantee that there are no conflicts…
Update
In the meantime, I’ve found the “scoped” attribute of style elements, which does a very similar thing to what I requested. But it’s supported by almost no browser.
Are there better solutions?
You won’t be able to do this without a
<style scoped>attribute. And, as you said, that is horribly unsupported. This is a jQuery plugin for scoped styles on GitHub, and it pushes support for a lot more browsers. You’d also be able to@import other-stylesheet.cssin your scoped style definition with this jQuery plugin.All things considered though, you might actually be better off using multiple classes on one element. Give a div a couple of classes, and you can organize your projects fairly decently. Something like
<div class="parent child grandchildren-1">would only be selected by this css: