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.
A working demo can be found here: https://daveordead.github.io/light-levels-demo/
Edge |
Firefox |
Android Firefox |
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
npm install light-levels --save
<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.
import lightLevels from "light-levels";
lightLevels();
const lightLevels = require("light-levels");
lightLevels();
If you use the direct <script>
approach you can instantiate lightLevels
as a browser global.
<script>
lightLevel();
</script>
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;
}
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-' |
Copyright (c) 2020 David Berner
Licensed under the MIT license (see LICENSE.md for more details)