You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There is built-in method of directly tying a CSS file to a component
Proposed Actions
Design Idea: Apply in-line styles via Python cssselect
We could parse the CSS document using lxml.cssselect and potentially add the styles in-line. Would need to generate some sort of VDOM-LXML compatibility layer though. Maybe we store our VDOM as an attribute on each LXML node?
It might be make sense (from a performance standpoint) to homebrew a VDOM-compatible CSS selection engine... There are a couple we can take inspiration from: vtree-select, cssauron. This would be a pretty large undertaking, and gets really tricky with all of the CSS level 3 selectors.
Design Idea: Leverage django_css
Add a css_module decorator that loads a stylesheet using django_css(..., only_once=True) (see here: #194).
By default, it will attempt to load the Django static file named <REACTPY_STYLESHEET_SUBDIR>/<COMPONENT_DOTTED_PATH>.css. But the user will be able to override the path using positional args.
Will need a settings.py configuration setting called REACTPY_STYLESHEET_SUBDIR. Additionally, it makes sense for a manual override to exist within the decorator css_module(subdir="...") for library maintainers to use.
This doesn't really "tie" a piece of CSS to a component. It only ties the load time together.
Design Idea: Apply in-line styles via JavaScript (client sided)
It's also possible for us to instead apply the inline styles client-sided, via some kind of JavaScript. There appears to be a package that does this.
This would be pretty janky in terms of loading behavior.
The text was updated successfully, but these errors were encountered:
Current Situation
There is built-in method of directly tying a CSS file to a component
Proposed Actions
Design Idea: Apply in-line styles via Python
cssselect
We could parse the CSS document using
lxml.cssselect
and potentially add the styles in-line. Would need to generate some sort of VDOM-LXML compatibility layer though. Maybe we store our VDOM as an attribute on each LXML node?Design Idea: Apply in-line styles via Python homebrewed VDOM selector engine
It might be make sense (from a performance standpoint) to homebrew a VDOM-compatible CSS selection engine... There are a couple we can take inspiration from:
vtree-select
,cssauron
. This would be a pretty large undertaking, and gets really tricky with all of the CSS level 3 selectors.Design Idea: Leveragedjango_css
Add acss_module
decorator that loads a stylesheet usingdjango_css(..., only_once=True)
(see here: #194).By default, it will attempt to load the Django static file named<REACTPY_STYLESHEET_SUBDIR>/<COMPONENT_DOTTED_PATH>.css
. But the user will be able to override the path using positional args.Will need asettings.py
configuration setting calledREACTPY_STYLESHEET_SUBDIR
. Additionally, it makes sense for a manual override to exist within the decoratorcss_module(subdir="...")
for library maintainers to use.This doesn't really "tie" a piece of CSS to a component. It only ties the load time together.
Design Idea: Apply in-line styles via JavaScript (client sided)It's also possible for us to instead apply the inline styles client-sided, via some kind of JavaScript. There appears to be a package that does this.This would be pretty janky in terms of loading behavior.
The text was updated successfully, but these errors were encountered: