_reboot.scss 11.2 KB
Newer Older
1
// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
Mark Otto's avatar
Mark Otto committed
2

Mark Otto's avatar
Mark Otto committed
3
// Reboot
4
//
5
6
7
8
// Normalization of HTML elements, manually forked from Normalize.css to remove
// styles targeting irrelevant browsers while applying new styles.
//
// Normalize is licensed MIT. https://github.com/necolas/normalize.css
Jacob Thornton's avatar
Jacob Thornton committed
9

10

11
// Document
Mark Otto's avatar
Mark Otto committed
12
//
13
14
15
16
17
18
19
// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.
// 2. Change the default font family in all browsers.
// 3. Correct the line height in all browsers.
// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.
// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so
//    we force a non-overlapping, non-auto-hiding scrollbar to counteract.
// 6. Change the default tap highlight to be completely transparent in iOS.
20

21
22
23
*,
*::before,
*::after {
24
  box-sizing: border-box; // 1
25
26
27
}

html {
28
29
30
  font-family: sans-serif; // 2
  line-height: 1.15; // 3
  -webkit-text-size-adjust: 100%; // 4
31
  -ms-text-size-adjust: 100%; // 4
32
  -ms-overflow-style: scrollbar; // 5
33
  -webkit-tap-highlight-color: rgba($black, 0); // 6
Chris Rebert's avatar
Chris Rebert committed
34
}
35

36
// IE10+ doesn't honor `<meta name="viewport">` in some cases.
37
@at-root {
38
39
40
  @-ms-viewport {
    width: device-width;
  }
41
}
42

43
// stylelint-disable selector-list-comma-newline-after
44
// Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers)
45
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
46
47
  display: block;
}
48
// stylelint-enable selector-list-comma-newline-after
49

50
// Body
51
//
52
53
// 1. Remove the margin in all browsers.
// 2. As a best practice, apply a default `background-color`.
54
55
// 3. Set an explicit initial text-align value so that we can later use the
//    the `inherit` value on things like `<th>` elements.
56

Jacob Thornton's avatar
Jacob Thornton committed
57
body {
58
  margin: 0; // 1
Mark Otto's avatar
Mark Otto committed
59
60
  font-family: $font-family-base;
  font-size: $font-size-base;
tomhorvat's avatar
tomhorvat committed
61
  font-weight: $font-weight-base;
Mark Otto's avatar
Mark Otto committed
62
  line-height: $line-height-base;
63
  color: $body-color;
64
  text-align: left; // 3
65
  background-color: $body-bg; // 2
66
67
}

Mark Otto's avatar
Mark Otto committed
68
69
70
71
72
73
// Suppress the focus outline on elements that cannot be accessed via keyboard.
// This prevents an unwanted focus outline from appearing around elements that
// might still respond to pointer events.
//
// Credit: https://github.com/suitcss/base
[tabindex="-1"]:focus {
74
  outline: 0 !important;
Mark Otto's avatar
Mark Otto committed
75
76
}

77

78
79
80
81
82
83
84
85
86
87
88
89
// Content grouping
//
// 1. Add the correct box sizing in Firefox.
// 2. Show the overflow in Edge and IE.

hr {
  box-sizing: content-box; // 1
  height: 0; // 1
  overflow: visible; // 2
}


90
91
92
93
94
95
96
97
//
// Typography
//

// Remove top margins from headings
//
// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top
// margin for easier control within type scales as it avoids margin collapsing.
98
// stylelint-disable selector-list-comma-newline-after
99
100
h1, h2, h3, h4, h5, h6 {
  margin-top: 0;
101
  margin-bottom: $headings-margin-bottom;
102
}
103
// stylelint-enable selector-list-comma-newline-after
104
105
106
107
108
109
110

// Reset margins on paragraphs
//
// Similarly, the top margin on `<p>`s get reset. However, we also reset the
// bottom margin to use `rem` units instead of `em`.
p {
  margin-top: 0;
111
  margin-bottom: $paragraph-margin-bottom;
112
113
}

Mark Otto's avatar
Mark Otto committed
114
// Abbreviations
115
116
117
118
119
120
//
// 1. Remove the bottom border in Firefox 39-.
// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
// 3. Add explicit cursor to indicate changed behavior.
// 4. Duplicate behavior to the data-* attribute for our tooltip plugin

121
abbr[title],
122
123
124
125
126
abbr[data-original-title] { // 4
  text-decoration: underline; // 2
  text-decoration: underline dotted; // 2
  cursor: help; // 3
  border-bottom: 0; // 1
127
128
129
130
131
}

