UVP*
and the future of
CSSinJSΒ
* Unique Value Proposition
by Oleg Slobodskoi @oleg008
The worldβs first
Project Messenger.
Web apps have complex interactions and maintain a state on the client, while web sites mostly render static information.
π‘
UVP
Unique class name
Modules
Variables
Β etc.
Not a UVP
π¦Β Publishing
πΒ Theming
πΒ Data Driven Styling
Agenda
+ π Β The Future
π¦
Publishing
Almost 600K
π¦
Quality Assurance for JS
Linters
Typings
Tests
Runtime Errors
etc.
Namespacing & specificity
at scale of npm?
π―
Package Block Element Modifier
.package---block--element-modifier {}
π
π‘
CSSinJS is
Constraints Automation
Shadow DOMΒ
Is it ready?
Is it well supported?
Is it fast?
π
Always bet on JavaScript
Or whatever better language will replace it
π
π
Theming
Theme is a config, that
defines look and feel.
π‘
Material-UI
React Components that Implement Google's Material Design.
Let's try π¨ CSS!
π°
Built-in Theme
Switch needs download
Redesign in multi-team setup
π
CSS Variables are subject to the cascade, and inherit their value from their parent.
π‘
ππ₯π
React's Context is like
CSS Variables
π€·ββοΈ
Create a theme
Use context
NestingΒ
π
Data Driven Styling
State Based
User settings
API call
Time
etc.
Streaming animations
π
Google Material Motion for JS
No Transitions
No Keyframes
π
β
Reconciliation
Styles application
React Inline Styles
π’
Extreme Perf
60 FPS
JavaScript
One thread
π±
CSSOM FTW
π
Create CSS Rule
Update CSS Rule
JSS Function Values
SCU
π€
Observables
JSS 9 Example
Easy to support
Compatible
RxJS
Bacon.js
Kefir
etc.
Push based
Pointer events
Physics data
Streams coordination
Observable + CSSOM = β€οΈ
Decoupled
Lazy
π
Future
The biggest issue at scale we currently have with all CSSinJS implementations is that they are not shareable without the runtime.
π‘
Interoperable
Style
Transfer
Format
Styled Components
Stylis
Styled Components
+ ISTF Prototype
W3C CSS Spec
πͺ
Interoperable
Publish with X,
use with Y
π
StyleΒ
CSS
CSSinJS
π
Transfer
Compact
Fast
π°
Format
For Machines,
not Humans
Interoperability
Performance
Dynamic capabilities
Cross-platform
Β
The Goal
Thanks!
UVP of CSSinJS
By Oleg Isonen
UVP of CSSinJS
- 2,415