Comments (2)
Thanks for the discussion. I was sure there were things I had not considered and expected as much.
from hybrids.
Styling limitations exist because of older browser support. It is not a library limitation. You can use expressions in <style>
element if you target modern browsers. However, then you should use <style>
element in your template rather than passing a string value to .style()
helper. Why?
Again, because of polyfills, .style()
helper changes the signature of the template (under the hood ShadyCSS creates style element and put it into the head of the document with a special prefix, which is added to all elements of the template. I didn't check, but your example might break with more changes). It means that a template with a different style, like in your example (when changing isRed
value) creates a new, unique template ID. When engine takes new template ID, it wipes out "old" template and replaces it with the new one.
Even though your example works, it brings a big performance cost. When you change isRed
value, your <h1>
element will be replaced with new <h1>
element.
For CSS in JS like approach, I recommend using inline styles, which are supported by the template engine:
const App = {
isRed: true,
render: ({ isRed }) => html`
<h1 style={{ color: isRed ? "red" : "blue" }}>Hello World</h1>
`,
};
You can also create "helper" method, for creating your styles:
const fontSize = {
normal: "1rem",
};
const style = isRed => ({
fontSize: fontSize.normal,
color: isRed ? "red" : "blue",
});
const App = {
isRed: true,
render: ({ isRed }) => html`
<h1 style={style(isRed)}>Hello World</h1>
`,
};
Although, creating dynamic styles at scale might have some performance impact. Creating a static style, and then using classes or other selectors for switching styles will always be faster.
from hybrids.
Related Issues (20)
- Tailwind integration HOT 2
- Update Store based on previous value HOT 10
- How to compile statically? HOT 5
- Typing Issue When Redefining HTMLElement Built-In Properties HOT 2
- AsyncIterator HOT 2
- Initializing object properties with `undefined` no longer accepted in v8.0.0 HOT 4
- Feature Request: Custom Elements Manifest Analyzer HOT 1
- Class attribute mix-in _on_ the web-component HOT 12
- Extension for FLIP / Miotion Animations in planning? HOT 10
- Timing of connect during instantiation HOT 13
- Rendering components without the ShadowDOM? HOT 1
- Working with Chart.js HOT 1
- `class` attribute changes rendering in v8.1.7 HOT 4
- render function mutating host property breaks rendering in v8.1.6 HOT 5
- Properties assigned undefined when accessing them for the first time HOT 1
- Why don't store models leverage property descriptors too? HOT 7
- Storage-first/storage-only option for [store.connect] HOT 10
- React integration - Error while unmounting the component HOT 2
- Try render a table but encounter a problem HOT 3
- about destructured host parameter in render function HOT 2
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.