UNPKG

contrast-ratio-checker

Version:

A package based on WCAG 2.0 to easily check contrast ratio.

145 lines (93 loc) 3.68 kB
# Contrast Ratio Checker A package based on WCAG 2.0 to easily check contrast ratio. The equations for luminance and contrast ratio are based on [WCAG 2.0](https://www.w3.org/TR/WCAG20/) as shown below: https://www.w3.org/TR/WCAG20/#relativeluminancedef http://www.w3.org/TR/WCAG20/#contrast-ratiodef ## Installation: ``` npm install contrast-ratio-checker ``` ## Usage: To calculate `luminance`: ```js const crc = new ContrastRatioChecker() const rgb = { red: 255, green: 129, blue: 0 } crc.getLuminance(rgb) // result: 0.36960513804637335 ``` To calculate `contrast ratio by luminance`: ```js const crc = new ContrastRatioChecker() const rgb1 = { red: 255, green: 129, blue: 0 } const rgb2 = { red: 100, green: 0, blue: 58 } const l1 = crc.getLuminance(rgb1) const l2 = crc.getLuminance(rgb2) //luminance order doesnt matter crc.getContrastRatioByLuminance(l1, l2) // result: 5.235369975583679 ``` To calculate `contrast ratio by RGB Object`: ```js const crc = new ContrastRatioChecker() const rgb1 = { red: 255, green: 129, blue: 0 } const rgb2 = { red: 100, green: 0, blue: 58 } crc.getContrastRatioByRgb(rgb1, rgb2) // result: 5.235369975583679 ``` To calculate `contrast ratio by HEX string`: ```js const crc = new ContrastRatioChecker() const hex1 = "#e5e5e5" const hex2 = "#ab0" //shorthands are accepted crc.getContrastRatioByHex(hex1, hex2) // result: 1.698093107780376 ``` ### Validation --- > WCAG 2.0 says that to a text be considered large, it needs 18pt or 14pt bold. > > `level AA (minimum)` says that if text is large, ratio needs to be `>= 3, otherwise >= 4.5`. > > `level AAA (enhanced)` says that if text is large, ratio needs to be `>= 4.5, otherwise >= 7`. > > **Source**: > > https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-contrast.html > > https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast7.html To get validation using `contrast ratio` as input: ```js const crc = new ContrastRatioChecker() const ratio = 4.7 crc.getWcagRatioValidation(ratio) // result: { WCAG_AA: true, WCAG_AAA: false } //accepts as args: ratio, font size in px and bold (boolean) crc.getWcagRatioValidation(ratio, 30) // result: { WCAG_AA: true, WCAG_AAA: true } ``` To get validation using `hex string` as input: ```js const crc = new ContrastRatioChecker() const hex1 = "#e5e5e5" const hex2 = "#555" //shorthands are accepted // ratio ~5.91 crc.getRatioValidationByHex(hex1, hex2) // result: { WCAG_AA: true, WCAG_AAA: false } crc.getRatioValidationByHex(hex1, hex2, { fontSizePx: 19, bold: true }) // result: { WCAG_AA: true, WCAG_AAA: true } // using custom ratios: crc.getRatioValidationByHex(hex1, hex2, { fontSizePx: 19, bold: true, custom: 6, }) // result: { WCAG_AA: true, WCAG_AAA: true, CUSTOM: false } ``` To get validation using `RGB Object` as input: ```js const crc = new ContrastRatioChecker() const rgb1 = { red: 255, green: 184, blue: 202 } const rgb2 = { red: 120, green: 0, blue: 122 } // ratio ~6.23 crc.getRatioValidationByRgb(rgb1, rgb2) // result: { WCAG_AA: true, WCAG_AAA: false } crc.getRatioValidationByRgb(rgb1, rgb2, { fontSizePx: 19, bold: true }) // result: { WCAG_AA: true, WCAG_AAA: true } // using custom ratios: crc.getRatioValidationByRgb(rgb1, rgb2, { fontSizePx: 19, bold: true, custom: 6, }) // result: { WCAG_AA: true, WCAG_AAA: true, CUSTOM: true } ``` ### License Copyright © 2023, [Vinícius R. Vieira](https://github.com/viniciusrvieira). Released under the [MIT License](/LICENSE).