Fork me on GitHub

@niamu: I've been trying out your suggestions today, and I still can't figure out how to incorporate garden with hiccup (or are they mutually exclusive? I don't think so...) Any chance you could post an example on how to attach a garden css object to a hiccup one?


@josh.freckleton: garden renders a string of CSS just like hiccup renders a string of HTML, so you have two options… Either try to use garden.core/style to try and use it in a style attribute on a hiccup HTML element. I honestly haven’t tried this out much and can’t verify if hiccup requires that the value of :style be a map or a string. If it requires a map, then you’re out of luck and can’t do this... (html [:div {:style (style…)}]) Or you can literally create a :style tag with hiccup and use garden.core/css inside it.


(html [:style (css…)])


hope that helps.


Personally I’ve been experimenting with the scoped attribute on style tags (`[:style {:scoped true} (css…)]`) and then using gensym on the top parent style selector to create a unique class to solve namespace problems and style conflicts on other UI components.


That’s worked out pretty well in an app that has several dozen components on screen at once, although that’s just my anecdotal evidence on a single relatively powerful machine. I have yet to do any benchmark tests on what that really does to rendering performance.


@niamu: thanks niamu, this really helps simple_smile


For the record, per @niamu 's suggestion, creating a style tag works really well:

(defselector h5)
(defselector div)
(defclass hoverable)
(defpseudoclass hover)
(defpseudoelement first-letter)
      ;(css [(h5 first-letter) {:color "#ff0000"}])
      (css [(div hoverable hover) {:background-color "red"}]))]


And here was an initial use for it that I had, took a while to figure out garden, so I'll post this here just in case it helps someone:

     (css [(descendant hoverable on-hover) {:display "none"}])
     (css [(descendant (hoverable hover) off-hover) {:display "none"}])
     (css [(descendant (hoverable hover) on-hover) {:display "block"}]))]
It's for showing/hiding elements when the parent is hovered over. Parent gets .hoverable, children get on-hover to show when hovered, off-hover to show otherwise.


Glad you got it working. A couple notes with what you have… The str shouldn’t be necessary. You can make a single call to css thusly…

 (css [(descendant hoverable on-hover) {:display "none"}]
      [(descendant (hoverable hover) off-hover) {:display "none"}]
      [(descendant (hoverable hover) on-hover) {:display "block"}])]


@niamu nice, that worked well, except I've got one glitch. If I want to define something like: content: "ABC" I do it like this: {:content "\"ABC\""} and it renders as: content: &qout;ABC&qout;;, any idea how to get quotes into the style tag? (note, I mispelled quot so that slack doesn't format it)


I've tried double escaping it, but then the quotes just render as: \&qout;