_reboot.scss 11.3 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
// stylelint-disable font-family-no-duplicate-names
236
237
238
239
240
241
242
pre,
code,
kbd,
samp {
  font-family: monospace, monospace; // Correct the inheritance and scaling of font size in all browsers.
  font-size: 1em; // Correct the odd `em` font sizing in all browsers.
}
243
// stylelint-enable font-family-no-duplicate-names
244

245
246
247
248
249
pre {
  // Remove browser default top margin
  margin-top: 0;
  // Reset browser default of `1em` to use `rem`s
  margin-bottom: 1rem;
250
  // Don't allow content to break outside
Mark Otto's avatar
Mark Otto committed
251
  overflow: auto;
252
253
254
  // 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;
255
256
257
258
259
260
261
262
}


//
// Figures
//

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


//
269
// Images and content
270
//
271

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

svg:not(:root) {
  overflow: hidden; // Hide the overflow in IE
Mark Otto's avatar
Mark Otto committed
279
280
}

281

282
283
284
285
286
//
// Tables
//

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

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

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


//
// Forms
//

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

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

322
323
324
325
326
327
328
329
330
// 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;
}

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

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
370
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
371
372
input[type="radio"],
input[type="checkbox"] {
373
374
  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
375
376
377
}


378
379
380
381
382
383
384
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.
385
386
  // See https://bugs.webkit.org/show_bug.cgi?id=139848
  // and https://github.com/twbs/bootstrap/issues/11266
387
388
389
  -webkit-appearance: listbox;
}

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

fieldset {
397
398
399
400
401
  // 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
402
  min-width: 0;
403
404
405
406
  // Reset the default outline behavior of fieldsets so they don't affect page layout.
  padding: 0;
  margin: 0;
  border: 0;
407
408
}

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

433
[type="search"] {
434
435
436
437
  // 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.
438
  outline-offset: -2px; // 2. Correct the outline style in Safari.
439
  -webkit-appearance: none;
440
441
}

442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
//
// 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
//

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

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

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

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