bootstrap 4.0.0.beta3 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -2
  4. data/README.md +2 -2
  5. data/Rakefile +4 -2
  6. data/assets/javascripts/bootstrap/alert.js +79 -68
  7. data/assets/javascripts/bootstrap/button.js +140 -78
  8. data/assets/javascripts/bootstrap/carousel.js +294 -158
  9. data/assets/javascripts/bootstrap/collapse.js +157 -133
  10. data/assets/javascripts/bootstrap/dropdown.js +257 -167
  11. data/assets/javascripts/bootstrap/modal.js +285 -204
  12. data/assets/javascripts/bootstrap/popover.js +101 -60
  13. data/assets/javascripts/bootstrap/scrollspy.js +127 -106
  14. data/assets/javascripts/bootstrap/tab.js +113 -101
  15. data/assets/javascripts/bootstrap/toast.js +267 -0
  16. data/assets/javascripts/bootstrap/tooltip.js +406 -188
  17. data/assets/javascripts/bootstrap/util.js +106 -55
  18. data/assets/javascripts/bootstrap-sprockets.js +1 -0
  19. data/assets/javascripts/bootstrap.js +1946 -1482
  20. data/assets/javascripts/bootstrap.min.js +4 -4
  21. data/assets/stylesheets/_bootstrap-grid.scss +7 -12
  22. data/assets/stylesheets/_bootstrap-reboot.scss +4 -4
  23. data/assets/stylesheets/_bootstrap.scss +6 -4
  24. data/assets/stylesheets/bootstrap/_alert.scss +3 -2
  25. data/assets/stylesheets/bootstrap/_badge.scss +8 -1
  26. data/assets/stylesheets/bootstrap/_breadcrumb.scss +10 -6
  27. data/assets/stylesheets/bootstrap/_button-group.scss +17 -20
  28. data/assets/stylesheets/bootstrap/_buttons.scss +23 -28
  29. data/assets/stylesheets/bootstrap/_card.scss +77 -61
  30. data/assets/stylesheets/bootstrap/_carousel.scss +72 -63
  31. data/assets/stylesheets/bootstrap/_close.scss +15 -9
  32. data/assets/stylesheets/bootstrap/_code.scss +6 -14
  33. data/assets/stylesheets/bootstrap/_custom-forms.scss +287 -43
  34. data/assets/stylesheets/bootstrap/_dropdown.scss +70 -9
  35. data/assets/stylesheets/bootstrap/_forms.scss +56 -42
  36. data/assets/stylesheets/bootstrap/_functions.scss +117 -13
  37. data/assets/stylesheets/bootstrap/_grid.scss +32 -11
  38. data/assets/stylesheets/bootstrap/_images.scss +4 -4
  39. data/assets/stylesheets/bootstrap/_input-group.scss +80 -25
  40. data/assets/stylesheets/bootstrap/_jumbotron.scss +2 -1
  41. data/assets/stylesheets/bootstrap/_list-group.scss +63 -24
  42. data/assets/stylesheets/bootstrap/_mixins.scss +9 -4
  43. data/assets/stylesheets/bootstrap/_modal.scss +96 -24
  44. data/assets/stylesheets/bootstrap/_nav.scss +14 -7
  45. data/assets/stylesheets/bootstrap/_navbar.scss +66 -45
  46. data/assets/stylesheets/bootstrap/_pagination.scss +10 -8
  47. data/assets/stylesheets/bootstrap/_popover.scss +56 -69
  48. data/assets/stylesheets/bootstrap/_print.scss +41 -19
  49. data/assets/stylesheets/bootstrap/_progress.scss +20 -6
  50. data/assets/stylesheets/bootstrap/_reboot.scss +88 -109
  51. data/assets/stylesheets/bootstrap/_spinners.scss +65 -0
  52. data/assets/stylesheets/bootstrap/_tables.scss +19 -14
  53. data/assets/stylesheets/bootstrap/_toasts.scss +46 -0
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +6 -6
  55. data/assets/stylesheets/bootstrap/_transitions.scss +10 -20
  56. data/assets/stylesheets/bootstrap/_type.scss +19 -19
  57. data/assets/stylesheets/bootstrap/_utilities.scss +4 -0
  58. data/assets/stylesheets/bootstrap/_variables.scss +492 -215
  59. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +5 -3
  60. data/assets/stylesheets/bootstrap/mixins/_badge.scss +8 -3
  61. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +51 -10
  62. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +16 -1
  63. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -9
  64. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +35 -26
  65. data/assets/stylesheets/bootstrap/mixins/_caret.scss +13 -16
  66. data/assets/stylesheets/bootstrap/mixins/_deprecate.scss +10 -0
  67. data/assets/stylesheets/bootstrap/mixins/_float.scss +6 -3
  68. data/assets/stylesheets/bootstrap/mixins/_forms.scss +102 -40
  69. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +7 -7
  70. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +36 -25
  71. data/assets/stylesheets/bootstrap/mixins/_grid.scss +34 -17
  72. data/assets/stylesheets/bootstrap/mixins/_hover.scss +27 -51
  73. data/assets/stylesheets/bootstrap/mixins/_image.scss +4 -4
  74. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +10 -13
  75. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  76. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +3 -2
  77. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +1 -1
  78. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
  79. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +5 -6
  80. data/assets/stylesheets/bootstrap/mixins/_size.scss +1 -0
  81. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +11 -2
  82. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +7 -4
  83. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +3 -1
  84. data/assets/stylesheets/bootstrap/mixins/_transition.scss +20 -3
  85. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +1 -0
  86. data/assets/stylesheets/bootstrap/utilities/_background.scss +2 -2
  87. data/assets/stylesheets/bootstrap/utilities/_borders.scss +23 -2
  88. data/assets/stylesheets/bootstrap/utilities/_display.scss +6 -36
  89. data/assets/stylesheets/bootstrap/utilities/_embed.scss +7 -20
  90. data/assets/stylesheets/bootstrap/utilities/_flex.scss +5 -0
  91. data/assets/stylesheets/bootstrap/utilities/_float.scss +5 -3
  92. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +5 -0
  93. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +5 -0
  94. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -4
  95. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +6 -0
  96. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +8 -0
  97. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +23 -1
  98. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +19 -0
  99. data/assets/stylesheets/bootstrap/utilities/_text.scss +28 -8
  100. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +4 -2
  101. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +228 -0
  102. data/bootstrap.gemspec +7 -4
  103. data/lib/bootstrap/engine.rb +3 -0
  104. data/lib/bootstrap/version.rb +4 -2
  105. data/lib/bootstrap.rb +10 -7
  106. data/tasks/updater/js.rb +18 -6
  107. data/tasks/updater/network.rb +8 -2
  108. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  109. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  110. data/test/gemfiles/rails_6_0.gemfile +7 -0
  111. data/test/support/dummy_rails_integration.rb +3 -1
  112. data/test/test_helper.rb +21 -15
  113. metadata +29 -16
  114. data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
