_reboot.scss 11 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
// Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers)
Martijn Cuppens's avatar
Martijn Cuppens committed
44
// stylelint-disable-next-line selector-list-comma-newline-after
45
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
46
47
  display: block;
}
48

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

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

Mark Otto's avatar
Mark Otto committed
67
68
69
70
71
72
// 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 {
73
  outline: 0 !important;
Mark Otto's avatar
Mark Otto committed
74
75
}

76

77
78
79
80
81
82
83
84
85
86
87
88
// 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
}


89
90
91
92
93
94
95
96
//
// 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.
Martijn Cuppens's avatar
Martijn Cuppens committed
97
// stylelint-disable-next-line selector-list-comma-newline-after
98
99
h1, h2, h3, h4, h5, h6 {
  margin-top: 0;
100
  margin-bottom: $headings-margin-bottom;
101
102
103
104
105
106
107
108
}

// 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;
109
  margin-bottom: $paragraph-margin-bottom;
110
111
}

Mark Otto's avatar
Mark Otto committed
112
// Abbreviations
113
114
115
116
117
118
//
// 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

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

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

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

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

dt {
148
  font-weight: $dt-font-weight;
149
150
151
152
}

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

blockquote {
  margin: 0 0 1rem;
}

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
dfn {
  font-style: italic; // Add the correct font style in Android 4.3-
}

b,
strong {
  font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari
}

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; }

189
190

//
191
// Links
192
//
Jacob Thornton's avatar
Jacob Thornton committed
193
194

a {
Mark Otto's avatar
Mark Otto committed
195
  color: $link-color;
196
  text-decoration: $link-decoration;
197
  background-color: transparent; // Remove the gray background on active links in IE 10.
Zlatan Vasović's avatar
Zlatan Vasović committed
198

Mark Otto's avatar
Mark Otto committed
199
  @include hover {
Mark Otto's avatar
Mark Otto committed
200
201
    color: $link-hover-color;
    text-decoration: $link-hover-decoration;
Zlatan Vasović's avatar
Zlatan Vasović committed
202
  }
Mark Otto's avatar
Mark Otto committed
203
}
204

205
206
// And undo these styles for placeholder links/named anchors (without href)
// which have not been made explicitly keyboard-focusable (without tabindex).
207
208
209
// 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
210

211
a:not([href]):not([tabindex]) {
212
213
214
215
216
217
218
219
220
  color: inherit;
  text-decoration: none;

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

  &:focus {
221
    outline: 0;
222
223
224
  }
}

225

226
227
228
229
//
// Code
//

230
231
232
233
pre,
code,
kbd,
samp {
234
  font-family: $font-family-monospace;
235
236
237
  font-size: 1em; // Correct the odd `em` font sizing in all browsers.
}

238
239
240
241
242
pre {
  // Remove browser default top margin
  margin-top: 0;
  // Reset browser default of `1em` to use `rem`s
  margin-bottom: 1rem;
243
  // Don't allow content to break outside
Mark Otto's avatar
Mark Otto committed
244
  overflow: auto;
245
246
247
  // 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;
248
249
250
251
252
253
254
255
}


//
// Figures
//

figure {
256
  // Apply a consistent margin strategy (matches our type styles).
257
258
259
260
261
  margin: 0 0 1rem;
}


//
262
// Images and content
263
//
264

Mark Otto's avatar
Mark Otto committed
265
img {
Mark Otto's avatar
Mark Otto committed
266
  vertical-align: middle;
267
268
269
  border-style: none; // Remove the border on images inside links in IE 10-.
}

270
svg {
271
272
273
  // Workaround for the SVG overflow bug in IE10/11 is still required.
  // See https://github.com/twbs/bootstrap/issues/26878
  overflow: hidden;
ysds's avatar
ysds committed
274
  vertical-align: middle;
Mark Otto's avatar
Mark Otto committed
275
276
}

277

278
279
280
281
282
//
// Tables
//

table {
283
  border-collapse: collapse; // Prevent double borders
284
285
286
287
288
}

caption {
  padding-top: $table-cell-padding;
  padding-bottom: $table-cell-padding;
289
  color: $table-caption-color;
290
  text-align: left;
291
  caption-side: bottom;
292
293
294
}

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


//
// Forms
//

label {
306
  // Allow labels to use `margin` for spacing.
307
  display: inline-block;
308
  margin-bottom: $label-margin-bottom;
309
310
}

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

318
319
320
321
322
323
324
325
326
// 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;
}

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

338
339
340
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
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
367
368
input[type="radio"],
input[type="checkbox"] {
369
370
  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
371
372
373
}


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

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

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

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

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

438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
//
// 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
//

461
output {
462
  display: inline-block;
463
464
465
466
}

summary {
  display: list-item; // Add the correct display in all browsers
467
  cursor: pointer;
468
469
470
471
}

template {
  display: none; // Add the correct display in IE
472
}
473
474

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