Time input with range sliders
by polaszk
HTML
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css">
<fieldset id="time-field" class="time-input">
<label for="time-input">
<input id="time-input" type="time" name="time" required>
<input class="time-range hours" type="range" value="12" name="hours" min="0" max="23" oninput="outputUpdate(value)">
<input class="time-range minutes" type="range" value="30" name="minutes" min="0" max="59" oninput="outputUpdate(value)">
<span class="fa fa-clock-o" aria-hidden="true"></span>
</label>
</fieldset>
CSS
.time-input {
position: relative;
width: 150px;
height: 42px;
display: inline-block;
margin: 0;
padding: 0;
border: none;
}
.time-input label span {
position: absolute;
top: 11px;
color: #888;
left: 13px;
transition: 200ms;
}
.time-input label input {
padding: 7px 0 7px 35px;
width: 150px;
border: 1px solid #8c508c;
}
.time-input label input.time-range {
padding-left: 0;
border: none;
}
.time-input label:hover span {
color: #8c508c;
transition: 300ms;
}
/* ---- range slider styles from http://danielstern.ca/range.css/#/ --------- */
input[type=range].time-range {
-webkit-appearance: none;
width: 100%;
margin: 8px 0;
}
input[type=range].time-range:focus {
outline: none;
}
input[type=range].time-range::-webkit-slider-runnable-track {
width: 100%;
height: 8px;
cursor: pointer;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
background: #8c508c;
border-radius: 0px;
border: 1px solid #000000;
}
input[type=range].time-range::-webkit-slider-thumb {
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
border: 1px solid #4b4b4d;
height: 26px;
width: 26px;
border-radius: 3px;
background: #d8d8d8;
cursor: pointer;
-webkit-appearance: none;
margin-top: -10px;
}
input[type=range].time-range:focus::-webkit-slider-runnable-track {
background: #c498c4;
}
input[type=range].time-range::-moz-range-track {
width: 100%;
height: 8px;
cursor: pointer;
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
background: #8c508c;
border-radius: 0px;
border: 1px solid #000000;
}
input[type=range].time-range::-moz-range-thumb {
box-shadow: 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px rgba(13, 13, 13, 0);
border: 1px solid #4b4b4d;
height: 26px;
width: 26px;
border-radius: 3px;
background: #d8d8d8;
cursor: pointer;
}
input[type=range].time-range::-ms-track {
width: 100%;
height: 8px;
cursor: pointer;
...
JavaScript
function outputUpdate() {
var hours = $('#time-field .hours').val();
var minutes = $('#time-field .minutes').val();
var time;
if (hours < 10) {
hours = '0' + hours;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
time = hours + ':' + minutes;
document.querySelector('#time-input').value = time;
}