PostCSS Focus Visible lets you use the :focus-visible
pseudo-class in
CSS, following the Selectors Level 4 specification.
It is the companion to the focus-visible polyfill.
```css :focus:not(:focus-visible) { outline: none; }
/ becomes /
:focus:not(.focus-visible) { outline: none; }
:focus:not(:focus-visible) { outline: none; } ```
PostCSS Focus Visible duplicates rules using the :focus-visible
pseudo-class
with a .focus-visible
class selector, the same selector used by the
focus-visible polyfill. This replacement selector can be changed using the
replaceWith
option. Also, the preservation of the original :focus-visible
rule can be disabled using the preserve
option.
Add PostCSS Focus Visible to your project:
bash
npm install postcss-focus-visible --save-dev
Use PostCSS Focus Visible to process your CSS:
```js const postcssFocusVisible = require('postcss-focus-visible');
postcssFocusVisible.process(YOUR_CSS /, processOptions, pluginOptions /); ```
Or use it as a PostCSS plugin:
```js const postcss = require('postcss'); const postcssFocusVisible = require('postcss-focus-visible');
postcss([ postcssFocusVisible(/ pluginOptions /) ]).process(YOUR_CSS /, processOptions /); ```
PostCSS Focus Visible runs in all Node environments, with special instructions for:
| Node | PostCSS CLI | Webpack | Create React App | Gulp | Grunt | | --- | --- | --- | --- | --- | --- |
The preserve
option defines whether the original selector should remain. By
default, the original selector is preserved.
js
focusVisible({ preserve: false });
```css :focus:not(:focus-visible) { outline: none; }
/ becomes /
:focus:not(.focus-visible) { outline: none; } ```
The replaceWith
option defines the selector to replace :focus-visible
. By
default, the replacement selector is .focus-visible
.
js
focusVisible({ replaceWith: '[focus-visible]' });
```css :focus:not(:focus-visible) { outline: none; }
/ becomes /
:focus:not([focus-visible]) { outline: none; }
:focus:not(:focus-visible) { outline: none; } ```