A ui framework where you only write turing complete CSS. No HTML, no JS, no build system.
Disclaimer: Don't use this
<script async defer src="https://unpkg.com/@css-everything/render/dist/renderer/index.js"></script>
The renderer by default uses the body element. You can use :root
to describe the starting point. Here's a simple counter example:
:root { --counter: '0'; --cssx-children: div#count button#decr button#incr; } #count::after { content: "Count: " var(--counter); } #incr { --cssx-on-click: update(':root', --counter, calc(get-var(--counter) + 1)); --cssx-text: "++"; } #decr { --cssx-on-click: update(':root', --counter, calc(get-var(--counter) - 1)); --cssx-text: "--"; }
Here are a few live examples for you to try out -
- Here's a calculator example
- Here's a todo app example
- Here's a simple counter example
- Here's a digital & analog clock example
- More in the examples directory
- Read the documentation to become enlightened.
- Here's how this works.
Why not?
What?
You can find the answer with this example.
Yep. Not that you asked, but here's how to calculate factorial of a number.
:root { --cssx-children: div#container; } #container { --factorial: func(--n: number) if(lte(get-var(--n), 1), 1, calc( get-var(--n) * call(--factorial, map(--n: calc(get-var(--n) - 1))) )); --cssx-text: string("7! = ", call(--factorial, map(--n: 7))); }
- If you want to directly render some raw html, you can use
--cssx-disgustingly-set-innerhtml
. - If you want to run js expressions, you can use the
js-eval
function. Eg:js-eval("new Date().getSeconds()")
No. In fact, this'll probably break if you try to use it with a css preprocessor.