JSFiddle - React, Tailwind, and code Playground
by Fleuv
HTML
<section class="dark">
<h1>Custom</h1>
<div class="input-decorator">
<div class="input-label">
<label for="foo">Ik wil melk</label>
</div>
<div class="input-control">
<input id="foo" placeholder="Moooo!" />
</div>
</div>
<h1>Fieldset</h1>
<fieldset>
<legend>
<label for="fs-foo">Ik wil melk</label>
</legend>
<input id="fs-foo" placeholder="Moooo!" />
</fieldset>
</section>
<section>
<h1>Custom</h1>
<div class="input-decorator">
<div class="input-label">
<label for="bar">Ik wil kaas</label>
</div>
<div class="input-control">
<input id="bar" placeholder="Moooo?" />
</div>
</div>
<h1>Fieldset</h1>
<fieldset>
<legend>
<label for="fs-bar">Ik wil kaas</label>
</legend>
<input id="fs-bar" placeholder="Moooo?" />
</fieldset>
</section>
CSS
.input-decorator {
border-radius: var(--input--border-radius, 4px);
}
.input-label {
display: flex;
height: var(--input-label--height, 18px);
}
.input-label::before,
.input-label::after {
content: '';
display: inline-block;
height: calc(var(--input-label--height, 18px) / 2);
border-top: 1px solid var(--input--border-color, black);
margin-top: calc((var(--input-label--height, 18px) / 2));
}
.input-label::before {
min-width: 0.75rem;
margin-right: 0.5rem;
border-top-left-radius: var(--input--border-radius, 4px);
}
.input-label::after {
flex: 1 1 auto;
min-width: 1rem;
margin-left: 0.5rem;
border-top-right-radius: var(--input--border-radius, 4px);
}
.input-control {
padding: 1px 0;
border-width: 0 1px 1px;
border-style: solid;
border-color: var(--input--border-color, black);
border-radius: var(--input--border-radius, 4px);
margin-top: calc(-1 * var(--input-label--height, 18px) / 2);
background: var(--input-control--background, white);
}
.input-control input {
padding: 0.5rem 0.75rem;
}
/** fieldset + legend */
fieldset {
margin: 0;
padding: 0 0.75rem 0.5rem;
background: var(--input-control--background, white);
border: 1px solid var(--fieldset--border-color, black);
border-radius: var(--fieldset--border-radius, 4px);
}
fieldset legend {
padding: 0 0.5rem;
}
fieldset input {
padding: 0;
}
/** unrelated */
body,
html {
margin: 0;
font-size: 14px;
font-family: sans-serif;
}
section {
padding: 2rem;
}
input {
outline: none;
width: 100%;
margin: 0;
border: 0;
font-size: 13px;
background-color: transparent;
}
.dark {
background-color: rgba(0, 0, 0, 0.1);
}