JSFiddle - React, Tailwind, and code Playground
HTML
<div id="closing_date">
<label for="closing_date_field" class="overlabel">Closing Date</label>
<input id="closing_date_field" type="date" name="closing_date">
</div>
CSS
div#closing_date
{
position:relative;
float:left;
margin-right:3px;
}
input#closing_date_field
{
width:10em;
}
label.overlabel {
color:#999;
}
label.overlabel-apply {
position:absolute;
top:3px;
left:5px;
z-index:1;
color:#999;
}
JavaScript
function initOverLabels () {
if (!document.getElementById) return;
var labels, id, field;
// Set focus and blur handlers to hide and show
// LABELs with 'overlabel' class names.
labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; i++) {
if (labels[i].className == 'overlabel') {
// Skip labels that do not have a named association
// with another field.
id = labels[i].htmlFor || labels[i].getAttribute('for');
if (!id || !(field = document.getElementById(id))) {
continue;
}
// Change the applied class to hover the label
// over the form field.
labels[i].className = 'overlabel-apply';
// Hide any fields having an initial value.
if (field.value !== '') {
hideLabel(field.getAttribute('id'), true);
}
// Set handlers to show and hide labels.
field.onfocus = function () {
hideLabel(this.getAttribute('id'), true);
};
field.onblur = function () {
if (this.value === '') {
hideLabel(this.getAttribute('id'), false);
}
};
// Handle clicks to LABEL elements (for Safari).
labels[i].onclick = function () {
var id, field;
id = this.getAttribute('for');
if (id && (field = document.getElementById(id))) {
field.focus();
}
};
}
}
};
function hideLabel (field_id, hide) {
var field_for;
var labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; i++) {
field_for = labels[i].htmlFor || labels[i].getAttribute('for');
if (field_for == field_id) {
labels[i].style.textIndent = (hide) ? '-1000px' : '0px';
return true;
}
}
}
window.onload = function () {
setTimeout(initOverLabels, 50);
};