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

README.md

PostCSS Focus Within PostCSS Logo

NPM Version CSS Standard Status Build Status Gitter Chat

PostCSS Focus Within lets you use the :focus-within pseudo-class in CSS, following the Selectors Level 4 specification.

It is the companion to the focus-within polyfill.

.my-form-field:focus-within label {
  background-color: yellow;
}

/* becomes */

.my-form-field[focus-within] label {
  background-color: yellow;
}

.my-form-field:focus-within label {
  background-color: yellow;
}

PostCSS Focus Within duplicates rules using the :focus-within pseudo-class with a [focus-within] attribute selector, the same selector used by the focus-within polyfill. This replacement selector can be changed using the replaceWith option. Also, the preservation of the original :focus-within rule can be disabled using the preserve option.

Usage

Add PostCSS Focus Within to your project:

npm install postcss-focus-within --save-dev

Use PostCSS Focus Within to process your CSS:

const postcssFocusWithin = require('postcss-focus-within');

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

Or use it as a PostCSS plugin:

const postcss = require('postcss');
const postcssFocusWithin = require('postcss-focus-within');

postcss([
  postcssFocusWithin(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);

PostCSS Focus Within 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.

focusWithin({ preserve: false });
.my-form-field:focus-within label {
  background-color: yellow;
}

/* becomes */

.my-form-field[focus-within] label {
  background-color: yellow;
}

replaceWith

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

focusWithin({ replaceWith: '.focus-within' });
.my-form-field:focus-within label {
  background-color: yellow;
}

/* becomes */

.my-form-field.focus-within label {
  background-color: yellow;
}

.my-form-field:focus-within label {
  background-color: yellow;
}
You can’t perform that action at this time.