top | item 6535984

AbsurdJS – JavaScript based CSS preprocessor

64 points| krasimirtsonev | 12 years ago |krasimir.github.io | reply

A new CSS preprocessor written in pure javascript. It's available for nodejs and client-side.

31 comments

order
[+] lux|12 years ago|reply
This is a really powerful idea and makes a lot of sense.

It's as flexible and readable as any CSS preprocessor I've seen, possibly more so because it's in a syntax I won't forget because I program in it all day.

And it's trivial to integrate into any JavaScript setup because it's just JavaScript. Brilliant!

[+] jcampbell1|12 years ago|reply
I completely agree.

When I get a chance, I am going to attempt thing that are impossible with SASS and LESS. There are things that are impossible such as using multiply and screen to create a button of an arbitrary gradient and color that looks good.

This is the first preprocessor that is capable of doing something other than just saving keystrokes.

[+] SkyMarshal|12 years ago|reply
Absolutely, and it takes CSS (preprocessors at least) closer to the LISP ideal of code is data and data is code.

Now that I've seen it, in hindsight I'm struck with several thoughts: 1) in hindsight it seems so obvious, 2) why didn't I think of this, and 3) LESS/SASS/Stylus/etc are obsolete.

[+] krrishd|12 years ago|reply
In the fact that it detects repeated properties and makes the code DRY, that feature could be absorbed into LESS or SASS, and become useful.
[+] jonnyscholes|12 years ago|reply
You can sort of do this with @extend in sass - but I agree its nicer here, it seems to just sort of... do it.
[+] crazygringo|12 years ago|reply
OK... is this just a complete joke "because you can", hence the name...

...or is there some use case for CSS-in-your-JS that I can't quite manage to imagine? I'm straining my brain to think of one...

Edit: more info at http://davidwalsh.name/write-css-javascript

I guess it's trying to be a more flexible version of LESS/SASS by leveraging the full power of JavaScript. I've never felt that LESS was really lacking in power... I'm curious what others think. But interesting idea.

[+] jeremiep|12 years ago|reply
One use case would be to create server-side 'widgets' just like Yesod does.

The basic idea is that they combine the document, style and scripting in a single reusable component. Pages are then built by composing these widgets together and can finally be used as templates when responding to requests.

[+] paulannesley|12 years ago|reply
I think it makes a lot of sense to build the features of Less/Sass etc on top of a well-known parser/interpreter (JS), rather than inventing a new one from scratch.

I already feel like I understand how AbsurdJS works better than I understand Less/Sass, for that reason.

[+] padolsey|12 years ago|reply
Isn't one crucial problem with this that ES object-literal syntax does not guarantee order? And order is pretty important in CSS, no?
[+] tomjakubowski|12 years ago|reply
Off the top of my head, order in CSS is only important when a property is defined multiple times for a given selector, either within the same block or in separate ones. Like these examples:

    .foo {
      font-size: 12px;
      font-size: 14px; // later property wins
    }

    .bar {
      font-size: 12px;
    }

    .bar, .baz {
      font-size: 14px; // later property wins
    }
And I don't see a way to generate either of those cases only using object literals in this library.
[+] jongleberry|12 years ago|reply
an alternative is rework: https://github.com/visionmedia/rework. both absurd and rework use https://github.com/visionmedia/css-parse for parsing CSS. the difference is that rework already has a bunch of great plugins like https://github.com/ai/autoprefixer. i'm not sure why this guy doesn't leverage any of the existing ones.

the only difference is using JSON and JS input vs. a CSS string, but he could have easily written that in less than 100 lines vs an entirely separate framework.

[+] Pirate-of-SV|12 years ago|reply
Fun project.

I guess I wouldn't bee too upset with CSS being replaced by json in the future. It makes sense in a way of using fewer languages.

On the other hand Javascript should probably be replaced by something better too.

[+] nilved|12 years ago|reply
I like the idea. People should note that this doesn't mean mixing your CSS into your JavaScript necessarily - you can precompile CSS just like you would with S*SS.
[+] mrfancypants|12 years ago|reply
It doesn't seem to handle vendor-specific prefixes (-webkit, -moz, etc). I suppose you could write your own mixins (plugins) to handle that, but still, a shame.
[+] krasimirtsonev|12 years ago|reply
Hello guys. Thanks for the comments. The next things which I'm going to do is to start packing components. One of the big problems which I have for a long time, is the fact that I have to deliver html, css and javascript. Usually they are placed in different places and I have to take care to put them in the browser. With AbsurdJS I could send the javascript logic and the css together.
[+] chadscira|12 years ago|reply
How do you handle defining multiple @font-face's?
[+] lux|12 years ago|reply
Not sure if it supports it, but couldn't an array be used? For example:

    "@font-face": [
        { /* font one },
        { /* font two }
    ]
[+] PLejeck|12 years ago|reply
This seems like it would be good for filling a similar role to LLVM, providing a framework to take an object and turn it into CSS. I'm not so sure it makes sense as a language to directly use: JSON is nice as a data serialization format, but it's not very fun to author complex things in it.
[+] underwater|12 years ago|reply
JavaScript. JSON is more rigid and verbose, for example it requires that properties be quoted.
[+] elwell|12 years ago|reply
Looks possibly awesome with CoffeeScript
[+] thenerdfiles|12 years ago|reply
JSON presentation layer for test-driven CSS for teh win.