JSFiddle - React, Tailwind, and code Playground
by michapixel
HTML
<span contenteditable>Foo Bar</span>
SASS
::root {
--active: #275EFE;
--active-inner: #fff;
--focus: 2px rgba(39, 94, 254, .3);
--border: #BBC1E1;
--border-hover: #275EFE;
--background: #fff;
--disabled: #F6F8FF;
--disabled-inner: #E1E6F9;
}
span[contenteditable] {
-webkit-appearance: none;
-moz-appearance: none;
height: 21px;
outline: none;
display: inline-block;
vertical-align: top;
position: relative;
margin: 0;
border: 1px solid var(--bc, var(--border));
background: var(--b, var(--background));
transition: background .3s, border-color .3s, box-shadow .2s;
&:after {
content: '';
display: block;
left: 0;
top: 0;
position: absolute;
transition: transform var(--d-t, .3s) var(--d-t-e, ease), opacity var(--d-o, .2s);
}
&:disabled {
--b: var(--disabled);
cursor: not-allowed;
opacity: .9;
&:checked {
--b: var(--disabled-inner);
--bc: var(--border);
}
& + label {
cursor: not-allowed;
}
}
&:hover {
&:not(:checked) {
&:not(:disabled) {
--bc: var(--border-hover);
}
}
}
&:focus {
box-shadow: 0 0 0 var(--focus);
}
}
html {
box-sizing: border-box;
}
* {
box-sizing: inherit;
&:before,
&:after {
box-sizing: inherit;
}
}
span[contenteditable] {
padding: 0.2em 0.6em 0.3em;
width: auto;
}