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