viewstat.js
Viewport Information — CSS Media Query Tools — Polyfills
viewstat is a frontend-only JavaScript library that provides various tools to interact with CSS media queries and the viewport. It's features include:
- Polyfills for
matchMedia
andrequestAnimationFrame
. - Screen/Viewport information, such as reliable
width
,height
anddevicePixelRatio
detection as well as screen parameters like refresh rate and color depth. - Media query tools to check support for individual rules, units and to determine the current values of media queries such as
width
andresolution
.
Support
- Chome 10+ (tested)
- Edge 12+
- Firefox 3.5+ (tested)
- Opera 10+
- IE 9+ (tested)
Installation
Install the package using npm or yarn:
npm i viewstat@latest
yarn add viewstat@latest
To import from JavaScript:
// import the package as a bundle
import * as viewstat from "viewstat";
console.log(viewstat.VERSION);
// import individual modules
import { screen } from "viewstat";
console.log(screen.layoutViewport.width);
Types and UMD exports are also available.
Although not recommended, the library can also be loaded directly into a web page via a CDN link:
<script type="text/javascript" src="https://unpkg.com/viewstat@latest/build/viewstat.umd.min.cjs" defer></script>
Note that this library must be loaded after the body element.
Example
Get the current screen's refresh rate:
import { screen } from "viewstat";
const refreshRate = await screen.getRefreshRate();
Test support for the dppx
unit in resolution
media queries:
import { media } from "viewstat";
const supportsResolutionWithDPPX = media.supportsRangedMediaUnit("resolution", "dppx");
Check compatibility of requestAnimationFrame
import { getCompatInfo } from "viewstat";
const { name, supported } = getCompatInfo("requestAnimationFrame");
// e.g.
// supported: true
// name: "webkitRequestAnimationFrame"
Documentation
Documentation is available here. Alternatively, it can also be built from source.
Development & Contributing
Contributing to this project is strongly encouraged as I currently have little time to continue active development.
Setup
Development on this project requires Git and npm. Download the repository and install the dependencies:
git clone https://github.com/solarunes/viewstat.js viewstat
cd viewstat
npm install
Development Server
Run a local development server. This will provide a local build in the dev
directoy. HMR and live reload are supported by default.
npm run dev
Build
Create a quick build without type declarations becuase TSC is egregiously slow. Run without the prefix to create a full build.
npm run build:notypes
Linting & Testing
Apply code formatting (ESLint rules are available here):
npm run lint:fix
Run tests in the browser (subject to improvement):
npm test
Testing in legacy browsers
Recommended strategy:
- Copy the UMD bundle from the build folder into the
test.html
file. - Create a temporary domain for the webpage, using for example TiinyHost or GitHub Pages.
- Set up a virtual machine containing the legacy operating system and browser.
- Open the webpage in the virtual machine, check for error messages and unexpected behavior.
Create Docs
Build and serve documentation directly from source:
npm run docs:build
npm run docs:serve