Comments (4)
Thanks!
from hybrids.
Hi @waspeer!
CSS encapsulation is related to how the Shadow DOM works. The hybrids render
factory uses it by default - and for a good reason. Each web component is independent by design, and it should be possible to use it regardless of parent elements, etc.. The Shadow DOM gives the developer freedom of using CSS selectors as he wants to, as styles defined inside of the element are not shared with the outside tree and vice versa (there is also very important DOM distribution feature, but it is not the case here).
I encourage you to read more about Shadow DOM. I can recommend you this article - https://developers.google.com/web/fundamentals/web-components/shadowdom. Look closely at the Styling and Resetting inheritable styles (selectors are not shared, but Shadow DOM is not an absolute boundary - inherited properties are propagated into the shadowRoot
).
In the hybrids, you have a few options to share styles. You mentioned about style
helper. It is useful if you want to write styles in .css
files, or have it from the external library. If it is your case to use Bootstrap or something else library, you should know that they weren't built for web components. However, we can create a web component version of it. If your CSS framework uses classes, in the web components world, they should be separate components:
<!-- the default usage with global CSS file -->
<h1 class="title"></h1>
<a class="button"></a>
<!-- WC implementation - styles inside of the elements -->
<my-h1></my-h1>
<my-button></my-button>
All base "CSS components" should be reflected with web component versions rather than used as classes imported in each web component (as the whole library).
Although, if you are only the "consumer" of the library, I think it is normal, that you can import styles, which you need in the specific web component, and use it.
To sum up - WCs are those building blocks, which are elements with classes from CSS frameworks. Instead of creating "big" views with those styles, in WC world you use small one-purpose components with styles related to the specific use case. The hybrids library is an excellent choice because it is super easy to write WC, which just renders element:
// Title element without inputs (reflects "title" class from some CSS framework)
import titleStyles from 'css-framework/styles/title.css';
export default {
render: () => html`<h1 class="title"><slot></slot></h1>`.style(titleStyles),
}
from hybrids.
from hybrids.
Yes, it is possible, but the standard in the community is creating npm packages with dependencies rather than including them into the provided code. You can create a project, where you have two targets:
npm
package withhybrids
as a dependency- built version for standalone usage (like
dist/hybrids.js
version of the hybrids)
There is also one important choice - do you want to define elements in the source code (call customElements.define(...)
) or export definitions for the user. The second option using hybrids will force users to use hybrids to define them, the first one does not give choice about naming (which is now global). What I can see, libraries, for now, use the first option.
from hybrids.
Related Issues (20)
- Small Type Inferencing Issue with Property<E, V> HOT 6
- Cannot pass an object to the API via the "list" method HOT 7
- version 8.2.17 backwards compatibility is broken! HOT 9
- Expand the functionality of drafts
- sync() with nested models is broken HOT 4
- Allow storing an object in a component property HOT 4
- Add partial loading of model data HOT 3
- Why do you remove the lastValue? HOT 2
- The store logs a lot of errors HOT 4
- Convert a Whole Component to Web Component HOT 8
- Scoped CSS HOT 6
- lagging update glitch HOT 2
- Component properties cannot be setted until they are observed HOT 2
- `store.set()` is very slow HOT 5
- Store loads items data when iterating the list of items HOT 2
- store.record(store.record('')) bug HOT 3
- Protect Models from incorrect use HOT 9
- Passing a transform function to 'reflect:' in a property descriptor has no effect without also specifying an observer HOT 2
- Add nullable model values HOT 3
- 'Try to assert value of the '<property_name>' inside of the value function' error while passing children their properties HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hybrids.