Skip to content

A vanilla javascript plugin for polyfilling the light-level CSS @media feature.

License

Notifications You must be signed in to change notification settings

DaveOrDead/light-levels

Repository files navigation

Light Levels

Travis npm package Coveralls

A vanilla JavaScript plugin for polyfilling the light-level CSS @media feature.

This media feature can be used to adjust styles based on the ambient light level - however since it's from a relatively recent Working Draft, it currently has zero browser support.

This polyfill detects ambient light levels and applies a corresponding class name to the <html> element in order to emulate the same behaviour today.

It is recommended to combine this plugin with the PostCSS plugin postcss-light-levels which allows you to write the upcoming syntax but uses it to generate class names which correlate to the ones generated by this library.

It is worth nothing that both this JS library and PostCSS plugin can be used independently if you wish.

Table of Contents

Demo

A working demo can be found here: https://daveordead.github.io/light-levels-demo/

Browser Support

IE / Edge
Edge
Firefox
Firefox
Firefox
Android Firefox
Chrome
Chrome
Chrome
Android Chrome
16 62 🚩 62 🚩 54 🏁 54 🏁

🚩 uses deprecated ondevicelight behind the device.sensors.ambientLight.enabled feature flag

🏁 Uses AmbientLightSensor behind the #enable-generic-sensor-extra-classes feature flag

Installation

npm

npm install light-levels --save

CDN

<script src="https://unpkg.com/light-levels/umd/light-levels.min.js"></script>

A vanilla JavaScript plugin for polyfilling the light-level CSS @media feature.

Usage

ES module

import lightLevels from "light-levels";

lightLevels();

CommonJS

const lightLevels =  require("light-levels");

lightLevels();

UMD

If you use the direct <script> approach you can instantiate lightLevels as a browser global.

<script>
    lightLevel();
</script>

CSS

By default this plugin applies classes of .light-level-dim, .light-level-normal or .light-level-washed to match the values of the light-level media query.

/* Styles to apply in low light environments */
.light-level-dim p {
  background-color: black;
  color: white;
}

/* Styles to apply in normal light environments */
.light-level-normal p {
  background-color: white;
  color: black;
}

/* Styles to apply in bright light environments */
.light-level-washed p {
  background-color: pink;
  color: orange;
}

Options

lightLevels({
    prefix: "light-level-"
});
Name Usage Default
prefix if the prefix light-level- doesn't suit your code base, you can change it to something more appropriate with this option. Note: The postfix names of ['dim' \ 'normal' \ 'washed'] can not be modified. If you are using this in combination with the PostCSS plugin you should also update the prefix option there. 'light-level-'

License

Copyright (c) 2020 David Berner

Licensed under the MIT license (see LICENSE.md for more details)

About

A vanilla javascript plugin for polyfilling the light-level CSS @media feature.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published