Skip to content
Use the :focus-visible pseudo-selector in CSS
Branch: master
Clone or download
Latest commit 5182214 Sep 18, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test 3.0.0 Apr 8, 2018
.editorconfig 2.0.0 Feb 17, 2018
.gitignore
.rollup.js 4.0.0 Sep 18, 2018
.tape.js
.travis.yml 4.0.0 Sep 18, 2018
CHANGELOG.md 4.0.0 Sep 18, 2018
CONTRIBUTING.md 2.0.0 Feb 17, 2018
INSTALL.md
LICENSE.md
README.md 4.0.0 Sep 18, 2018
index.js 3.0.0 Apr 8, 2018
package.json

README.md

PostCSS Focus Visible PostCSS Logo

NPM Version CSS Standard Status Build Status Support Chat

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.

: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.

Usage

Add PostCSS Focus Visible to your project:

npm install postcss-focus-visible --save-dev

Use PostCSS Focus Visible to process your CSS:

const postcssFocusVisible = require('postcss-focus-visible');

postcssFocusVisible.process(YOUR_CSS /*, processOptions, pluginOptions */);

Or use it as a PostCSS plugin:

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

Options

preserve

The preserve option defines whether the original selector should remain. By default, the original selector is preserved.

focusVisible({ preserve: false });
:focus:not(:focus-visible) {
  outline: none;
}

/* becomes */

:focus:not(.focus-visible) {
  outline: none;
}

replaceWith

The replaceWith option defines the selector to replace :focus-visible. By default, the replacement selector is .focus-visible.

focusVisible({ replaceWith: '[focus-visible]' });
:focus:not(:focus-visible) {
  outline: none;
}

/* becomes */

:focus:not([focus-visible]) {
  outline: none;
}

:focus:not(:focus-visible) {
  outline: none;
}
You can’t perform that action at this time.