address {
  margin-bottom: 1rem;
  font-style: normal;
Mark Otto's avatar
Mark Otto committed
132
  line-height: inherit;
Jacob Thornton's avatar
Jacob Thornton committed
133
134
}

135
136
137
138
139
140
ol,
ul,
dl {
  margin-top: 0;
  margin-bottom: 1rem;
}
141

142
143
144
145
146
147
148
149
ol ol,
ul ul,
ol ul,
ul ol {
  margin-bottom: 0;
}

dt {
150
  font-weight: $dt-font-weight;
151
152
153
154
}

dd {
  margin-bottom: .5rem;
155
  margin-left: 0; // Undo browser default
156
157
158
159
160
161
}

blockquote {
  margin: 0 0 1rem;
}

162
163
164
165
dfn {
  font-style: italic; // Add the correct font style in Android 4.3-
}

166
// stylelint-disable font-weight-notation
167
168
169
170
b,
strong {
  font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari
}
171
// stylelint-enable font-weight-notation
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192

small {
  font-size: 80%; // Add the correct font size in all browsers
}

//
// Prevent `sub` and `sup` elements from affecting the line height in
// all browsers.
//

sub,
sup {
  position: relative;
  font-size: 75%;
  line-height: 0;
  vertical-align: baseline;
}

sub { bottom: -.25em; }
sup { top: -.5em; }

193
194

//
195
// Links
196
//
Jacob Thornton's avatar
Jacob Thornton committed
197
198

a {
Mark Otto's avatar
Mark Otto committed
199
  color: $link-color;
200
  text-decoration: $link-decoration;
201
202
  background-color: transparent; // Remove the gray background on active links in IE 10.
  -webkit-text-decoration-skip: objects; // Remove gaps in links underline in iOS 8+ and Safari 8+.
Zlatan Vasović's avatar
Zlatan Vasović committed
203

Mark Otto's avatar
Mark Otto committed
204
  @include hover {
Mark Otto's avatar
Mark Otto committed
205
206
    color: $link-hover-color;
    text-decoration: $link-hover-decoration;
Zlatan Vasović's avatar
Zlatan Vasović committed
207
  }
Mark Otto's avatar
Mark Otto committed
208
}
209

210
211
// And undo these styles for placeholder links/named anchors (without href)
// which have not been made explicitly keyboard-focusable (without tabindex).
212
213
214
// It would be more straightforward to just use a[href] in previous block, but that
// causes specificity issues in many other styles that are too complex to fix.
// See https://github.com/twbs/bootstrap/issues/19402
215

216
a:not([href]):not([tabindex]) {
217
218
219
220
221
222
223
224
225
  color: inherit;
  text-decoration: none;

  @include hover-focus {
    color: inherit;
    text-decoration: none;
  }

  &:focus {
226
    outline: 0;
227
228
229
  }
}

230

231
232
233
234
//
// Code
//

235
236
237
238
pre,
code,
kbd,
samp {
239
  font-family: $font-family-monospace;
240
241
242
  font-size: 1em; // Correct the odd `em` font sizing in all browsers.
}

243
244
245
246
247
pre {
  // Remove browser default top margin
  margin-top: 0;
  // Reset browser default of `1em` to use `rem`s
  margin-bottom: 1rem;
248
  // Don't allow content to break outside
Mark Otto's avatar
Mark Otto committed
249
  overflow: auto;
250
251
252
  // We have @viewport set which causes scrollbars to overlap content in IE11 and Edge, so
  // we force a non-overlapping, non-auto-hiding scrollbar to counteract.
  -ms-overflow-style: scrollbar;
253
254
255
256
257
258
259
260
}


//
// Figures
//

figure {
261
  // Apply a consistent margin strategy (matches our type styles).
262
263
264
265
266
  margin: 0 0 1rem;
}


//
267
// Images and content
268
//
269

Mark Otto's avatar
Mark Otto committed
270
img {
Mark Otto's avatar
Mark Otto committed
271
  vertical-align: middle;
272
273
274
275
276
  border-style: none; // Remove the border on images inside links in IE 10-.
}

svg:not(:root) {
  overflow: hidden; // Hide the overflow in IE
277
  vertical-align: middle;
Mark Otto's avatar
Mark Otto committed
278
279
}

280

281
282
283
284
285
//
// Tables
//

table {
286
  border-collapse: collapse; // Prevent double borders
287
288
289
290
291
}

caption {
  padding-top: $table-cell-padding;
  padding-bottom: $table-cell-padding;
292
  color: $table-caption-color;
293
  text-align: left;
294
  caption-side: bottom;
295
296
297
}

th {
298
299
300
  // Matches default `<td>` alignment by inheriting from the `<body>`, or the
  // closest parent with a set `text-align`.
  text-align: inherit;
301
302
303
304
305
306
307
308
}


