-
Notifications
You must be signed in to change notification settings - Fork 733
Description
The scoped style tag HTML attribute works really well with popular frameworks and is far simpler to use than shadow DOM.
e.g. in React:
import React from 'react';
const Profilecard = (props) => {
const styles = `
div {background-color: ${props.bgColor}}
h2 { color: white; }
img {
border-radius: 50%;
height: 80px;
width: 80px;
}`
return (
<div className="card">
<style scoped>{styles}</style>
<h2>{props.name}</h2>
<img src="man3.jpg" alt=""/>
</div>
);
};
export default Profilecard;
Shadow DOM offer more encapsulation than scoped styles, but this level of encapsulation is not often needed, and even sometimes complained about by developers.
e.g. Chris Coyier:
Personally, I wish it was possible to make the shadow DOM one-way permeable: styles can leak in, but styles defined inside can't leak out.
It is important to note that both Vue js and Svelte have replicated this API - it is clearly an API that is both easy to work with and gives the right level of encapsulation (unlike shadow DOM, which is useful for more niche cases).
At the moment people are using many different solutions (CSS Modules, Styled Components and all the other CSS-in-JS options). It would be great if there was a standardized way to solve the problem of scoping rather than the very fragmented options in user-land. I strongly doubt that shadow DOM will prove to be a popular solution capable of attracting people away from these libraries.
A prior discussion about the topic can be found here: #137