Add JavaScript tests to <link> tags to toggle stylesheets
Similar to how you can add media queries to <link>
tags with the media=""
attribute, Slinky lets you define a custom data-selector=""
and data-test=""
attributes to any <link>
tag to define an element to watch, and a JavaScript test to evaluate from the context of the matching element.
A simple usage might toggle the display of a stylesheet when the #sidebar
element is wider than 500px:
<link
rel="stylesheet"
href="sidebar.css"
media="none"
data-selector="#sidebar"
data-test="this.offsetWidth > 500"
>
By default Slinky will add event listeners for window.load
, window.resize
, window.input
and window.click
, but you can override this by optionally specifying a data-event=""
attribute as well. This stylesheet would listen to window.scroll
alone:
<link
rel="stylesheet"
href="scroll.css"
media="none"
data-selector="body"
data-test="this.scrollTop > innerHeight"
data-event="scroll"
>
Note that in these examples I've included media="none"
so the stylesheets default to being hidden - for progressive enhancement if you wish to default to the stylesheets applying unless they need to be hidden by JS, you can leave the media="none"
off and the stylesheet will load by default, instead of remain hidden by default.