:read-write
and :read-only
are two mutability pseudo-classes aiming at making form styling easier based on disabled
, readonly
and contenteditable
HTML Attributes. While the browser support is not that bad, the various implementations are quite wonky.
According to the official CSS Specifications, is considered :read-write
an element which is:
- either an
input
which is neitherreadonly
nordisabled
- or a
textarea
which is neitherreadonly
nordisabled
- or any other editable element (thanks to
contenteditable
)
Syntax & Example
/* Any element that is not writable */ :read-only { } /* ... so you might want to scope it */ input:read-only, textarea:read-only, [contenteditable]:read-only { cursor: not-allowed; } /* Any enabled text input or enabled textarea or element with the contenteditable attribute */ :read-write { background: white; cursor: text; }
Browser Support
Chrome | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
Yep | Yep | Yep (-moz-) | 14+ | Nope | Nope | Yep |
There is a major difference between what is recommended in the specifications and what the browsers actually do. For instance, if we stick to the specs, every element which is user-editable but disabled (disabled
or readonly
) or simply not user-editable should be targeted by an unqualified :read-only
selector.
Chrome | Firefox | Safari | Opera | |
---|---|---|---|---|
input |
:read-write | :read-write | :read-write | :read-write |
input[disabled] |
:read-write | :read-write | :read-write | :read-write |
input[readonly] |
:read-only | :read-only | :read-only | :read-only |
[contenteditable] |
— | :read-write | — | :read-only |
* |
— | :read-only | — | :read-only |
Meanwhile, only Firefox seems to do so, and apparently not too well either since it considers adisabled
input as :read-write
. Regarding Opera not tagging a contenteditable
element as :read-write
, it’s simply because it doesn’t support contenteditable
.
Leave a Reply