@@ -6,17 +6,21 @@
6
6
 
7
7
  .btn {
8
8
  display: inline-block;
9
+ font-family: $btn-font-family;
9
10
  font-weight: $btn-font-weight;
11
+ color: $body-color;
10
12
  text-align: center;
11
- white-space: nowrap;
13
+ text-decoration: if($link-decoration == none, null, none);
14
+ white-space: $btn-white-space;
12
15
  vertical-align: middle;
13
16
  user-select: none;
17
+ background-color: transparent;
14
18
  border: $btn-border-width solid transparent;
15
- @include button-size($btn-padding-y, $btn-padding-x, $font-size-base, $btn-line-height, $btn-border-radius);
19
+ @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);
16
20
  @include transition($btn-transition);
17
21
 
18
- // Share hover and focus styles
19
- @include hover-focus {
22
+ @include hover() {
23
+ color: $body-color;
20
24
  text-decoration: none;
21
25
  }
22
26
 
@@ -33,25 +37,23 @@
33
37
  @include box-shadow(none);
34
38
  }
35
39
 
36
- // Opinionated: add "hand" cursor to non-disabled .btn elements
37
- &:not([disabled]):not(.disabled) {
38
- cursor: pointer;
39
- }
40
+ &:not(:disabled):not(.disabled) {
41
+ cursor: if($enable-pointer-cursor-for-buttons, pointer, null);
40
42
 
41
- &:not([disabled]):not(.disabled):active,
42
- &:not([disabled]):not(.disabled).active {
43
- background-image: none;
44
- @include box-shadow($btn-active-box-shadow);
43
+ &:active,
44
+ &.active {
45
+ @include box-shadow($btn-active-box-shadow);
45
46
 
46
- &:focus {
47
- @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
47
+ &:focus {
48
+ @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
49
+ }
48
50
  }
49
51
  }
50
52
  }
51
53
 
52
54
  // Future-proof disabling of clicks on `<a>` elements
53
55
  a.btn.disabled,
54
- fieldset[disabled] a.btn {
56
+ fieldset:disabled a.btn {
55
57
  pointer-events: none;
56
58
  }
57
59
 
@@ -68,11 +70,7 @@ fieldset[disabled] a.btn {
68
70
 
69
71
  @each $color, $value in $theme-colors {
70
72
  .btn-outline-#{$color} {
71
- @if $color == "light" {
72
- @include button-outline-variant($value, $gray-900);
73
- } @else {
74
- @include button-outline-variant($value, $white);
75
- }
73
+ @include button-outline-variant($value);
76
74
  }
77
75
  }
78
76
 
@@ -85,25 +83,22 @@ fieldset[disabled] a.btn {
85
83
  .btn-link {
86
84
  font-weight: $font-weight-normal;
87
85
  color: $link-color;
88
- background-color: transparent;
86
+ text-decoration: $link-decoration;
89
87
 
90
- @include hover {
88
+ @include hover() {
91
89
  color: $link-hover-color;
92
90
  text-decoration: $link-hover-decoration;
93
- background-color: transparent;
94
- border-color: transparent;
95
91
  }
96
92
 
97
93
  &:focus,
98
94
  &.focus {
99
95
  text-decoration: $link-hover-decoration;
100
- border-color: transparent;
101
- box-shadow: none;
102
96
  }
103
97
 
104
98
  &:disabled,
105
99
  &.disabled {
106
100
  color: $btn-link-disabled-color;
101
+ pointer-events: none;
107
102
  }
108
103
 
109
104
  // No need for an active state here
@@ -115,11 +110,11 @@ fieldset[disabled] a.btn {
115
110
  //
116
111
 
117
112
  .btn-lg {
118
- @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
113
+ @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
119
114
  }
120
115
 
121
116
  .btn-sm {
122
- @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
117
+ @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
123
118
  }
124
119
 
125
120
 
@@ -6,7 +6,8 @@
6
6
  position: relative;
7
7
  display: flex;
8
8
  flex-direction: column;
9
- min-width: 0;
9
+ min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
10
+ height: $card-height;
10
11
  word-wrap: break-word;
11
12
  background-color: $card-bg;
12
13
  background-clip: border-box;
@@ -18,24 +19,38 @@
18
19
  margin-left: 0;
19
20
  }
20
21
 
21
- > .list-group:first-child {
22
- .list-group-item:first-child {
23
- @include border-top-radius($card-border-radius);
22
+ > .list-group {
23
+ border-top: inherit;
24
+ border-bottom: inherit;
25
+
26
+ &:first-child {
27
+ border-top-width: 0;
28
+ @include border-top-radius($card-inner-border-radius);
24
29
  }
25
- }
26
30
 
27
- > .list-group:last-child {
28
- .list-group-item:last-child {
29
- @include border-bottom-radius($card-border-radius);
31
+ &:last-child {
32
+ border-bottom-width: 0;
33
+ @include border-bottom-radius($card-inner-border-radius);
30
34
  }
31
35
  }
36
+
37
+ // Due to specificity of the above selector (`.card > .list-group`), we must
38
+ // use a child selector here to prevent double borders.
39
+ > .card-header + .list-group,
40
+ > .list-group + .card-footer {
41
+ border-top: 0;
42
+ }
32
43
  }
33
44
 
34
45
  .card-body {
35
46
  // Enable `flex-grow: 1` for decks and groups so that card blocks take up
36
47
  // as much space as possible, ensuring footers are aligned to the bottom.
37
48
  flex: 1 1 auto;
49
+ // Workaround for the image size bug in IE
50
+ // See: https://github.com/twbs/bootstrap/pull/28855
51
+ min-height: 1px;
38
52
  padding: $card-spacer-x;
53
+ color: $card-color;
39
54
  }
40
55
 
41
56
  .card-title {
@@ -43,7 +58,7 @@
43
58
  }
44
59
 
45
60
  .card-subtitle {
46
- margin-top: -($card-spacer-y / 2);
61
+ margin-top: -$card-spacer-y * .5;
47
62
  margin-bottom: 0;
48
63
  }
49
64
 
@@ -52,7 +67,7 @@
52
67
  }
53
68
 
54
69
  .card-link {
55
- @include hover {
70
+ @include hover() {
56
71
  text-decoration: none;
57
72
  }
58
73
 
@@ -68,22 +83,18 @@
68
83
  .card-header {
69
84
  padding: $card-spacer-y $card-spacer-x;
70
85
  margin-bottom: 0; // Removes the default margin-bottom of <hN>
86
+ color: $card-cap-color;
71
87
  background-color: $card-cap-bg;
72
88
  border-bottom: $card-border-width solid $card-border-color;
73
89
 
74
90
  &:first-child {
75
91
  @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
76
92
  }
77
-
78
- + .list-group {
79
- .list-group-item:first-child {
80
- border-top: 0;
81
- }
82
- }
83
93
  }
84
94
 
85
95
  .card-footer {
86
96
  padding: $card-spacer-y $card-spacer-x;
97
+ color: $card-cap-color;
87
98
  background-color: $card-cap-bg;
88
99
  border-top: $card-border-width solid $card-border-color;
89
100
 
@@ -98,15 +109,15 @@
98
109
  //
99
110
 
100
111
  .card-header-tabs {
101
- margin-right: -($card-spacer-x / 2);
112
+ margin-right: -$card-spacer-x * .5;
102
113
  margin-bottom: -$card-spacer-y;
103
- margin-left: -($card-spacer-x / 2);
114
+ margin-left: -$card-spacer-x * .5;
104
115
  border-bottom: 0;
105
116
  }
106
117
 
107
118
  .card-header-pills {
108
- margin-right: -($card-spacer-x / 2);
109
- margin-left: -($card-spacer-x / 2);
119
+ margin-right: -$card-spacer-x * .5;
120
+ margin-left: -$card-spacer-x * .5;
110
121
  }
111
122
 
112
123
  // Card image
@@ -117,21 +128,23 @@
117
128
  bottom: 0;
118
129
  left: 0;
119
130
  padding: $card-img-overlay-padding;
131
+ @include border-radius($card-inner-border-radius);
120
132
  }
121
133
 
122
- .card-img {
134
+ .card-img,
135
+ .card-img-top,
136
+ .card-img-bottom {
137
+ flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396
123
138
  width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
124
- @include border-radius($card-inner-border-radius);
125
139
  }
126
140
 
127
- // Card image caps
141
+ .card-img,
128
142
  .card-img-top {
129
- width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
130
143
  @include border-top-radius($card-inner-border-radius);
131
144
  }
132
145
 
146
+ .card-img,
133
147
  .card-img-bottom {
134
- width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
135
148
  @include border-bottom-radius($card-inner-border-radius);
136
149
  }
137
150
 
@@ -139,23 +152,19 @@
139
152
  // Card deck
140
153
 
141
154
  .card-deck {
142
- display: flex;
143
- flex-direction: column;
144
-
145
155
  .card {
146
156
  margin-bottom: $card-deck-margin;
147
157
  }
148
158
 
149
159
  @include media-breakpoint-up(sm) {
160
+ display: flex;
150
161
  flex-flow: row wrap;
151
162
  margin-right: -$card-deck-margin;
152
163
  margin-left: -$card-deck-margin;
153
164
 
154
165
  .card {
155
- display: flex;
156
- // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
166
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
157
167
  flex: 1 0 0%;
158
- flex-direction: column;
159
168
  margin-right: $card-deck-margin;
160
169
  margin-bottom: 0; // Override the default
161
170
  margin-left: $card-deck-margin;
@@ -169,9 +178,6 @@
169
178
  //
170
179
 
171
180
  .card-group {
172
- display: flex;
173
- flex-direction: column;
174
-
175
181
  // The child selector allows nested `.card` within `.card-group`
176
182
  // to display properly.
177
183
  > .card {
@@ -179,11 +185,12 @@
179
185
  }
180
186
 
181
187
  @include media-breakpoint-up(sm) {
188
+ display: flex;
182
189
  flex-flow: row wrap;
183
190
  // The child selector allows nested `.card` within `.card-group`
184
191
  // to display properly.
185
192
  > .card {
186
- // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
193
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
187
194
  flex: 1 0 0%;
188
195
  margin-bottom: 0;
189
196
 
@@ -194,55 +201,35 @@
194
201
 
195
202
  // Handle rounded corners
196
203
  @if $enable-rounded {
197
- &:first-child {
204
+ &:not(:last-child) {
198
205
  @include border-right-radius(0);
199
206
 
200
207
  .card-img-top,
201
208
  .card-header {
209
+ // stylelint-disable-next-line property-disallowed-list
202
210
  border-top-right-radius: 0;
203
211
  }
204
212
  .card-img-bottom,
205
213
  .card-footer {
214
+ // stylelint-disable-next-line property-disallowed-list
206
215
  border-bottom-right-radius: 0;
207
216
  }
208
217
  }
209
218
 
210
- &:last-child {
219
+ &:not(:first-child) {
211
220
  @include border-left-radius(0);
212
221
 
213
222
  .card-img-top,
214
223
  .card-header {
224
+ // stylelint-disable-next-line property-disallowed-list
215
225
  border-top-left-radius: 0;
216
226
  }
217
227
  .card-img-bottom,
218
228
  .card-footer {
229
+ // stylelint-disable-next-line property-disallowed-list
219
230
  border-bottom-left-radius: 0;
220
231
  }
221
232
  }
222
-
223
- &:only-child {
224
- @include border-radius($card-border-radius);
225
-
226
- .card-img-top,
227
- .card-header {
228
- @include border-top-radius($card-border-radius);
229
- }
230
- .card-img-bottom,
231
- .card-footer {
232
- @include border-bottom-radius($card-border-radius);
233
- }
234
- }
235
-
236
- &:not(:first-child):not(:last-child):not(:only-child) {
237
- @include border-radius(0);
238
-
239
- .card-img-top,
240
- .card-img-bottom,
241
- .card-header,
242
- .card-footer {
243
- @include border-radius(0);
244
- }
245
- }
246
233
  }
247
234
  }
248
235
  }
@@ -261,6 +248,8 @@
261
248
  @include media-breakpoint-up(sm) {
262
249
  column-count: $card-columns-count;
263
250
  column-gap: $card-columns-gap;
251
+ orphans: 1;
252
+ widows: 1;
264
253
 
265
254
  .card {
266
255
  display: inline-block; // Don't let them vertically span multiple columns
@@ -268,3 +257,30 @@
268
257
  }
269
258
  }
270
259
  }
260
+
261
+
262
+ //
263
+ // Accordion
264
+ //
265
+
266
+ .accordion {
267
+ overflow-anchor: none;
268
+
269
+ > .card {
270
+ overflow: hidden;
271
+
272
+ &:not(:last-of-type) {
273
+ border-bottom: 0;
274
+ @include border-bottom-radius(0);
275
+ }
276
+
277
+ &:not(:first-of-type) {
278
+ @include border-top-radius(0);
279
+ }
280
+
281
+ > .card-header {
282
+ @include border-radius(0);
283
+ margin-bottom: -$card-border-width;
284
+ }
285
+ }
286
+ }
@@ -1,22 +1,39 @@
1
- // Wrapper for the slide container and indicators
1
+ // Notes on the classes:
2
+ //
3
+ // 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
4
+ // even when their scroll action started on a carousel, but for compatibility (with Firefox)
5
+ // we're preventing all actions instead
6
+ // 2. The .carousel-item-left and .carousel-item-right is used to indicate where
7
+ // the active slide is heading.
8
+ // 3. .active.carousel-item is the current slide.
9
+ // 4. .active.carousel-item-left and .active.carousel-item-right is the current
10
+ // slide in its in-transition state. Only one of these occurs at a time.
11
+ // 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
12
+ // is the upcoming slide in transition.
13
+
2
14
  .carousel {
3
15
  position: relative;
4
16
  }
5
17
 
18
+ .carousel.pointer-event {
19
+ touch-action: pan-y;
20
+ }
21
+
6
22
  .carousel-inner {
7
23
  position: relative;
8
24
  width: 100%;
9
25
  overflow: hidden;
26
+ @include clearfix();
10
27
  }
11
28
 
12
29
  .carousel-item {
13
30
  position: relative;
14
31
  display: none;
15
- align-items: center;
32
+ float: left;
16
33
  width: 100%;
17
- @include transition($carousel-transition);
34
+ margin-right: -100%;
18
35
  backface-visibility: hidden;
19
- perspective: 1000px;
36
+ @include transition($carousel-transition);
20
37
  }
21
38
 
22
39
  .carousel-item.active,
@@ -25,37 +42,40 @@
25
42
  display: block;
26
43
  }
27
44
 
28
- .carousel-item-next,
29
- .carousel-item-prev {
30
- position: absolute;
31
- top: 0;
45
+ .carousel-item-next:not(.carousel-item-left),
46
+ .active.carousel-item-right {
47
+ transform: translateX(100%);
32
48
  }
33
49
 
34
- // CSS3 transforms when supported by the browser
35
- .carousel-item-next.carousel-item-left,
36
- .carousel-item-prev.carousel-item-right {
37
- transform: translateX(0);
38
-
39
- @supports (transform-style: preserve-3d) {
40
- transform: translate3d(0, 0, 0);
41
- }
50
+ .carousel-item-prev:not(.carousel-item-right),
51
+ .active.carousel-item-left {
52
+ transform: translateX(-100%);
42
53
  }
43
54
 
44
- .carousel-item-next,
45
- .active.carousel-item-right {
46
- transform: translateX(100%);
47
55
 
48
- @supports (transform-style: preserve-3d) {
49
- transform: translate3d(100%, 0, 0);
56
+ //
57
+ // Alternate transitions
58
+ //
59
+
60
+ .carousel-fade {
61
+ .carousel-item {
62
+ opacity: 0;
63
+ transition-property: opacity;
64
+ transform: none;
50
65
  }
51
- }
52
66
 
53
- .carousel-item-prev,
54
- .active.carousel-item-left {
55
- transform: translateX(-100%);
67
+ .carousel-item.active,
68
+ .carousel-item-next.carousel-item-left,
69
+ .carousel-item-prev.carousel-item-right {
70
+ z-index: 1;
71
+ opacity: 1;
72
+ }
56
73
 
57
- @supports (transform-style: preserve-3d) {
58
- transform: translate3d(-100%, 0, 0);
74
+ .active.carousel-item-left,
75
+ .active.carousel-item-right {
76
+ z-index: 0;
77
+ opacity: 0;
78
+ @include transition(opacity 0s $carousel-transition-duration);
59
79
  }
60
80
  }
61
81
 
@@ -69,35 +89,38 @@
69
89
  position: absolute;
70
90
  top: 0;
71
91
  bottom: 0;
92
+ z-index: 1;
72
93
  // Use flex for alignment (1-3)
73
94
  display: flex; // 1. allow flex styles
74
95
  align-items: center; // 2. vertically center contents
75
96
  justify-content: center; // 3. horizontally center contents
76
97
  width: $carousel-control-width;
98
+ padding: 0;
77
99
  color: $carousel-control-color;
78
100
  text-align: center;
101
+ background: none;
102
+ border: 0;
79
103
  opacity: $carousel-control-opacity;
80
- // We can't have a transition here because WebKit cancels the carousel
81
- // animation if you trip this while in the middle of another animation.
104
+ @include transition($carousel-control-transition);
82
105
 
83
106
  // Hover/focus state
84
- @include hover-focus {
107
+ @include hover-focus() {
85
108
  color: $carousel-control-color;
86
109
  text-decoration: none;
87
110
  outline: 0;
88
- opacity: .9;
111
+ opacity: $carousel-control-hover-opacity;
89
112
  }
90
113
  }
91
114
  .carousel-control-prev {
92
115
  left: 0;
93
116
  @if $enable-gradients {
94
- background: linear-gradient(90deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001));
117
+ background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
95
118
  }
96
119
  }
97
120
  .carousel-control-next {
98
121
  right: 0;
99
122
  @if $enable-gradients {
100
- background: linear-gradient(270deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001));
123
+ background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
101
124
  }
102
125
  }
103
126
 
@@ -107,14 +130,13 @@
107
130
  display: inline-block;
108
131
  width: $carousel-control-icon-width;
109
132
  height: $carousel-control-icon-width;
110
- background: transparent no-repeat center center;
111
- background-size: 100% 100%;
133
+ background: 50% / 100% 100% no-repeat;
112
134
  }
113
135
  .carousel-control-prev-icon {
114
- background-image: $carousel-control-prev-icon-bg;
136
+ background-image: escape-svg($carousel-control-prev-icon-bg);
115
137
  }
116
138
  .carousel-control-next-icon {
117
- background-image: $carousel-control-next-icon-bg;
139
+ background-image: escape-svg($carousel-control-next-icon-bg);
118
140
  }
119
141
 
120
142
 
@@ -126,7 +148,7 @@
126
148
  .carousel-indicators {
127
149
  position: absolute;
128
150
  right: 0;
129
- bottom: 10px;
151
+ bottom: 0;
130
152
  left: 0;
131
153
  z-index: 15;
132
154
  display: flex;
@@ -138,38 +160,25 @@
138
160
  list-style: none;
139
161
 
140
162
  li {
141
- position: relative;
163
+ box-sizing: content-box;
142
164
  flex: 0 1 auto;
143
165
  width: $carousel-indicator-width;
144
166
  height: $carousel-indicator-height;
145
167
  margin-right: $carousel-indicator-spacer;
146
168
  margin-left: $carousel-indicator-spacer;
147
169
  text-indent: -999px;
148
- background-color: rgba($carousel-indicator-active-bg, .5);
149
-
150
- // Use pseudo classes to increase the hit area by 10px on top and bottom.
151
- &::before {
152
- position: absolute;
153
- top: -10px;
154
- left: 0;
155
- display: inline-block;
156
- width: 100%;
157
- height: 10px;
158
- content: "";
159
- }
160
- &::after {
161
- position: absolute;
162
- bottom: -10px;
163
- left: 0;
164
- display: inline-block;
165
- width: 100%;
166
- height: 10px;
167
- content: "";
168
- }
170
+ cursor: pointer;
171
+ background-color: $carousel-indicator-active-bg;
172
+ background-clip: padding-box;
173
+ // Use transparent borders to increase the hit area by 10px on top and bottom.
174
+ border-top: $carousel-indicator-hit-area-height solid transparent;
175
+ border-bottom: $carousel-indicator-hit-area-height solid transparent;
176
+ opacity: .5;
177
+ @include transition($carousel-indicator-transition);
169
178
  }
170
179
 
171
180
  .active {
172
- background-color: $carousel-indicator-active-bg;
181
+ opacity: 1;
173
182
  }
174
183
  }
175
184
 
@@ -180,9 +189,9 @@
180
189
 
181
190
  .carousel-caption {
182
191
  position: absolute;
183
- right: ((100% - $carousel-caption-width) / 2);
192
+ right: (100% - $carousel-caption-width) * .5;
184
193
  bottom: 20px;
185
- left: ((100% - $carousel-caption-width) / 2);
194
+ left: (100% - $carousel-caption-width) * .5;
186
195
  z-index: 10;
187
196
  padding-top: 20px;
188
197
  padding-bottom: 20px;
@@ -1,21 +1,22 @@
1
1
  .close {
2
2
  float: right;
3
- font-size: $close-font-size;
3
+ @include font-size($close-font-size);
4
4
  font-weight: $close-font-weight;
5
5
  line-height: 1;
6
6
  color: $close-color;
7
7
  text-shadow: $close-text-shadow;
8
8
  opacity: .5;
9
9
 
10
- @include hover-focus {
10
+ // Override <a>'s hover style
11
+ @include hover() {
11
12
  color: $close-color;
12
13
  text-decoration: none;
13
- opacity: .75;
14
14
  }
15
15
 
16
- // Opinionated: add "hand" cursor to non-disabled .close elements
17
- &:not([disabled]):not(.disabled) {
18
- cursor: pointer;
16
+ &:not(:disabled):not(.disabled) {
17
+ @include hover-focus() {
18
+ opacity: .75;
19
+ }
19
20
  }
20
21
  }
21
22
 
@@ -24,11 +25,16 @@
24
25
  // If you want the anchor version, it requires `href="#"`.
25
26
  // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
26
27
 
27
- // stylelint-disable property-no-vendor-prefix, selector-no-qualifying-type
28
+ // stylelint-disable-next-line selector-no-qualifying-type
28
29
  button.close {
29
30
  padding: 0;
30
31
  background-color: transparent;
31
32
  border: 0;
32
- -webkit-appearance: none;
33
33
  }
34
- // stylelint-enable
34
+
35
+ // Future-proof disabling of clicks on `<a>` elements
36
+
37
+ // stylelint-disable-next-line selector-no-qualifying-type
38
+ a.close.disabled {
39
+ pointer-events: none;
40
+ }