GithubHelp home page GithubHelp logo

tomhodgins / jsincss Goto Github PK

View Code? Open in Web Editor NEW
51.0 6.0 2.0 16 KB

A JS-in-CSS stylesheet loader

Home Page: https://jsincss.com

License: MIT License

JavaScript 100.00%
jsincss js-in-css css-reprocessor event-driven virtual-stylesheet css-experiment

jsincss's Introduction

jsincss

An event-driven virtual stylesheet manager

About

Jsincss is a plugin that allows you to use JavaScript to template the creation of CSS stylesheets at runtime based on events happening in the browser. This allows you to use JavaScript to easily extend CSS to include new features.

This plugin is a JavaScript module that loads JS-in-CSS stylesheets, manages the creation of <style> tags to output the processed stylesheets, and registers event listeners for reprocessing loaded stylesheets when changes occur in the browser.

Downloading

You can download jsincss and add it to your codebase manually, or download it with npm:

npm install jsincss

Another option is linking to the module directly from a CDN like unpkg:

<script type=module>
  import jsincss from 'https://unpkg.com/jsincss/index.vanilla.js'
</script>

Importing

You can import the plugin into your own JavaScript modules in a couple of ways.

The first way is using the native import statement in JavaScript. Here you can assign any name you want to the function you are importing, and you only need to provide a path to the plugin's index.vanilla.js file:

import jsincss from './index.vanilla.js'

You can also use require() to load this plugin instead with a bundler like Webpack or Parcel:

const jsincss = require('jsincss')

Once you have imported this plugin into your module, you can use the plugin as jsincss()

Using JS-in-CSS Stylesheets

The main goal of this plugin is to let people using a JS-in-CSS workflow load JIC stylesheets inside of a JavaScript module.

The plugin has the following format:

jsincss(stylesheet, selector, events)
  • stylesheet is a JavaScript function that returns a CSS stylesheet as a string
  • selector is string containing either 'window' or a CSS selector
  • events is an array of events to add event listeners for, quoted as strings: (eg. ['load', resize'])

The default selector is window, and the default list of events is ['load', 'resize', 'input', 'click', 'reprocess'].

You can also create and listen for custom events with JavaScript using new Event() and dispatchEvent() for total control over when jsincss reprocesses styles.

Example

This example uses the default selector and events list, and provides the stylesheet inline.

<script type=module>
  import jsincss from 'https://unpkg.com/jsincss/index.vanilla.js'

  jsincss(event => `

    body::before {
      content: '${innerWidth} x ${innerHeight} on ${event.type}';
    }

  `)
</script>

It's also possible to write your stylesheets as a separate JavaScript module like this:

export default event => `

  body::before {
    content: '${innerWidth} x ${innerHeight} on ${event.type}';
  }

`

And then import both the jsincss plugin and the stylesheet into your module and run them like this:

import jsincss from 'https://unpkg.com/jsincss/index.vanilla.js'
import stylesheet from './path/to/stylesheet.js'

jsincss(stylesheet)

Tools using jsincss

Compatible JS-in-CSS Plugins

jsincss's People

Contributors

tomhodgins avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

jsincss's Issues

Compatibility with other css in js solutions?

Hey!

The feature list of your library seems really interesting. I was wondering if this library can work together other css in js solutions, for example Styledcomponents.

Any examples in the docs could help others that try to figure out if they can use this library in their existing workflow.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.