//
// Forms
//

label {
309
  // Allow labels to use `margin` for spacing.
310
  display: inline-block;
311
  margin-bottom: $label-margin-bottom;
312
313
}

314
315
316
317
318
319
320
// Remove the default `border-radius` that macOS Chrome adds.
//
// Details at https://github.com/twbs/bootstrap/issues/24093
button {
  border-radius: 0;
}

321
322
323
324
325
326
327
328
329
// Work around a Firefox/IE bug where the transparent `button` background
// results in a loss of the default `button` focus styles.
//
// Credit: https://github.com/suitcss/base/
button:focus {
  outline: 1px dotted;
  outline: 5px auto -webkit-focus-ring-color;
}

330
331
332
input,
button,
select,
333
optgroup,
334
textarea {
335
336
337
  margin: 0; // Remove the margin in Firefox and Safari
  font-family: inherit;
  font-size: inherit;
338
339
340
  line-height: inherit;
}

341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
button,
input {
  overflow: visible; // Show the overflow in Edge
}

button,
select {
  text-transform: none; // Remove the inheritance of text transform in Firefox
}

// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
//    controls in Android 4.
// 2. Correct the inability to style clickable types in iOS and Safari.
button,
html [type="button"], // 1
[type="reset"],
[type="submit"] {
  -webkit-appearance: button; // 2
}

// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  padding: 0;
  border-style: none;
}

Mark Otto's avatar
Mark Otto committed
370
371
input[type="radio"],
input[type="checkbox"] {
372
373
  box-sizing: border-box; // 1. Add the correct box sizing in IE 10-
  padding: 0; // 2. Remove the padding in IE 10-
Mark Otto's avatar
Mark Otto committed
374
375
376
}


377
378
379
380
381
382
383
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="month"] {
  // Remove the default appearance of temporal inputs to avoid a Mobile Safari
  // bug where setting a custom line-height prevents text from being vertically
  // centered within the input.
384
385
  // See https://bugs.webkit.org/show_bug.cgi?id=139848
  // and https://github.com/twbs/bootstrap/issues/11266
386
387
388
  -webkit-appearance: listbox;
}

389
textarea {
390
  overflow: auto; // Remove the default vertical scrollbar in IE.
391
392
393
394
395
  // Textareas should really only resize vertically so they don't break their (horizontal) containers.
  resize: vertical;
}

fieldset {
396
397
398
399
400
  // Browsers set a default `min-width: min-content;` on fieldsets,
  // unlike e.g. `<div>`s, which have `min-width: 0;` by default.
  // So we reset that to ensure fieldsets behave more like a standard block element.
  // See https://github.com/twbs/bootstrap/issues/12359
  // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements
401
  min-width: 0;
402
403
404
405
  // Reset the default outline behavior of fieldsets so they don't affect page layout.
  padding: 0;
  margin: 0;
  border: 0;
406
407
}

408
409
// 1. Correct the text wrapping in Edge and IE.
// 2. Correct the color inheritance from `fieldset` elements in IE.
410
411
412
legend {
  display: block;
  width: 100%;
413
  max-width: 100%; // 1
414
415
416
417
  padding: 0;
  margin-bottom: .5rem;
  font-size: 1.5rem;
  line-height: inherit;
418
419
420
421
422
423
424
425
426
427
428
429
  color: inherit; // 2
  white-space: normal; // 1
}

progress {
  vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.
}

// Correct the cursor style of increment and decrement buttons in Chrome.
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
430
431
}

432
[type="search"] {
433
434
435
436
  // This overrides the extra rounded corners on search inputs in iOS so that our
  // `.form-control` class can properly style them. Note that this cannot simply
  // be added to `.form-control` as it's not specific enough. For details, see
  // https://github.com/twbs/bootstrap/issues/11586.
437
  outline-offset: -2px; // 2. Correct the outline style in Safari.
438
  -webkit-appearance: none;
439
440
}

441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
//
// Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
//

[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

//
// 1. Correct the inability to style clickable types in iOS and Safari.
// 2. Change font properties to `inherit` in Safari.
//

::-webkit-file-upload-button {
  font: inherit; // 2
  -webkit-appearance: button; // 1
}

//
// Correct element displays
//

464
output {
465
  display: inline-block;
466
467
468
469
}

summary {
  display: list-item; // Add the correct display in all browsers
470
  cursor: pointer;
471
472
473
474
}

template {
  display: none; // Add the correct display in IE
475
}
476
477

// Always hide an element with the `hidden` HTML attribute (from PureCSS).
478
// Needed for proper display in IE 10-.
479
480
481
[hidden] {
  display: none !important;
}