33@import ' ../core/style/elevation' ;
44@import ' ../core/a11y/a11y' ;
55
6-
7- $mat-slide-toggle-width : 36px !default ;
8- $mat-slide-toggle-height : 24px !default ;
9- $mat-slide-toggle-bar-height : 14px !default ;
106$mat-slide-toggle-thumb-size : 20px !default ;
7+ $mat-slide-toggle-bar-border-radius : 8px !default ;
8+ $mat-slide-toggle-height : 24px !default ;
119$mat-slide-toggle-margin : 16px !default ;
1210$mat-slide-toggle-spacing : 8px !default ;
1311$mat-slide-toggle-ripple-radius : 23px !default ;
12+ $mat-slide-toggle-bar-width : 36px !default ;
13+ $mat-slide-toggle-bar-height : 14px !default ;
14+ $mat-slide-toggle-bar-track-width : $mat-slide-toggle-bar-width - $mat-slide-toggle-thumb-size ;
1415
1516
1617.mat-slide-toggle {
@@ -30,13 +31,12 @@ $mat-slide-toggle-ripple-radius: 23px !default;
3031
3132 & .mat-checked {
3233 .mat-slide-toggle-thumb-container {
33- transform : translate3d (100 % , 0 , 0 );
34+ transform : translate3d ($mat-slide-toggle-bar-track-width , 0 , 0 );
3435 }
3536 }
3637
3738 & .mat-disabled {
38-
39- .mat-slide-toggle-label , .mat-slide-toggle-container {
39+ .mat-slide-toggle-label , .mat-slide-toggle-thumb-container {
4040 cursor : default ;
4141 }
4242 }
@@ -55,69 +55,63 @@ $mat-slide-toggle-ripple-radius: 23px !default;
5555.mat-slide-toggle-label {
5656 display : flex ;
5757 flex : 1 ;
58+ flex-direction : row ;
59+ align-items : center ;
5860
5961 cursor : pointer ;
6062}
6163
6264/* If the label should be placed before the thumb then we just change the orders. */
6365.mat-slide-toggle-label-before {
6466 .mat-slide-toggle-label { order : 1 ; }
65- .mat-slide-toggle-container { order : 2 ; }
66- }
67-
68- // Container for the composition of the slide-toggle / switch indicator.
69- .mat-slide-toggle-container {
70- cursor : grab ;
71- width : $mat-slide-toggle-width ;
72- height : $mat-slide-toggle-height ;
73-
74- position : relative ;
67+ .mat-slide-toggle-bar { order : 2 ; }
7568}
7669
77- /* Apply the margin for slide-toggles and revert it for RTL toggles with labelPosition before. */
78- [dir = ' rtl' ] .mat-slide-toggle-label-before .mat-slide-toggle-container , .mat-slide-toggle-container {
70+ // Apply the margin for slide-toggles and revert it for RTL toggles with labelPosition before.
71+ [dir = ' rtl' ] .mat-slide-toggle-label-before .mat-slide-toggle-bar ,
72+ .mat-slide-toggle-bar {
7973 margin-right : $mat-slide-toggle-spacing ;
8074 margin-left : 0 ;
8175}
8276
83- /* Switch the margins in RTL mode and also switch it if the labelPosition is set to before. */
84- [dir = ' rtl' ], .mat-slide-toggle-label-before {
85- .mat-slide-toggle-container {
77+ // Switch the margins in RTL mode and also switch it if the labelPosition is set to before.
78+ [dir = ' rtl' ],
79+ .mat-slide-toggle-label-before {
80+ .mat-slide-toggle-bar {
8681 margin-left : $mat-slide-toggle-spacing ;
8782 margin-right : 0 ;
8883 }
8984}
9085
9186// The thumb container is responsible for the dragging functionality.
92- // It moves around and holds the actual circle as a thumb .
87+ // The container includes the visual thumb and the ripple container element .
9388.mat-slide-toggle-thumb-container {
89+ $thumb-bar-vertical-padding : ($mat-slide-toggle-thumb-size - $mat-slide-toggle-bar-height ) / 2 ;
90+
9491 position : absolute ;
95- top : $mat-slide-toggle-height / 2 - $mat-slide-toggle-thumb-size / 2 ;
96- left : 0 ;
9792 z-index : 1 ;
9893
99- width : $mat-slide-toggle-width - $mat-slide-toggle-thumb-size ;
94+ width : $mat-slide-toggle-thumb-size ;
95+ height : $mat-slide-toggle-thumb-size ;
96+ top : - $thumb-bar-vertical-padding ;
97+ left : 0 ;
10098
10199 transform : translate3d (0 , 0 , 0 );
102-
103100 transition : $swift-linear ;
104101 transition-property : transform ;
105102
103+ cursor : grab ;
104+
106105 // Once the thumb container is being dragged around, we remove the transition duration to
107106 // make the drag feeling fast and not delayed.
108107 & .mat-dragging {
109108 transition-duration : 0ms ;
110109 }
111110}
112111
113- // The thumb will be elevated from the slide-toggle bar.
114- // Also the thumb is bound to its parent thumb-container, which manages the movement of the thumb.
112+ // The visual thumb element that moves inside of the thumb bar.
113+ // The parent thumb-container container is responsible for the movement of the visual thumb.
115114.mat-slide-toggle-thumb {
116- position : absolute ;
117- margin : 0 ;
118- left : 0 ;
119- top : 0 ;
120-
121115 height : $mat-slide-toggle-thumb-size ;
122116 width : $mat-slide-toggle-thumb-size ;
123117 border-radius : 50% ;
@@ -131,16 +125,14 @@ $mat-slide-toggle-ripple-radius: 23px !default;
131125}
132126
133127// Horizontal bar for the slide-toggle.
134- // The slide-toggle bar is shown behind the thumb container .
128+ // The slide-toggle bar is shown behind the movable thumb element .
135129.mat-slide-toggle-bar {
136- position : absolute ;
137- left : 1px ;
138- top : $mat-slide-toggle-height / 2 - $mat-slide-toggle-bar-height / 2 ;
130+ position : relative ;
139131
140- width : $mat-slide-toggle-width - 2 px ;
132+ width : $mat-slide-toggle-bar-width ;
141133 height : $mat-slide-toggle-bar-height ;
142134
143- border-radius : 8 px ;
135+ border-radius : $mat-slide-toggle-bar-border-radius ;
144136
145137 @include cdk-high-contrast {
146138 background : #fff ;
@@ -173,4 +165,4 @@ $mat-slide-toggle-ripple-radius: 23px !default;
173165 border-radius : 50% ;
174166 z-index : 1 ;
175167 pointer-events : none ;
176- }
168+ }
0 commit comments