Input
Checkbox Input
<input type="checkbox" id="my-checkbox" />
<label for="my-checkbox">My checkbox</label>
JavaScript Attributes
const checkbox = document.getElementById("my-checkbox");
checkbox.checked
checkbox.addEventListener("change", function () {
console.log("Checkbox toggled");
});
Range Input (Slider)
<input type="range" value="1" min="0" max="10" step="1">
Events
oninput
onchange
Properties
defaultValue
value
Custom Slider style
<input type="range" value="1" min="0" max="10" step="1" class="custom-slider">
Removing standard styles
input[type=range] {
-webkit-appearance: none; /* Hides the slider so that custom slider can be made */
width: 100%; /* Specific width is required for Firefox. */
background: transparent; /* Otherwise white in Chrome */
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
}
input[type=range]:focus {
outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
}
input[type=range]::-ms-track {
width: 100%;
cursor: pointer;
/* Hides the slider so custom styles can be added */
background: transparent;
border-color: transparent;
color: transparent;
}
Styling the thumb
/* Special styling for WebKit/Blink */
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
margin-top: -14px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; /* Add cool effects to your sliders! */
}
/* All the same stuff for Firefox */
input[type=range]::-moz-range-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
}
/* All the same stuff for IE */
input[type=range]::-ms-thumb {
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
border: 1px solid #000000;
height: 36px;
width: 16px;
border-radius: 3px;
background: #ffffff;
cursor: pointer;
}
Styling the track
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #367ebd;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 8.4px;
cursor: pointer;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
background: #3071a9;
border-radius: 1.3px;
border: 0.2px solid #010101;
}
input[type=range]::-ms-track {
width: 100%;
height: 8.4px;
cursor: pointer;
background: transparent;
border-color: transparent;
border-width: 16px 0;
color: transparent;
}
input[type=range]::-ms-fill-lower {
background: #2a6495;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]:focus::-ms-fill-lower {
background: #3071a9;
}
input[type=range]::-ms-fill-upper {
background: #3071a9;
border: 0.2px solid #010101;
border-radius: 2.6px;
box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
input[type=range]:focus::-ms-fill-upper {
background: #367ebd;
}
Number <input>
<input type="number">
input.valueAsNumber
Form validation
<form action="#" method="post" name="contact_form">
<h2>Contact Us</h2>
<label for="name">Name:</label>
<input type="text" name="name" placeholder="John Doe" required />
<label for="email">Email:</label>
<input type="email" name="email" placeholder="john_doe@example.com" required />
<span class="form_hint">Proper format "name@something.com"</span>
<label for="website">Website:</label>
<input type="url" name="website" placeholder="http://johndoe.com" required pattern="(http|https)://.+"/>
<span class="form_hint">Proper format "http://someaddress.com"</span>
<label for="message">Message:</label>
<textarea name="message" cols="40" rows="6" required ></textarea>
<button class="submit" type="submit">Submit Form</button>
</form>
input
and textarea
attributes
required
placeholder
pattern="(http|https)://.+"
Styling input elements
Proper format "name@something.com"
input {
padding: 5px;
border: 2px solid black;
outline: none;
border-radius: 3px;
}
input:required, textarea:required {
background: #fff url(images/red_asterisk.png) no-repeat 98% center;
}
input:required:valid, textarea:required:valid {
background: #fff url(images/valid.png) no-repeat 98% center;
box-shadow: 0 0 5px #5cd053;
border-color: #28921f;
}
input:focus:invalid, textarea:focus:invalid {
background: #fff url(images/invalid.png) no-repeat 98% center;
box-shadow: 0 0 5px #d45252;
border-color: #b03535;
}
Simple Input hint
Proper format "name@something.com"
.form_hint {
display: none;
position: absolute;
margin-left: 8px;
padding: 1px 6px;
border-radius: 3px 3px 3px 3px;
background: #d45252;
color: white;
z-index: 9;
}
.form_hint::before {
position: absolute;
content: "\25C0";
color: #d45252;
top: 1px;
left: -6px;
}
input:focus + .form_hint {
display: inline;
}
input:required:valid + .form_hint {
background: #28921f;
}
input:required:valid + .form_hint::before {
color:#28921f;
}
<input>
autocomplete datalist
<form>
<input type="text" placeholder="Which username??" list="usernames">
<datalist id="usernames">
<option value="Jack">
<option value="Sarah">
<option value="James">
<option value="Sasha">
<datalist>
</form>