|
|
|
|
# CSS Blank Pseudo [<img src="http://jonathantneal.github.io/js-logo.svg" alt="" width="90" height="90" align="right">][CSS Blank Pseudo]
|
|
|
|
|
|
|
|
|
|
[![NPM Version][npm-img]][npm-url]
|
|
|
|
|
[<img alt="Discord" src="https://shields.io/badge/Discord-5865F2?logo=discord&logoColor=white">][discord]
|
|
|
|
|
|
|
|
|
|
[CSS Blank Pseudo] lets you style form elements when they are empty, following
|
|
|
|
|
the [Selectors Level 4] specification.
|
|
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
input {
|
|
|
|
|
/* style an input */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input:blank {
|
|
|
|
|
/* style an input without a value */
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
From the command line, transform CSS files that use `:blank` selectors:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npx css-blank-pseudo SOURCE.css --output TRANSFORMED.css
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Next, use your transformed CSS with this script:
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<link rel="stylesheet" href="TRANSFORMED.css">
|
|
|
|
|
<script src="https://unpkg.com/css-blank-pseudo/dist/browser-global.js"></script>
|
|
|
|
|
<script>cssBlankPseudo(document)</script>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
⚠️ Please use a versioned url, like this : `https://unpkg.com/css-blank-pseudo@3.0.0/dist/browser-global.js`
|
|
|
|
|
Without the version, you might unexpectedly get a new major version of the library with breaking changes.
|
|
|
|
|
|
|
|
|
|
⚠️ If you were using an older version via a CDN, please update the entire url.
|
|
|
|
|
The old URL will no longer work in a future release.
|
|
|
|
|
|
|
|
|
|
That’s it. The script works in most browsers.
|
|
|
|
|
|
|
|
|
|
## How it works
|
|
|
|
|
|
|
|
|
|
The [PostCSS plugin](README-POSTCSS.md) clones rules containing `:blank`,
|
|
|
|
|
replacing them with an alternative `[blank]` selector.
|
|
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
input:blank {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* becomes */
|
|
|
|
|
|
|
|
|
|
input[blank] {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input:blank {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Next, the [JavaScript library](README-BROWSER.md) adds a `blank` attribute to
|
|
|
|
|
elements otherwise matching `:blank` natively.
|
|
|
|
|
|
|
|
|
|
```html
|
|
|
|
|
<input value="" blank>
|
|
|
|
|
<input value="This element has a value">
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## ⚠️ `:not(:blank)`
|
|
|
|
|
|
|
|
|
|
with option : `preserve` `true`
|
|
|
|
|
|
|
|
|
|
```css
|
|
|
|
|
input:not(:blank) {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* becomes */
|
|
|
|
|
|
|
|
|
|
input:not([blank]) {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input:not(:blank) {
|
|
|
|
|
background-color: yellow;
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
When you do not include the JS polyfill one will always match in browsers that support `:blank` natively.
|
|
|
|
|
In browsers that do not support `:blank` natively the rule will be invalid.
|
|
|
|
|
|
|
|
|
|
_currently no browsers support `:blank`_
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[discord]: https://discord.gg/bUadyRwkJS
|
|
|
|
|
[npm-img]: https://img.shields.io/npm/v/css-blank-pseudo.svg
|
|
|
|
|
[npm-url]: https://www.npmjs.com/package/css-blank-pseudo
|
|
|
|
|
|
|
|
|
|
[CSS Blank Pseudo]: https://github.com/csstools/postcss-plugins/tree/main/plugins/css-blank-pseudo
|
|
|
|
|
[PostCSS Preset Env]: https://preset-env.cssdb.org/
|
|
|
|
|
[Selectors Level 4]: https://drafts.csswg.org/selectors-4/#blank
|