// Helper function for the normalize() mixin. @function _normalize-include($section, $exclude: null) { // Initialize the global variables needed by this function. @if not global_variable_exists(_normalize-include) { $_normalize-include: () !global; $_normalize-exclude: () !global; } // Since we are given 2 parameters, set the global variables. @if $exclude != null { $include: $section; // Sass doesn't have static variables, so the work-around is to stuff these // values into global variables so we can access them in future calls. $_normalize-include: if(type-of($include) == 'list', $include, ($include)) !global; $_normalize-exclude: if(type-of($exclude) == 'list', $exclude, ($exclude)) !global; @return true; } // Check if $section is in the $include list. @if index($_normalize-include, $section) { @return true; } // If $include is set to (all), make sure $section is not in $exclude. @else if not index($_normalize-exclude, $section) and index($_normalize-include, all) { @return true; } @return false; } @mixin normalize($include: (all), $exclude: ()) { // Initialize the helper function by passing it this mixin's parameters. $init: _normalize-include($include, $exclude); // If we've customized any font variables, we'll need extra properties. @if $base-line-height != 24px or $base-unit != 'em' or $h2-font-size != 1.5 * $base-font-size or $h3-font-size != 1.17 * $base-font-size or $h4-font-size != 1 * $base-font-size or $h5-font-size != 0.83 * $base-font-size or $h6-font-size != 0.67 * $base-font-size { $normalize-vertical-rhythm: true !global; } /*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ @if _normalize-include(document) { /* Document ========================================================================== */ /** * 1. Correct the line height in all browsers. * 2. Prevent adjustments of font size after orientation changes in * IE on Windows Phone and in iOS. */ html { @if $base-font-family { /* Change the default font family in all browsers (opinionated). */ font-family: $base-font-family; } @if $base-font-size != 16px or $normalize-vertical-rhythm { // Correct old browser bug that prevented accessible resizing of text // when root font-size is set with px or em. font-size: ($base-font-size / 16px) * 100%; } @if $normalize-vertical-rhythm { line-height: ($base-line-height / $base-font-size) * 1em; /* 1 */ } @else { line-height: 1.15; /* 1 */ } -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } } @if _normalize-include(sections) { /* Sections ========================================================================== */ /** * Remove the margin in all browsers (opinionated). */ body { margin: 0; } /** * Add the correct display in IE 9-. */ article, aside, footer, header, nav, section { display: block; } /** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */ h1 { @include normalize-font-size($h1-font-size); @if $normalize-vertical-rhythm { @include normalize-line-height($h1-font-size); } @if $normalize-vertical-rhythm { /* Set 1 unit of vertical rhythm on the top and bottom margins. */ @include normalize-margin(1 0, $h1-font-size); } @else { margin: 0.67em 0; } } @if $normalize-vertical-rhythm { h2 { @include normalize-font-size($h2-font-size); @include normalize-line-height($h2-font-size); @include normalize-margin(1 0, $h2-font-size); } h3 { @include normalize-font-size($h3-font-size); @include normalize-line-height($h3-font-size); @include normalize-margin(1 0, $h3-font-size); } h4 { @include normalize-font-size($h4-font-size); @include normalize-line-height($h4-font-size); @include normalize-margin(1 0, $h4-font-size); } h5 { @include normalize-font-size($h5-font-size); @include normalize-line-height($h5-font-size); @include normalize-margin(1 0, $h5-font-size); } h6 { @include normalize-font-size($h6-font-size); @include normalize-line-height($h6-font-size); @include normalize-margin(1 0, $h6-font-size); } } } @if _normalize-include(grouping) { /* Grouping content ========================================================================== */ @if $normalize-vertical-rhythm { /** * Set 1 unit of vertical rhythm on the top and bottom margin. */ blockquote { @include normalize-margin(1 $indent-amount); } dl, ol, ul { @include normalize-margin(1 0); } /** * Turn off margins on nested lists. */ ol, ul { ol, ul { margin: 0; } } dd { margin: 0 0 0 $indent-amount; } ol, ul { padding: 0 0 0 $indent-amount; } } /** * Add the correct display in IE 9-. */ figcaption, figure { display: block; } /** * Add the correct margin in IE 8. */ figure { @if $normalize-vertical-rhythm { @include normalize-margin(1 $indent-amount); } @else { margin: 1em $indent-amount; } } /** * 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 */ } /** * Add the correct display in IE. */ main { display: block; } @if $normalize-vertical-rhythm { /** * Set 1 unit of vertical rhythm on the top and bottom margin. */ p, pre { @include normalize-margin(1 0); } } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ pre { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } } @if _normalize-include(links) { /* Links ========================================================================== */ /** * 1. Remove the gray background on active links in IE 10. * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */ a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */ } } @if _normalize-include(text) { /* Text-level semantics ========================================================================== */ /** * 1. Remove the bottom border in Chrome 57- and Firefox 39-. * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ } /** * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ b, strong { font-weight: inherit; } /** * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { font-weight: bolder; } /** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */ code, kbd, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } /** * Add the correct font style in Android 4.3-. */ dfn { font-style: italic; } /** * Add the correct background and color in IE 9-. */ mark { background-color: #ff0; color: #000; } /** * Add the correct font size in all browsers. */ small { font-size: 80%; } /** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } } @if _normalize-include(embedded) { /* Embedded content ========================================================================== */ /** * Add the correct display in IE 9-. */ audio, video { display: inline-block; } /** * Add the correct display in iOS 4-7. */ audio:not([controls]) { display: none; height: 0; } /** * Remove the border on images inside links in IE 10-. */ img { border-style: none; } /** * Hide the overflow in IE. */ svg:not(:root) { overflow: hidden; } } @if _normalize-include(forms) { /* Forms ========================================================================== */ /** * 1. Change the font styles in all browsers (opinionated). * 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: if($base-font-family, $base-font-family, sans-serif); /* 1 */ font-size: 100%; /* 1 */ @if $normalize-vertical-rhythm { line-height: ($base-line-height / $base-font-size) * 1em; /* 1 */ } @else { line-height: 1.15; /* 1 */ } margin: 0; /* 2 */ } /** * Show the overflow in IE. */ button { overflow: visible; } /** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */ button, select { /* 1 */ text-transform: none; } /** * 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 */ } button, [type="button"], [type="reset"], [type="submit"] { /** * Remove the inner border and padding in Firefox. */ &::-moz-focus-inner { border-style: none; padding: 0; } /** * Restore the focus styles unset by the previous rule. */ &:-moz-focusring { outline: 1px dotted ButtonText; } } /** * Show the overflow in Edge. */ input { overflow: visible; } /** * 1. Add the correct box sizing in IE 10-. * 2. Remove the padding in IE 10-. */ [type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * 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; } /** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */ [type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ /** * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */ &::-webkit-search-cancel-button, &::-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 { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /** * Correct the padding in Firefox. */ fieldset { padding: 0.35em 0.75em 0.625em; } /** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */ legend { box-sizing: border-box; /* 1 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ color: inherit; /* 2 */ white-space: normal; /* 1 */ } /** * 1. Add the correct display in IE 9-. * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */ progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** * Remove the default vertical scrollbar in IE. */ textarea { overflow: auto; } } @if _normalize-include(interactive) { /* Interactive ========================================================================== */ /* * Add the correct display in Edge, IE, and Firefox. */ details { display: block; } /* * Add the correct display in all browsers. */ summary { display: list-item; } /* * Add the correct display in IE 9-. */ menu { display: block; @if $normalize-vertical-rhythm { /* * 1. Set 1 unit of vertical rhythm on the top and bottom margin. * 2. Set consistent space for the list style image. */ @include normalize-margin(1 0); /* 1 */ padding: 0 0 0 $indent-amount; /* 2 */ /** * Turn off margins on nested lists. */ menu &, ol &, ul & { margin: 0; } } } } @if _normalize-include(scripting) { /* Scripting ========================================================================== */ /** * Add the correct display in IE 9-. */ canvas { display: inline-block; } /** * Add the correct display in IE. */ template { display: none; } } @if _normalize-include(hidden) { /* Hidden ========================================================================== */ /** * Add the correct display in IE 10-. */ [hidden] { display: none; } } }