Skip to content

Commit 8263ffb

Browse files
mmalerbatinayuangao
authored andcommitted
fix(slider): make disabled state look like mocks (#2604)
* make slider disabled state match mocks * added test * fix lint * added comments * addressed comments
1 parent 77968cc commit 8263ffb

File tree

8 files changed

+171
-68
lines changed

8 files changed

+171
-68
lines changed

src/demo-app/demo-app/demo-app.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ body {
2121

2222
.demo-content {
2323
padding: 32px;
24+
box-sizing: border-box;
2425
}
2526

2627
md-toolbar {

src/demo-app/slider/slider-demo.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ <h1>Slider with Min and Max</h1>
99
<input [(ngModel)]="max">
1010

1111
<h1>Disabled Slider</h1>
12-
<md-slider disabled #slider3></md-slider>
13-
{{slider3.value}}
12+
<md-slider disabled [(ngModel)]="disabledValue"></md-slider>
13+
<input [(ngModel)]="disabledValue">
1414

1515
<h1>Slider with set value</h1>
1616
<md-slider value="43"></md-slider>

src/demo-app/slider/slider-demo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ export class SliderDemo {
1111
val: number = 50;
1212
min: number = 0;
1313
max: number = 100;
14+
disabledValue = 0;
1415
}

src/lib/slider/_slider-theme.scss

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
$md-slider-focused-color: rgba(black, 0.38);
1111
$md-slider-disabled-color: rgba(black, 0.26);
1212

13-
.md-slider-track {
13+
.md-slider-track-background {
1414
background-color: $md-slider-off-color;
1515
}
1616

@@ -29,4 +29,11 @@
2929
.md-slider-thumb-label-text {
3030
color: md-color($accent, default-contrast);
3131
}
32+
33+
.md-slider-disabled {
34+
.md-slider-track-fill,
35+
.md-slider-thumb {
36+
background-color: $md-slider-off-color;
37+
}
38+
}
3239
}

src/lib/slider/slider.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
<div class="md-slider-track">
2-
<div class="md-slider-track-fill" [ngStyle]="trackFillStyles"></div>
1+
<div class="md-slider-wrapper">
2+
<div class="md-slider-track-wrapper">
3+
<div class="md-slider-track-background" [ngStyle]="trackBackgroundStyles"></div>
4+
<div class="md-slider-track-fill" [ngStyle]="trackFillStyles"></div>
5+
</div>
36
<div class="md-slider-ticks-container" [ngStyle]="ticksContainerStyles">
47
<div class="md-slider-ticks" [ngStyle]="ticksStyles"></div>
58
</div>

src/lib/slider/slider.scss

Lines changed: 71 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ $md-slider-thumb-size: 20px !default;
1212

1313
$md-slider-thumb-default-scale: 0.7 !default;
1414
$md-slider-thumb-focus-scale: 1 !default;
15+
$md-slider-thumb-disabled-scale: 0.5 !default;
1516

1617
$md-slider-thumb-arrow-gap: 12px !default;
1718

@@ -30,16 +31,29 @@ md-slider {
3031
vertical-align: middle;
3132
}
3233

33-
.md-slider-track {
34+
.md-slider-wrapper {
3435
position: absolute;
3536
}
3637

38+
.md-slider-track-wrapper {
39+
position: absolute;
40+
top: 0;
41+
left: 0;
42+
overflow: hidden;
43+
}
44+
3745
.md-slider-track-fill {
3846
position: absolute;
3947
transform-origin: 0 0;
4048
transition: transform $swift-ease-out-duration $swift-ease-out-timing-function;
4149
}
4250

51+
.md-slider-track-background {
52+
position: absolute;
53+
transform-origin: 100% 100%;
54+
transition: transform $swift-ease-out-duration $swift-ease-out-timing-function;
55+
}
56+
4357
.md-slider-ticks-container {
4458
position: absolute;
4559
left: 0;
@@ -93,6 +107,7 @@ md-slider {
93107
// Slider sliding state.
94108
.md-slider-sliding {
95109
.md-slider-track-fill,
110+
.md-slider-track-background,
96111
.md-slider-thumb-container {
97112
// Must use `transition-duration: 0ms` to disable animation rather than `transition: none`.
98113
// On Mobile Safari `transition: none` causes the slider thumb to appear stuck.
@@ -103,7 +118,7 @@ md-slider {
103118

104119
// Slider with ticks.
105120
.md-slider-has-ticks {
106-
.md-slider-track::after {
121+
.md-slider-wrapper::after {
107122
content: '';
108123
position: absolute;
109124
border: 0 solid $md-slider-tick-color;
@@ -113,7 +128,7 @@ md-slider {
113128

114129
&.md-slider-active,
115130
&:hover {
116-
.md-slider-track::after {
131+
.md-slider-wrapper::after {
117132
opacity: 1;
118133
}
119134

@@ -137,6 +152,10 @@ md-slider {
137152
.md-slider-track-fill {
138153
transform-origin: 100% 100%;
139154
}
155+
156+
.md-slider-track-background {
157+
transform-origin: 0 0;
158+
}
140159
}
141160

142161

@@ -160,22 +179,40 @@ md-slider {
160179
}
161180

162181

182+
// Disabled slider.
183+
.md-slider-disabled {
184+
.md-slider-thumb {
185+
transform: scale($md-slider-thumb-disabled-scale);
186+
}
187+
188+
.md-slider-thumb-label {
189+
display: none;
190+
}
191+
}
192+
193+
163194
// Horizontal slider.
164195
.md-slider-horizontal {
165196
height: $md-slider-thickness;
166197
min-width: $md-slider-min-size;
167198

168-
.md-slider-track {
199+
.md-slider-wrapper {
169200
height: $md-slider-track-thickness;
170201
top: ($md-slider-thickness - $md-slider-track-thickness) / 2;
171202
left: $md-slider-padding;
172203
right: $md-slider-padding;
173204
}
174205

175-
.md-slider-track::after {
206+
.md-slider-wrapper::after {
176207
height: $md-slider-track-thickness;
177208
border-left-width: $md-slider-tick-size;
178209
right: 0;
210+
top: 0;
211+
}
212+
213+
.md-slider-track-wrapper {
214+
height: $md-slider-track-thickness;
215+
width: 100%;
179216
}
180217

181218
.md-slider-track-fill {
@@ -184,6 +221,12 @@ md-slider {
184221
transform: scaleX(0);
185222
}
186223

224+
.md-slider-track-background {
225+
height: $md-slider-track-thickness;
226+
width: 100%;
227+
transform: scaleX(1);
228+
}
229+
187230
.md-slider-ticks-container {
188231
height: $md-slider-track-thickness;
189232
width: 100%;
@@ -230,17 +273,23 @@ md-slider {
230273
width: $md-slider-thickness;
231274
min-height: $md-slider-min-size;
232275

233-
.md-slider-track {
276+
.md-slider-wrapper {
234277
width: $md-slider-track-thickness;
235278
top: $md-slider-padding;
236279
bottom: $md-slider-padding;
237280
left: ($md-slider-thickness - $md-slider-track-thickness) / 2;
238281
}
239282

240-
.md-slider-track::after {
283+
.md-slider-wrapper::after {
241284
width: $md-slider-track-thickness;
242285
border-top-width: $md-slider-tick-size;
243286
bottom: 0;
287+
left: 0;
288+
}
289+
290+
.md-slider-track-wrapper {
291+
height: 100%;
292+
width: $md-slider-track-thickness;
244293
}
245294

246295
.md-slider-track-fill {
@@ -249,6 +298,12 @@ md-slider {
249298
transform: scaleY(0);
250299
}
251300

301+
.md-slider-track-background {
302+
height: 100%;
303+
width: $md-slider-track-thickness;
304+
transform: scaleY(1);
305+
}
306+
252307
.md-slider-ticks-container {
253308
width: $md-slider-track-thickness;
254309
height: 100%;
@@ -288,7 +343,7 @@ md-slider {
288343

289344
// Slider in RTL languages.
290345
[dir='rtl'] {
291-
.md-slider-track::after {
346+
.md-slider-wrapper::after {
292347
left: 0;
293348
right: auto;
294349
}
@@ -298,10 +353,18 @@ md-slider {
298353
transform-origin: 100% 100%;
299354
}
300355

356+
.md-slider-track-background {
357+
transform-origin: 0 0;
358+
}
359+
301360
&.md-slider-axis-inverted {
302361
.md-slider-track-fill {
303362
transform-origin: 0 0;
304363
}
364+
365+
.md-slider-track-background {
366+
transform-origin: 100% 100%;
367+
}
305368
}
306369
}
307370
}

0 commit comments

Comments
 (0)