104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			SCSS
		
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			SCSS
		
	
	
| /*
 | |
| Copyright 2021 The Matrix.org Foundation C.I.C.
 | |
| 
 | |
| 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.
 | |
| */
 | |
| 
 | |
| // CSS inspiration from:
 | |
| // * https://www.w3schools.com/howto/howto_js_rangeslider.asp
 | |
| // * https://stackoverflow.com/a/28283806
 | |
| // * https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/
 | |
| 
 | |
| .mx_SeekBar {
 | |
|     // Dev note: we deliberately do not have the -ms-track (and friends) selectors because we don't
 | |
|     // need to support IE.
 | |
| 
 | |
|     appearance: none; // default style override
 | |
| 
 | |
|     width: 100%;
 | |
|     height: 1px;
 | |
|     background: $quaternary-content;
 | |
|     outline: none; // remove blue selection border
 | |
|     position: relative; // for before+after pseudo elements later on
 | |
| 
 | |
|     cursor: pointer;
 | |
| 
 | |
|     &::-webkit-slider-thumb {
 | |
|         appearance: none; // default style override
 | |
| 
 | |
|         // Dev note: This needs to be duplicated with the -moz-range-thumb selector
 | |
|         // because otherwise Edge (webkit) will fail to see the styles and just refuse
 | |
|         // to apply them.
 | |
|         width: 8px;
 | |
|         height: 8px;
 | |
|         border-radius: 8px;
 | |
|         background-color: $tertiary-content;
 | |
|         cursor: pointer;
 | |
|     }
 | |
| 
 | |
|     &::-moz-range-thumb {
 | |
|         width: 8px;
 | |
|         height: 8px;
 | |
|         border-radius: 8px;
 | |
|         background-color: $tertiary-content;
 | |
|         cursor: pointer;
 | |
| 
 | |
|         // Firefox adds a border on the thumb
 | |
|         border: none;
 | |
|     }
 | |
| 
 | |
|     // This is for webkit support, but we can't limit the functionality of it to just webkit
 | |
|     // browsers. Firefox responds to webkit-prefixed values now, which means we can't use media
 | |
|     // or support queries to selectively apply the rule. An upside is that this CSS doesn't work
 | |
|     // in firefox, so it's just wasted CPU/GPU time.
 | |
|     &::before { // ::before to ensure it ends up under the thumb
 | |
|         content: '';
 | |
|         background-color: $tertiary-content;
 | |
| 
 | |
|         // Absolute positioning to ensure it overlaps with the existing bar
 | |
|         position: absolute;
 | |
|         top: 0;
 | |
|         left: 0;
 | |
| 
 | |
|         // Sizing to match the bar
 | |
|         width: 100%;
 | |
|         height: 1px;
 | |
| 
 | |
|         // And finally dynamic width without overly hurting the rendering engine.
 | |
|         transform-origin: 0 100%;
 | |
|         transform: scaleX(var(--fillTo));
 | |
|     }
 | |
| 
 | |
|     // This is firefox's built-in support for the above, with 100% less hacks.
 | |
|     &::-moz-range-progress {
 | |
|         background-color: $tertiary-content;
 | |
|         height: 1px;
 | |
|     }
 | |
| 
 | |
|     &:disabled {
 | |
|         opacity: 0.5;
 | |
|     }
 | |
| 
 | |
|     // Increase clickable area for the slider (approximately same size as browser default)
 | |
|     // We do it this way to keep the same padding and margins of the element, avoiding margin math.
 | |
|     // Source: https://front-back.com/expand-clickable-areas-for-a-better-touch-experience/
 | |
|     &::after {
 | |
|         content: '';
 | |
|         position: absolute;
 | |
|         top: -6px;
 | |
|         bottom: -6px;
 | |
|         left: 0;
 | |
|         right: 0;
 | |
|     }
 | |
| }
 |