Description
I'm not sure if this isn't related to other issues, but I checked many of them and neither covers what I need.
I come from React and CSS-Modules, where passing down styles is really easy. Just pass down className prop, and css-modules will figure out and hash styles to avoid conflicts.
In svelte I cannot pass down classes to component through class prop, like so:
https://svelte.dev/repl/1d0b80898137445da24cf565830ce3f7?version=3.4.2
There are some solutions to pass styles, like using :global
, but it's fragile: if anywhere inside child component will have class named same, it will cause problems. Sure, we can use BEM or another approach, be very careful with global styles, but I imagine it can happen automagically (like with CSS-Modules).
Another approach is to add add divs inside componetns, but consider Col component from example above. If we have:
<style>
div {
background: tomato;
}
</style>
<Col>
<div>content</div>
</Col>
content will get background, but also will have unwanted gap caused by Col padding. And quickly code will have many unwanted divs.
Why I think it matters?
I wrote hundreds of Rect components and what I learned is that Componets should be able to be styled by developer who is using it. Adding BEM layer or sth else is for me unnecessary work. And may cause conflicts. Imagine dev who use BEM. There may be rare cases when his (global) styles are named same as component's and interfere.
in conclusion
It will be great to pass down classes, not be global, but with some unique id.
PS. I found modular-css package, but it's for svelte2, and I'm not sure if it will works with passing down styles to components.