A CSS preprocessor where you write Elm code and get .css files. Inspired by the excellent Sass, Stylus, and CSS Modules.
(This is a BETA release, so please be careful! The documentation in particular is very much a work in progress.)
Try it out! (make sure you already have elm installed, e.g. with npm install -g elm)
$ npm install -g elm-css
$ git clone https://github.com/rtfeldman/elm-css.git
$ cd elm-css/examples
$ elm-css src/Stylesheets.elm
$ less homepage.cssIsn't it a pain when you want to rename a CSS class or ID, but can't be sure that the rename wouldn't break things? Or when it turns out the reason something wasn't displaying as expected was that you had a typo in the class name? How about when you load multiple stylesheets onto the same page and some of the class names overlap?
Wouldn't it be sweet if those problems went away?
elm-css lets you:
elm-css doesn't need a special notion of "parameterized mixins" because you can already write arbitrary Elm functions...and not just to parameterize mixins, but to parameterize anything!There are a few examples to check out!
Here's an example:
css =
(stylesheet << withNamespace "dreamwriter")
[ body
[ overflowX auto
, minWidth (px 1280)
]
, (#) Page
[ backgroundColor (rgb 200 128 64)
, color (hex "CCFFFF")
, width (pct 100)
, height (pct 100)
, boxSizing borderBox
, padding (px 8)
, margin zero
]
, (.) NavBar
[ margin zero
, padding zero
, children
[ li
[ (display inlineBlock) |> important
, color primaryAccentColor
]
]
]
]
primaryAccentColor =
hex "ccffaa"The above is vanilla Elm code. Hidden and Page are backed by union types, so
if they get out of sync with your view code, you'll get a nice build error.
$, #, ~, and the like are custom operators.
The above elm-css stylesheet compiles to the following .css file:
body {
overflow-x: auto;
min-width: 1280px;
}
#dreamwriterPage {
background-color: rgb(200, 128, 64);
color: #CCFFFF;
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 8px;
margin: 0;
}
.dreamwriterNavBar {
margin: 0;
padding: 0;
}
.dreamwriterNavBar > li {
display: inline-block !important;
color: #ccffaa;
}You can also use elm-css for inline styles with the asPairs function, like so:
styles = Css.asPairs >> Html.Attributes.style
button
[ styles [ position absolute, left (px 5) ] ]
[ text "Whee!" ]| Version | Notes |
|---|---|
| 1.1.0 | Add Helpers |
| 1.0.0 | Initial Release |