Native HTML controls are a challenge to style. You can style any element in the web platform that uses Shadow DOM with a pseudo element ::pseudo-element or the /deep/ path selector.
video::webkit-media-controls-timeline {
background-color: lime;
}
video /deep/ input[type=range] {
background-color: lime;
}All Trident pseudo-elements listed here were added in IE10 and will not work in earlier versions of Internet Explorer. In WebKit, to style some pseudo-elements you must set the basis element’s -webkit-appearance pseudo-class to none.
input[type=search]::-webkit-search-cancel-button
input[type=search]::-webkit-search-cancel-button:after
input[type=search]::-webkit-search-decoration
input[type=search]::-webkit-search-results-decoration
input[type=search]::-webkit-search-results-button
input[type=search]::-webkit-textfield-decoration-containerWebKit provides a hook for its file input button with the pseudo-element.
input[type=file]::-ms-browse
input[type=file]::-webkit-file-upload-button
input[type=file]:focus::-webkit-file-upload-button
input[type=file]:active::-webkit-file-upload-button
input[type=file]:active:disabled::-webkit-file-upload-button
input[type=file] > input[type=button]::-moz-focus-innerWebKit provides a pseudo-element for the track and for the range handle itself. As of Firefox 22, Gecko provides pseudo-elements for styling range inputs. Trident provides a bunch of pseudo-elements to customize its range selector.
input[type=range]::-webkit-slider-container
input[type=range]::-webkit-media-slider-container
input[type=range]::-webkit-slider-runnable-track
input[type=range]:focus::-webkit-slider-runnable-track
input[type=range]::-webkit-slider-thumb
input[type=range]::-webkit-slider-thumb:before
input[type=range]::-webkit-slider-thumb:after
input[type=range]:active::-webkit-slider-thumb
input[type=range]:hover::-webkit-slider-thumb:before
input[type=range]:hover::-webkit-slider-thumb:after
input[type=range]:focus::-webkit-slider-thumb:before
input[type=range]:focus::-webkit-slider-thumb:after
input[type=range]:disabled::-webkit-slider-thumb:before
input[type=range]:disabled::-webkit-slider-thumb:after
input[type=range]::-webkit-media-slider-thumb
input[type=range]:disabled::-webkit-slider-thumb
input[type=range]:hover::-webkit-slider-thumb
input[type=range]:focus::-webkit-slider-thumb
input[type=range]::-webkit-color-swatch-wrapper
input[type=range]::-webkit-color-swatch
input[type=range]::-moz-range-track
input[type=range][orient=vertical]::-moz-range-track
input[type=range]:focus::-moz-range-track
input[type=range]::-moz-range-progress
input[type=range]::-moz-range-thumb
input[type=range]:focus::-moz-range-thumb
input[type=range]:focus::-moz-range-thumb:before
input[type=range]:focus::-moz-range-thumb:after
input[type=range]::-moz-focus-outer
input[type=range]::-ms-fill-lower
input[type=range]::-ms-fill-upper
input[type=range]::-ms-ticks-before
input[type=range]::-ms-ticks-after
input[type=range]::-ms-thumb
input[type=range]::-ms-thumb:hover
input[type=range]::-ms-track
input[type=range]:focus::-ms-track
input[type=range]::ms-tooltipApplies one or more styles to the clear button of a text input control. The clear button is shown only when the text input control has focus and is not empty.
input[type=time]::-ms-clear
input[type=time]::-webkit-clear-buttonThe following pseudo-elements are made available by WebKit for customizing a date input’s textbox.
input[type=date]::-webkit-datetime-edit
input[type=date]::-webkit-datetime-edit-fields-wrapper
input[type=date]::-webkit-datetime-edit-text
input[type=date]::-webkit-datetime-edit-month-field
input[type=date]::-webkit-datetime-edit-day-field
input[type=date]::-webkit-datetime-edit-year-field
input[type=date]::-webkit-inner-spin-button
input[type=date]::-webkit-calendar-picker-indicator
input[type=date]::-webkit-clear-buttonWebkit provides two pseudo elements for its color picker.
input[type=color]::-webkit-color-swatch
input[type=color]::-webkit-color-swatch-wrapper
input[type=color]::-moz-color-swatch
input[type=color]::-moz-focus-innerWebKit provides a spinner control by default for number picker inputs. While you cannot do a whole lot with these elements, it can be useful to hide the spinner.
input[type=number]::-webkit-textfield-decoration-container
input[type=number]::-webkit-textfield-decoration-container:before
input[type=number]::-webkit-textfield-decoration-container:after
input[type=number]::-webkit-inner-spin-button
input[type=number]::-webkit-outer-spin-button
input[type=number]::-moz-number-wrapper
input[type=number]::-moz-number-text
input[type=number]::-moz-number-spin-box
input[type=number]::-moz-number-spin-up
input[type=number]::-moz-number-spin-downTrident provides a pseudo-element for checkbox button control.
input[type=checkbox]::-ms-checkTrident provides a pseudo-element for the radio button control.
input[type=radio]::-ms-checkAs of IE10 Trident provides the pseudo-element ::-ms-value to style the value portion of text inputs. Further more in IE10 when a text input has focus and is not empty, a small (x) control appears in the right hand side of the input. When clicked, the control will clear the contents of the text input.
input[type=text]::-ms-value
input[type=text]::-ms-clearTrident provides a control on password inputs that can be pressed to display the password in plain text. And as of IE10 Trident provides the pseudo-element ::-ms-value to style the value portion of text inputs.
input[type=password]::-ms-reveal
input[type=password]::-ms-valueinput[type=reset]::-moz-focus-innerinput[type=submit]::-moz-focus-innerinput[type=button]::-moz-focus-innerWebKit and Gecko provide a placeholder pseudo-element. Note: Gecko switched from the pseudo-class :-moz-placeholder to the pseudo-element ::-moz-placeholder in Firefox 19.
::-moz-placeholder
:-ms-input-placeholder
::-webkit-input-placeholderWebKit provides a pseudo-element that can be used to customize the dropdown that a keygen element uses.
::-webkit-keygen-selectGecko and Webkit applies following pseudo-elements to there inputs.
input:valid + label::after
input:invalid + label::after
input::-webkit-input-list-button
input::-webkit-input-speech-button
input::-webkit-textfield-decoration-container
input::-webkit-calendar-picker-indicator
input::-moz-placeholder
input::-moz-focus-inner
input::-ms-clearbutton::-moz-focus-innerAs of IE10 Trident gives you a hook to style the arrow within select dropdowns.
select::-ms-expanddetails::-webkit-details-markersummary::-webkit-details-markerWebKit provides pseudo-elements to customize the display of meter elements.
meter::-webkit-meter
meter::-webkit-meter-horizontal-bar
meter::-webkit-meter-vertical-bar
meter::-webkit-meter-horizontal-optimum-value
meter::-webkit-meter-horizontal-suboptimal-value
meter::-webkit-meter-horizontal-even-less-good-value
meter::-webkit-meter-vertical-optimum-value
meter::-webkit-meter-vertical-suboptimal-value
meter::-webkit-meter-vertical-even-less-good-value
meter::-moz-meter-bar
meter:-moz-meter-optimum::-moz-meter-bar
meter:-moz-meter-sub-optimum::-moz-meter-bar
meter:-moz-meter-sub-sub-optimum::-moz-meter-barOn Mac OS X, WebKit provides multiple built-in appearances for <meter>.
/* Default */
-webkit-appearance: continuous-capacity-level-indicator;
-webkit-appearance: discrete-capacity-level-indicator;
-webkit-appearance: relevancy-level-indicator;
-webkit-appearance: rating-level-indicator;WebKit provides pseudo-elements to style progress elements. And Gecko provides a pseudo-element to style the progress bar itself. Like Gecko, Trident provides a single pseudo-element to style the progress bar.
progress::-webkit-progress-bar
progress::-webkit-progress-value
progress::-webkit-progress-bar-value
progress::-moz-progress-bar
progress::-ms-fillThis pseudo-element also allows some basic styling for the textarea resizer.
textarea::-webkit-resizer
textarea::-webkit-resizer:window-inactive
textarea::-webkit-input-placeholder
textarea::-moz-placeholderNote: Adding display: none to ::-webkit-resizer doesn't actually prevent the user from resizing the textarea, it just hides the control. If you want to disable resizing in textarea use this.
textarea {
resize: none;
}img::-webkit-image-inner-elementp::after
p::before
p::first-letter
p::first-line
p::selectionvideo::-webkit-media-controls-panel
video::-webkit-media-controls-play-button
video::-webkit-media-controls-volume-slider-container
video::-webkit-media-controls-volume-slider
video::-webkit-media-controls-mute-button
video::-webkit-media-controls-timeline
video::-webkit-media-controls-current-time-display
video::-webkit-full-page-media::-webkit-media-controls-panel
video::-webkit-media-controls-timeline-container
video::-webkit-media-controls-time-remaining-display
video::-webkit-media-controls-seek-back-button
video::-webkit-media-controls-seek-forward-button
video::-webkit-media-controls-fullscreen-button
video::-webkit-media-controls-overlay-play-button
video::-webkit-media-controls-rewind-button
video::-webkit-media-controls-return-to-realtime-button
video::-webkit-media-controls-toggle-closed-captions-buttonaudio::-webkit-media-controls-panel
audio::-webkit-media-controls-mute-button
audio::-webkit-media-controls-play-button
audio::-webkit-media-controls-timeline-container
audio::-webkit-media-controls-current-time-display
audio::-webkit-media-controls-time-remaining-display
audio::-webkit-media-controls-timeline
audio::-webkit-media-controls-volume-slider-container
audio::-webkit-media-controls-volume-slider
audio::-webkit-media-controls-seek-back-button
audio::-webkit-media-controls-seek-forward-button
audio::-webkit-media-controls-fullscreen-button
audio::-webkit-media-controls-rewind-button
audio::-webkit-media-controls-return-to-realtime-button
audio::-webkit-media-controls-toggle-closed-captions-buttonCustom Scrollbars in WebKit.
::-webkit-scrollbar
::-webkit-scrollbar-button
::-webkit-scrollbar-button:disabled
::-webkit-scrollbar-button:double-button:horizontal:end:decrement
::-webkit-scrollbar-button:double-button:horizontal:end:increment
::-webkit-scrollbar-button:double-button:horizontal:end:increment:corner-present
::-webkit-scrollbar-button:double-button:horizontal:start:decrement
::-webkit-scrollbar-button:double-button:horizontal:start:increment
::-webkit-scrollbar-button:double-button:vertical:end:decrement
::-webkit-scrollbar-button:double-button:vertical:end:increment
::-webkit-scrollbar-button:double-button:vertical:end:increment:corner-present
::-webkit-scrollbar-button:double-button:vertical:start:decrement
::-webkit-scrollbar-button:double-button:vertical:start:increment
::-webkit-scrollbar-button:end
::-webkit-scrollbar-button:end:decrement
::-webkit-scrollbar-button:end:increment
::-webkit-scrollbar-button:horizontal
::-webkit-scrollbar-button:horizontal:decrement
::-webkit-scrollbar-button:horizontal:decrement:active
::-webkit-scrollbar-button:horizontal:decrement:hover
::-webkit-scrollbar-button:horizontal:decrement:window-inactive
::-webkit-scrollbar-button:horizontal:end
::-webkit-scrollbar-button:horizontal:end:decrement
::-webkit-scrollbar-button:horizontal:end:increment
::-webkit-scrollbar-button:horizontal:end:increment:corner-present
::-webkit-scrollbar-button:horizontal:increment
::-webkit-scrollbar-button:horizontal:increment:active
::-webkit-scrollbar-button:horizontal:increment:hover
::-webkit-scrollbar-button:horizontal:increment:window-inactive
::-webkit-scrollbar-button:horizontal:start
::-webkit-scrollbar-button:horizontal:start:decrement
::-webkit-scrollbar-button:horizontal:start:increment
::-webkit-scrollbar-button:start
::-webkit-scrollbar-button:start:decrement`
::-webkit-scrollbar-button:start:increment
::-webkit-scrollbar-button:vertical
::-webkit-scrollbar-button:vertical:decrement
::-webkit-scrollbar-button:vertical:decrement:active
::-webkit-scrollbar-button:vertical:decrement:hover
::-webkit-scrollbar-button:vertical:decrement:window-inactive
::-webkit-scrollbar-button:vertical:end
::-webkit-scrollbar-button:vertical:end:decrement
::-webkit-scrollbar-button:vertical:end:increment
::-webkit-scrollbar-button:vertical:end:increment:corner-present
::-webkit-scrollbar-button:vertical:increment
::-webkit-scrollbar-button:vertical:increment:active
::-webkit-scrollbar-button:vertical:increment:hover
::-webkit-scrollbar-button:vertical:increment:window-inactive
::-webkit-scrollbar-button:vertical:start
::-webkit-scrollbar-button:vertical:start:decrement
::-webkit-scrollbar-button:vertical:start:increment
::-webkit-scrollbar-corner
::-webkit-scrollbar-corner:window-inactive
::-webkit-scrollbar-thumb
::-webkit-scrollbar-thumb:horizontal
::-webkit-scrollbar-thumb:horizontal:active
::-webkit-scrollbar-thumb:horizontal:hover
::-webkit-scrollbar-thumb:horizontal:window-inactive
::-webkit-scrollbar-thumb:vertical
::-webkit-scrollbar-thumb:vertical:active
::-webkit-scrollbar-thumb:vertical:hover
::-webkit-scrollbar-thumb:vertical:window-inactive
::-webkit-scrollbar-track
::-webkit-scrollbar-track-piece
::-webkit-scrollbar-track-piece:disabled
::-webkit-scrollbar-track-piece:end
::-webkit-scrollbar-track-piece:horizontal:decrement
::-webkit-scrollbar-track-piece:horizontal:decrement:active
::-webkit-scrollbar-track-piece:horizontal:decrement:hover
::-webkit-scrollbar-track-piece:horizontal:end
::-webkit-scrollbar-track-piece:horizontal:end:corner-present
::-webkit-scrollbar-track-piece:horizontal:end:double-button
::-webkit-scrollbar-track-piece:horizontal:end:no-button
::-webkit-scrollbar-track-piece:horizontal:end:no-button:corner-present
::-webkit-scrollbar-track-piece:horizontal:end:single-button
::-webkit-scrollbar-track-piece:horizontal:increment
::-webkit-scrollbar-track-piece:horizontal:increment:active
::-webkit-scrollbar-track-piece:horizontal:increment:hover
::-webkit-scrollbar-track-piece:horizontal:start
::-webkit-scrollbar-track-piece:horizontal:start:double-button
::-webkit-scrollbar-track-piece:horizontal:start:no-button
::-webkit-scrollbar-track-piece:horizontal:start:single-button
::-webkit-scrollbar-track-piece:start
::-webkit-scrollbar-track-piece:vertical:decrement
::-webkit-scrollbar-track-piece:vertical:decrement:active
::-webkit-scrollbar-track-piece:vertical:decrement:hover
::-webkit-scrollbar-track-piece:vertical:end
::-webkit-scrollbar-track-piece:vertical:end:corner-present
::-webkit-scrollbar-track-piece:vertical:end:double-button
::-webkit-scrollbar-track-piece:vertical:end:no-button
::-webkit-scrollbar-track-piece:vertical:end:no-button:corner-present
::-webkit-scrollbar-track-piece:vertical:end:single-button
::-webkit-scrollbar-track-piece:vertical:increment
::-webkit-scrollbar-track-piece:vertical:increment:active
::-webkit-scrollbar-track-piece:vertical:increment:hover
::-webkit-scrollbar-track-piece:vertical:start
::-webkit-scrollbar-track-piece:vertical:start:double-button
::-webkit-scrollbar-track-piece:vertical:start:no-button
::-webkit-scrollbar-track-piece:vertical:start:single-button
::-webkit-scrollbar-track:disabled
::-webkit-scrollbar-track:horizontal
::-webkit-scrollbar-track:horizontal:disabled
::-webkit-scrollbar-track:horizontal:disabled:corner-present
::-webkit-scrollbar-track:vertical:disabled
::-webkit-scrollbar-track:vertical:disabled:corner-present
::-webkit-scrollbar:horizontal
::-webkit-scrollbar:horizontal:corner-present
::-webkit-scrollbar:horizontal:window-inactive
::-webkit-scrollbar:vertical
::-webkit-scrollbar:vertical:corner-present
::-webkit-scrollbar:vertical:window-inactive
::-webkit-textfield-decoration-containerNote: Chrome 28 removed support for these pseudo-elements
::-webkit-validation-bubble
::-webkit-validation-bubble-arrow
::-webkit-validation-bubble-arrow-clipper
::-webkit-validation-bubble-heading
::-webkit-validation-bubble-message
::-webkit-validation-bubble-text-block
Thank you soo much for this!
Does anyone know if the moz equivalents for the audio tags? just switching the webkit for moz apparently doesn't work?
thanks in advance!
Allan