Slinky

Add JavaScript tests to <link> tags to toggle stylesheets

About

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.

Usage

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.

Techniques Capable