/** * Copyright 2015 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ @import "../variables"; // Some CSS magic to target only IE. _:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded { -ms-appearance: none; // The thumb can't overflow the track or the rest of the control in IE, so we // need to make it tall enough to contain the largest version of the thumb. height: 32px; margin: 0; } // Slider component (styled input[type=range]). .mdl-slider { width: calc(100% - 40px); margin: 0 20px; &.is-upgraded { -webkit-appearance: none; -moz-appearance: none; appearance: none; height: 2px; background: transparent; -webkit-user-select: none; -moz-user-select: none; user-select: none; outline: 0; padding: 0; color: $range-color; align-self: center; z-index: 1; cursor: pointer; // Disable default focus on Firefox. &::-moz-focus-outer { border: 0; } // Disable tooltip on IE. &::-ms-tooltip { display: none; } /**************************** Tracks ****************************/ &::-webkit-slider-runnable-track { background: transparent; } &::-moz-range-track { background: transparent; border: none; } &::-ms-track { background: none; color: transparent; height: 2px; width: 100%; border: none; } &::-ms-fill-lower { padding: 0; // Margin on -ms-track doesn't work right, so we use gradients on the // fills. background: linear-gradient(to right, transparent, transparent 16px, $range-color 16px, $range-color 0); } &::-ms-fill-upper { padding: 0; // Margin on -ms-track doesn't work right, so we use gradients on the // fills. background: linear-gradient(to left, transparent, transparent 16px, $range-bg-color 16px, $range-bg-color 0); } /**************************** Thumbs ****************************/ &::-webkit-slider-thumb { -webkit-appearance: none; width: 12px; height: 12px; box-sizing: border-box; border-radius: 50%; background: $range-color; border: none; transition: transform 0.18s $animation-curve-default, border 0.18s $animation-curve-default, box-shadow 0.18s $animation-curve-default, background 0.28s $animation-curve-default; } &::-moz-range-thumb { -moz-appearance: none; width: 12px; height: 12px; box-sizing: border-box; border-radius: 50%; background-image: none; background: $range-color; border: none; // -moz-range-thumb doesn't currently support transitions. } &:focus:not(:active)::-webkit-slider-thumb { box-shadow: 0 0 0 10px $range-faded-color; } &:focus:not(:active)::-moz-range-thumb { box-shadow: 0 0 0 10px $range-faded-color; } &:active::-webkit-slider-thumb { background-image: none; background: $range-color; transform: scale(1.5); } &:active::-moz-range-thumb { background-image: none; background: $range-color; transform: scale(1.5); } &::-ms-thumb { width: 32px; height: 32px; border: none; border-radius: 50%; background: $range-color; transform: scale(0.375); // -ms-thumb doesn't currently support transitions, but leaving this here // in case support ever gets added. transition: transform 0.18s $animation-curve-default, background 0.28s $animation-curve-default; } &:focus:not(:active)::-ms-thumb { background: radial-gradient(circle closest-side, $range-color 0%, $range-color 37.5%, $range-faded-color 37.5%, $range-faded-color 100%); transform: scale(1); } &:active::-ms-thumb { background: $range-color; transform: scale(0.5625); } /**************************** 0-value ****************************/ &.is-lowest-value::-webkit-slider-thumb { border: 2px solid $range-bg-color; background: transparent; } &.is-lowest-value::-moz-range-thumb { border: 2px solid $range-bg-color; background: transparent; } &.is-lowest-value + .mdl-slider__background-flex > .mdl-slider__background-upper { left: 6px; } &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb { box-shadow: 0 0 0 10px $range-bg-focus-color; background: $range-bg-focus-color; } &.is-lowest-value:focus:not(:active)::-moz-range-thumb { box-shadow: 0 0 0 10px $range-bg-focus-color; background: $range-bg-focus-color; } &.is-lowest-value:active::-webkit-slider-thumb { border: 1.6px solid $range-bg-color; transform: scale(1.5); } &.is-lowest-value:active + .mdl-slider__background-flex > .mdl-slider__background-upper { left: 9px; } &.is-lowest-value:active::-moz-range-thumb { border: 1.5px solid $range-bg-color; transform: scale(1.5); } &.is-lowest-value::-ms-thumb { background: radial-gradient(circle closest-side, transparent 0%, transparent 66.67%, $range-bg-color 66.67%, $range-bg-color 100%); } &.is-lowest-value:focus:not(:active)::-ms-thumb { background: radial-gradient(circle closest-side, $range-bg-focus-color 0%, $range-bg-focus-color 25%, $range-bg-color 25%, $range-bg-color 37.5%, $range-bg-focus-color 37.5%, $range-bg-focus-color 100%); transform: scale(1); } &.is-lowest-value:active::-ms-thumb { transform: scale(0.5625); background: radial-gradient(circle closest-side, transparent 0%, transparent 77.78%, $range-bg-color 77.78%, $range-bg-color 100%); } &.is-lowest-value::-ms-fill-lower { background: transparent; } &.is-lowest-value::-ms-fill-upper { margin-left: 6px; } &.is-lowest-value:active::-ms-fill-upper { margin-left: 9px; } /**************************** Disabled ****************************/ &:disabled:focus::-webkit-slider-thumb, &:disabled:active::-webkit-slider-thumb, &:disabled::-webkit-slider-thumb { transform: scale(0.667); background: $range-bg-color; } &:disabled:focus::-moz-range-thumb, &:disabled:active::-moz-range-thumb, &:disabled::-moz-range-thumb { transform: scale(0.667); background: $range-bg-color; } &:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower { background-color: $range-bg-color; left: -6px; } &:disabled + .mdl-slider__background-flex > .mdl-slider__background-upper { left: 6px; } &.is-lowest-value:disabled:focus::-webkit-slider-thumb, &.is-lowest-value:disabled:active::-webkit-slider-thumb, &.is-lowest-value:disabled::-webkit-slider-thumb { border: 3px solid $range-bg-color; background: transparent; transform: scale(0.667); } &.is-lowest-value:disabled:focus::-moz-range-thumb, &.is-lowest-value:disabled:active::-moz-range-thumb, &.is-lowest-value:disabled::-moz-range-thumb { border: 3px solid $range-bg-color; background: transparent; transform: scale(0.667); } &.is-lowest-value:disabled:active + .mdl-slider__background-flex > .mdl-slider__background-upper { left: 6px; } &:disabled:focus::-ms-thumb, &:disabled:active::-ms-thumb, &:disabled::-ms-thumb { transform: scale(0.25); background: $range-bg-color; } &.is-lowest-value:disabled:focus::-ms-thumb, &.is-lowest-value:disabled:active::-ms-thumb, &.is-lowest-value:disabled::-ms-thumb { transform: scale(0.25); background: radial-gradient(circle closest-side, transparent 0%, transparent 50%, $range-bg-color 50%, $range-bg-color 100%); } &:disabled::-ms-fill-lower { margin-right: 6px; background: linear-gradient(to right, transparent, transparent 25px, $range-bg-color 25px, $range-bg-color 0); } &:disabled::-ms-fill-upper { margin-left: 6px; } &.is-lowest-value:disabled:active::-ms-fill-upper { margin-left: 6px; } } } // Since we need to specify a height of 32px in IE, we add a class here for a // container that brings it back to a reasonable height. .mdl-slider__ie-container { height: 18px; overflow: visible; border: none; margin: none; padding: none; } // We use a set of divs behind the track to style it in all non-IE browsers. // This one contains both the background and the slider. .mdl-slider__container { height: 18px; position: relative; background: none; display: flex; flex-direction: row; } // This one sets up a flex box for the styled upper and lower portions of the // the slider track. .mdl-slider__background-flex { background: transparent; position: absolute; height: 2px; width: calc(100% - 52px); top: 50%; left: 0; margin: 0 26px; display: flex; overflow: hidden; border: 0; padding: 0; transform: translate(0, -1px); } // This one styles the lower part of the slider track. .mdl-slider__background-lower { background: $range-color; flex: 0; position: relative; border: 0; padding: 0; } // This one styles the upper part of the slider track. .mdl-slider__background-upper { background: $range-bg-color; flex: 0; position: relative; border: 0; padding: 0; transition: left 0.18s $animation-curve-default }