Initial commit

This commit is contained in:
Samuel Philipp 2016-10-28 19:33:25 +02:00
commit b953a6c158
326 changed files with 76065 additions and 0 deletions

View file

@ -0,0 +1,638 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// scss-lint:disable ColorVariable, QualifyingElement, VendorPrefix
////
/// @group global
////
/// Font size attribute applied to `<html>` and `<body>`. We use 100% by default so the value is inherited from the user's browser settings.
/// @type Number
$global-font-size: 100% !default;
/// Global width of your site. Used by the grid to determine row width.
/// @type Number
$global-width: rem-calc(1200) !default;
/// Default line height for all type. `$global-lineheight` is 24px while `$global-font-size` is 16px
/// @type Number
$global-lineheight: 1.5 !default;
/// Colors used for buttons, callouts, links, etc. There must always be a color called `primary`.
/// @type Map
$foundation-palette: (
primary: #2199e8,
secondary: #777,
success: #3adb76,
warning: #ffae00,
alert: #ec5840,
) !default;
/// Color used for light gray UI items.
/// @type Color
$light-gray: #e6e6e6 !default;
/// Color used for medium gray UI items.
/// @type Color
$medium-gray: #cacaca !default;
/// Color used for dark gray UI items.
/// @type Color
$dark-gray: #8a8a8a !default;
/// Color used for black ui items.
/// @type Color
$black: #0a0a0a !default;
/// Color used for white ui items.
/// @type Color
$white: #fefefe !default;
/// Background color of the body.
/// @type Color
$body-background: $white !default;
/// Text color of the body.
/// @type Color
$body-font-color: $black !default;
/// Font stack of the body.
/// @type List
$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif !default;
/// Set to `true` to enable antialiased type, using the `-webkit-font-smoothing` and `-moz-osx-font-smoothing` CSS properties.
/// @type Boolean
$body-antialiased: true !default;
/// Global value used for margin on components.
/// @type Number
$global-margin: 1rem !default;
/// Global value used for padding on components.
/// @type Number
$global-padding: 1rem !default;
/// Global font weight used for normal type.
/// @type Keyword | Number
$global-weight-normal: normal !default;
/// Global font weight used for bold type.
/// @type Keyword | Number
$global-weight-bold: bold !default;
/// Global value used for all elements that have a border radius.
/// @type Number
$global-radius: 0 !default;
/// Sets the text direction of the CSS. Can be either `ltr` or `rtl`.
/// @type Keyword
$global-text-direction: ltr !default;
/// Enables flexbox for components that support it.
/// @type Boolean
$global-flexbox: false !default;
@if not map-has-key($foundation-palette, primary) {
@error 'In $foundation-palette, you must have a color named "primary".';
}
// Internal variables used for text direction
$global-left: if($global-text-direction == rtl, right, left);
$global-right: if($global-text-direction == rtl, left, right);
// Internal variables used for colors
$primary-color: map-get($foundation-palette, primary);
$secondary-color: map-get($foundation-palette, secondary);
$success-color: map-get($foundation-palette, success);
$warning-color: map-get($foundation-palette, warning);
$alert-color: map-get($foundation-palette, alert);
// Remove this in 6.3
$-zf-menu-icon-imported: false;
$-zf-flex-classes-imported: false;
@mixin foundation-global-styles {
@include -zf-normalize;
// These styles are applied to a <meta> tag, which is read by the Foundation JavaScript
.foundation-mq {
font-family: '#{-zf-bp-serialize($breakpoints)}';
}
html {
font-size: $global-font-size;
box-sizing: border-box;
}
// Set box-sizing globally to handle padding and border widths
*,
*::before,
*::after {
box-sizing: inherit;
}
// Default body styles
body {
padding: 0;
margin: 0;
font-family: $body-font-family;
font-weight: $global-weight-normal;
line-height: $global-lineheight;
color: $body-font-color;
background: $body-background;
@if ($body-antialiased) {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
}
img {
// Grid defaults to get images and embeds to work properly
max-width: 100%;
height: auto;
-ms-interpolation-mode: bicubic;
// Get rid of gap under images by making them display: inline-block; by default
display: inline-block;
vertical-align: middle;
}
// Make sure textarea takes on height automatically
textarea {
height: auto;
min-height: 50px;
border-radius: $global-radius;
}
// Make select elements are 100% width by default
select {
width: 100%;
border-radius: $global-radius;
}
// Styles Google Maps and MapQuest embeds properly
// scss-lint:disable IdSelector
#map_canvas,
.map_canvas,
.mqa-display {
img,
embed,
object {
max-width: none !important;
}
}
// Reset <button> styles created by most browsers
button {
@include disable-mouse-outline;
-webkit-appearance: none;
-moz-appearance: none;
background: transparent;
padding: 0;
border: 0;
border-radius: $global-radius;
line-height: 1;
}
// Internal classes to show/hide elements in JavaScript
.is-visible {
display: block !important;
}
.is-hidden {
display: none !important;
}
}
/// Loads normalize.css.
/// @access private
@mixin -zf-normalize {
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
/**
* 1. Set default font family to sans-serif.
* 2. Prevent iOS and IE text size adjust after device orientation change,
* without disabling user zoom.
*/
html {
font-family: sans-serif; /* 1 */
-ms-text-size-adjust: 100%; /* 2 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/**
* Remove default margin.
*/
body {
margin: 0;
}
/* HTML5 display definitions
========================================================================== */
/**
* Correct `block` display not defined for any HTML5 element in IE 8/9.
* Correct `block` display not defined for `details` or `summary` in IE 10/11
* and Firefox.
* Correct `block` display not defined for `main` in IE 11.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
/**
* 1. Correct `inline-block` display not defined in IE 8/9.
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
*/
audio,
canvas,
progress,
video {
display: inline-block; /* 1 */
vertical-align: baseline; /* 2 */
}
/**
* Prevent modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Address `[hidden]` styling not present in IE 8/9/10.
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
*/
[hidden],
template {
display: none;
}
/* Links
========================================================================== */
/**
* Remove the gray background color from active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* Improve readability of focused elements when they are also in an
* active/hover state.
*/
a:active,
a:hover {
outline: 0;
}
/* Text-level semantics
========================================================================== */
/**
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/**
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
*/
b,
strong {
font-weight: bold;
}
/**
* Address styling not present in Safari and Chrome.
*/
dfn {
font-style: italic;
}
/**
* Address variable `h1` font-size and margin within `section` and `article`
* contexts in Firefox 4+, Safari, and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/**
* Address styling not present in IE 8/9.
*/
mark {
background: #ff0;
color: #000;
}
/**
* Address inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* Embedded content
========================================================================== */
/**
* Remove border when inside `a` element in IE 8/9/10.
*/
img {
border: 0;
}
/**
* Correct overflow not hidden in IE 9/10/11.
*/
svg:not(:root) {
overflow: hidden;
}
/* Grouping content
========================================================================== */
/**
* Address margin not present in IE 8/9 and Safari.
*/
figure {
margin: 1em 40px;
}
/**
* Address differences between Firefox and other browsers.
*/
hr {
box-sizing: content-box;
height: 0;
}
/**
* Contain overflow in all browsers.
*/
pre {
overflow: auto;
}
/**
* Address odd `em`-unit font size rendering in all browsers.
*/
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
/* Forms
========================================================================== */
/**
* Known limitation: by default, Chrome and Safari on OS X allow very limited
* styling of `select`, unless a `border` property is set.
*/
/**
* 1. Correct color not being inherited.
* Known issue: affects color of disabled elements.
* 2. Correct font properties not being inherited.
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
*/
button,
input,
optgroup,
select,
textarea {
color: inherit; /* 1 */
font: inherit; /* 2 */
margin: 0; /* 3 */
}
/**
* Address `overflow` set to `hidden` in IE 8/9/10/11.
*/
button {
overflow: visible;
}
/**
* Address inconsistent `text-transform` inheritance for `button` and `select`.
* All other form control elements do not inherit `text-transform` values.
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
* Correct `select` style inheritance in Firefox.
*/
button,
select {
text-transform: none;
}
/**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Correct inability to style clickable `input` types in iOS.
* 3. Improve usability and consistency of cursor style between image-type
* `input` and others.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
}
/**
* Re-set default cursor for disabled elements.
*/
button[disabled],
html input[disabled] {
cursor: not-allowed;
}
/**
* Remove inner padding and border in Firefox 4+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
input {
line-height: normal;
}
/**
* It's recommended that you don't attempt to style these elements.
* Firefox's implementation doesn't respect box-sizing, padding, or width.
*
* 1. Address box sizing set to `content-box` in IE 8/9/10.
* 2. Remove excess padding in IE 8/9/10.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
* `font-size` values of the `input`, it causes the cursor style of the
* decrement button to change from `default` to `text`.
*/
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
box-sizing: content-box; /* 2 */
}
/**
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
* Safari (but not Chrome) clips the cancel button when the search input has
* padding (and `textfield` appearance).
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* Define consistent border, margin, and padding.
* [NOTE] We don't enable this ruleset in Foundation, because we want the <fieldset> element to have plain styling.
*/
/* fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
} */
/**
* 1. Correct `color` not being inherited in IE 8/9/10/11.
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
*/
legend {
border: 0; /* 1 */
padding: 0; /* 2 */
}
/**
* Remove default vertical scrollbar in IE 8/9/10/11.
*/
textarea {
overflow: auto;
}
/**
* Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/
optgroup {
font-weight: bold;
}
/* Tables
========================================================================== */
/**
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
}

View file

@ -0,0 +1,32 @@
////
/// @group accordion-menu
////
/// Sets if accordion menus have the default arrow styles.
/// @type Boolean
$accordionmenu-arrows: true !default;
/// Sets accordion menu arrow color if arrow is used.
/// @type Color
$accordionmenu-arrow-color: $primary-color !default;
@mixin foundation-accordion-menu {
@if $accordionmenu-arrows {
.is-accordion-submenu-parent > a {
position: relative;
&::after {
@include css-triangle(6px, $accordionmenu-arrow-color, down);
position: absolute;
top: 50%;
margin-top: -4px;
right: 1rem;
}
}
.is-accordion-submenu-parent[aria-expanded='true'] > a::after {
transform-origin: 50% 50%;
transform: scaleY(-1);
}
}
}

View file

@ -0,0 +1,129 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group accordion
////
/// Default background color of an accordion group.
/// @type Color
$accordion-background: $white !default;
/// If `true`, adds plus and minus icons to the side of each accordion title.
/// @type Boolean
$accordion-plusminus: true !default;
/// Default text color for items in a Menu.
/// @type Color
$accordion-item-color: foreground($accordion-background, $primary-color) !default;
/// Default background color on hover for items in a Menu.
/// @type Color
$accordion-item-background-hover: $light-gray !default;
/// Default padding of an accordion item.
/// @type Number | List
$accordion-item-padding: 1.25rem 1rem !default;
/// Default background color of tab content.
/// @type Color
$accordion-content-background: $white !default;
/// Default border color of tab content.
/// @type Color
$accordion-content-border: 1px solid $light-gray !default;
/// Default text color of tab content.
/// @type Color
$accordion-content-color: foreground($accordion-content-background, $body-font-color) !default;
/// Default padding for tab content.
/// @type Number | List
$accordion-content-padding: 1rem !default;
/// Adds styles for an accordion container. Apply this to the same element that gets `data-accordion`.
@mixin accordion-container {
list-style-type: none;
background: $accordion-background;
margin-#{$global-left}: 0;
}
/// Adds styles for the accordion item. Apply this to the list item within an accordion ul.
@mixin accordion-item {
&:first-child > :first-child {
border-radius: $global-radius $global-radius 0 0;
}
&:last-child > :last-child {
border-radius: 0 0 $global-radius $global-radius;
}
}
/// Adds styles for the title of an accordion item. Apply this to the link within an accordion item.
@mixin accordion-title {
display: block;
padding: $accordion-item-padding;
line-height: 1;
font-size: rem-calc(12);
color: $accordion-item-color;
position: relative;
border: $accordion-content-border;
border-bottom: 0;
:last-child:not(.is-active) > & {
border-radius: 0 0 $global-radius $global-radius;
border-bottom: $accordion-content-border;
}
&:hover,
&:focus {
background-color: $accordion-item-background-hover;
}
@if $accordion-plusminus {
&::before {
content: '+';
position: absolute;
#{$global-right}: 1rem;
top: 50%;
margin-top: -0.5rem;
}
.is-active > &::before {
content: '';
}
}
}
/// Adds styles for accordion content. Apply this to the content pane below an accordion item's title.
@mixin accordion-content {
padding: $accordion-content-padding;
display: none;
border: $accordion-content-border;
border-bottom: 0;
background-color: $accordion-content-background;
color: $accordion-content-color;
:last-child > &:last-child {
border-bottom: $accordion-content-border;
}
}
@mixin foundation-accordion {
.accordion {
@include accordion-container;
}
.accordion-item {
@include accordion-item;
}
.accordion-title {
@include accordion-title;
}
.accordion-content {
@include accordion-content;
}
}

View file

@ -0,0 +1,55 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group badge
////
/// Default background color for badges.
/// @type Color
$badge-background: $primary-color !default;
/// Default text color for badges.
/// @type Color
$badge-color: foreground($badge-background) !default;
/// Default padding inside badges.
/// @type Number
$badge-padding: 0.3em !default;
/// Minimum width of a badge.
/// @type Number
$badge-minwidth: 2.1em !default;
/// Default font size for badges.
/// @type Number
$badge-font-size: 0.6rem !default;
/// Generates the base styles for a badge.
@mixin badge {
display: inline-block;
padding: $badge-padding;
min-width: $badge-minwidth;
font-size: $badge-font-size;
text-align: center;
border-radius: 50%;
}
@mixin foundation-badge {
.badge {
@include badge;
background: $badge-background;
color: $badge-color;
@each $name, $color in $foundation-palette {
@if $name != primary {
&.#{$name} {
background: $color;
color: foreground($color);
}
}
}
}
}

View file

@ -0,0 +1,95 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group breadcrumbs
////
/// Margin around a breadcrumbs container.
/// @type Number
$breadcrumbs-margin: 0 0 $global-margin 0 !default;
/// Font size of breadcrumb links.
/// @type Number
$breadcrumbs-item-font-size: rem-calc(11) !default;
/// Color of breadcrumb links.
/// @type Color
$breadcrumbs-item-color: $primary-color !default;
/// Color of the active breadcrumb link.
/// @type Color
$breadcrumbs-item-color-current: $black !default;
/// Opacity of disabled breadcrumb links.
/// @type Number
$breadcrumbs-item-color-disabled: $medium-gray !default;
/// Margin between breadcrumb items.
/// @type Number
$breadcrumbs-item-margin: 0.75rem !default;
/// If `true`, makes breadcrumb links uppercase.
/// @type Boolean
$breadcrumbs-item-uppercase: true !default;
/// If `true`, adds a slash between breadcrumb links.
/// @type Boolean
$breadcrumbs-item-slash: true !default;
/// Adds styles for a breadcrumbs container, along with the styles for the `<li>` and `<a>` elements inside of it.
@mixin breadcrumbs-container {
@include clearfix;
list-style: none;
margin: $breadcrumbs-margin;
// Item wrapper
li {
float: #{$global-left};
color: $breadcrumbs-item-color-current;
font-size: $breadcrumbs-item-font-size;
cursor: default;
@if $breadcrumbs-item-uppercase {
text-transform: uppercase;
}
@if $breadcrumbs-item-slash {
// Need to escape the backslash
$slash: if($global-text-direction == 'ltr', '/', '\\');
&:not(:last-child)::after {
color: $medium-gray;
content: $slash;
margin: 0 $breadcrumbs-item-margin;
position: relative;
top: 1px;
opacity: 1;
}
}
@else {
margin-#{$global-right}: $breadcrumbs-item-margin;
}
}
// Page links
a {
color: $breadcrumbs-item-color;
&:hover {
text-decoration: underline;
}
}
}
@mixin foundation-breadcrumbs {
.breadcrumbs {
@include breadcrumbs-container;
.disabled {
color: $breadcrumbs-item-color-disabled;
cursor: not-allowed;
}
}
}

View file

@ -0,0 +1,195 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group button-group
////
/// Margin for button groups.
/// @type Number
$buttongroup-margin: 1rem !default;
/// Margin between buttons in a button group.
/// @type Border
$buttongroup-spacing: 1px !default;
/// Selector for the buttons inside a button group.
/// @type String
$buttongroup-child-selector: '.button' !default;
/// Maximum number of buttons that can be in an even-width button group.
/// @type Number
$buttongroup-expand-max: 6 !default;
/// Add styles for a button group container.
/// @param {String} $child-selector [$buttongroup-child-selector] - Selector for the buttons inside a button group.
@mixin button-group(
$child-selector: $buttongroup-child-selector
) {
@include clearfix;
margin-bottom: $buttongroup-margin;
@if $global-flexbox {
display: flex;
flex-wrap: nowrap;
align-items: stretch;
}
@else {
font-size: 0;
}
#{$child-selector} {
margin: 0;
margin-#{$global-right}: $buttongroup-spacing;
margin-bottom: $buttongroup-spacing;
font-size: map-get($button-sizes, default);
@if $global-flexbox {
flex: 0 0 auto;
}
&:last-child {
margin-#{$global-right}: 0;
}
}
}
/// Creates a full-width button group, making each button equal width.
/// @param {String} $selector [$buttongroup-child-selector] - Selector for the buttons inside a button group.
@mixin button-group-expand(
$selector: $buttongroup-child-selector,
$count: null
) {
@if not $global-flexbox {
margin-#{$global-right}: -$buttongroup-spacing;
&::before,
&::after {
display: none;
}
}
// scss-lint:disable ZeroUnit
#{$selector} {
@if $global-flexbox {
flex: 1 1 0px;
}
@else {
@for $i from 2 through $buttongroup-expand-max {
&:first-child:nth-last-child(#{$i}) {
&, &:first-child:nth-last-child(#{$i}) ~ #{$selector} {
display: inline-block;
width: calc(#{percentage(1 / $i)} - #{$buttongroup-spacing});
margin-#{$global-right}: $buttongroup-spacing;
&:last-child {
margin-#{$global-right}: $buttongroup-spacing * -$buttongroup-expand-max;
}
}
}
}
}
}
}
/// Stacks the buttons in a button group.
/// @param {String} $selector [$buttongroup-child-selector] - Selector for the buttons inside the button group.
@mixin button-group-stack(
$selector: $buttongroup-child-selector
) {
@if $global-flexbox {
flex-wrap: wrap;
}
#{$selector} {
@if $global-flexbox {
flex: 0 0 100%;
}
@else {
width: 100%;
}
&:last-child {
margin-bottom: 0;
}
}
}
/// Un-stacks the buttons in a button group.
/// @param {String} $selector [$buttongroup-child-selector] - Selector for the buttons inside the button group.
@mixin button-group-unstack(
$selector: $buttongroup-child-selector
) {
// scss-lint:disable ZeroUnit
#{$selector} {
@if $global-flexbox {
flex: 1 1 0px;
}
@else {
width: auto;
}
margin-bottom: 0;
}
}
@mixin foundation-button-group {
.button-group {
@include button-group;
// Sizes
@each $size, $value in map-remove($button-sizes, default) {
&.#{$size} #{$buttongroup-child-selector} {
font-size: $value;
}
}
// Even-width Group
&.expanded { @include button-group-expand; }
// Colors
@each $name, $color in $foundation-palette {
@if $button-fill != hollow {
&.#{$name} #{$buttongroup-child-selector} {
@include button-style($color, auto, auto);
}
}
@else {
&.#{$name} #{$buttongroup-child-selector} {
@include button-hollow;
@include button-hollow-style($color);
}
}
}
&.stacked,
&.stacked-for-small,
&.stacked-for-medium {
@include button-group-stack;
}
&.stacked-for-small {
@include breakpoint(medium) {
@include button-group-unstack;
}
}
&.stacked-for-medium {
@include breakpoint(large) {
@include button-group-unstack;
}
}
// scss-lint:disable MergeableSelector
&.stacked-for-small.expanded {
@include breakpoint(small only) {
display: block;
#{$buttongroup-child-selector} {
display: block;
margin-#{$global-right}: 0;
}
}
}
}
}

View file

@ -0,0 +1,265 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group button
////
/// Padding inside buttons.
/// @type List
$button-padding: 0.85em 1em !default;
/// Margin around buttons.
/// @type List
$button-margin: 0 0 $global-margin 0 !default;
/// Default fill for buttons. Can either be `solid` or `hollow`.
/// @type Keyword
$button-fill: solid !default;
/// Default background color for buttons.
/// @type Color
$button-background: $primary-color !default;
/// Background color on hover for buttons.
/// @type Color
$button-background-hover: scale-color($button-background, $lightness: -15%) !default;
/// Font color for buttons.
/// @type List
$button-color: $white !default;
/// Font color for buttons, if the background is light.
/// @type List
$button-color-alt: $black !default;
/// Border radius for buttons, defaulted to global-radius.
/// @type Number
$button-radius: $global-radius !default;
/// Sizes for buttons.
/// @type Map
$button-sizes: (
tiny: 0.6rem,
small: 0.75rem,
default: 0.9rem,
large: 1.25rem,
) !default;
/// opacity for a disabled button.
/// @type List
$button-opacity-disabled: 0.25 !default;
// Internal: flip from margin-right to margin-left for defaults
@if $global-text-direction == 'rtl' {
$button-margin: 0 0 $global-margin $global-margin !default;
}
// TODO: Document button-base() mixin
@mixin button-base {
@include disable-mouse-outline;
display: inline-block;
text-align: center;
line-height: 1;
cursor: pointer;
-webkit-appearance: none;
transition: background-color 0.25s ease-out, color 0.25s ease-out;
vertical-align: middle;
border: 1px solid transparent;
border-radius: $button-radius;
padding: $button-padding;
margin: $button-margin;
font-size: map-get($button-sizes, default);
}
/// Expands a button to make it full-width.
/// @param {Boolean} $expand [true] - Set to `true` to enable the expand behavior. Set to `false` to reverse this behavior.
@mixin button-expand($expand: true) {
@if $expand {
display: block;
width: 100%;
margin-left: 0;
margin-right: 0;
}
@else {
display: inline-block;
width: auto;
margin: $button-margin;
}
}
/// Sets the visual style of a button.
/// @param {Color} $background [$button-background] - Background color of the button.
/// @param {Color} $background-hover [$button-background-hover] - Background color of the button on hover. Set to `auto` to have the mixin automatically generate a hover color.
/// @param {Color} $color [$button-color] - Text color of the button. Set to `auto` to automatically generate a color based on the background color.
@mixin button-style(
$background: $button-background,
$background-hover: $button-background-hover,
$color: $button-color
) {
@if $color == auto {
$color: foreground($background, $button-color-alt, $button-color);
}
@if $background-hover == auto {
$background-hover: scale-color($background, $lightness: -20%);
}
background-color: $background;
color: $color;
&:hover, &:focus {
background-color: $background-hover;
color: $color;
}
}
/// Removes background fill on hover and focus for hollow buttons.
@mixin button-hollow {
&,
&:hover, &:focus {
background-color: transparent;
}
}
@mixin button-hollow-style($color: $primary-color) {
$color-hover: scale-color($color, $lightness: -50%);
border: 1px solid $color;
color: $color;
&:hover, &:focus {
border-color: $color-hover;
color: $color-hover;
}
}
/// Adds disabled styles to a button by fading the element, reseting the cursor, and disabling pointer events.
@mixin button-disabled {
opacity: $button-opacity-disabled;
cursor: not-allowed;
&:hover, &:focus {
background-color: $button-background;
color: $button-color;
}
}
/// Adds a dropdown arrow to a button.
/// @param {Number} $size [0.4em] - Size of the arrow. We recommend using an `em` value so the triangle scales when used inside different sizes of buttons.
/// @param {Color} $color [white] - Color of the arrow.
/// @param {Number} $offset [$button-padding] - Distance between the arrow and the text of the button. Defaults to whatever the right padding of a button is.
@mixin button-dropdown(
$size: 0.4em,
$color: $white,
$offset: get-side($button-padding, right)
) {
&::after {
@include css-triangle($size, $color, down);
position: relative;
top: 0.4em; // Aligns the arrow with the text of the button
float: #{$global-right};
margin-#{$global-left}: get-side($button-padding, right);
display: inline-block;
}
}
/// Adds all styles for a button. For more granular control over styles, use the individual button mixins.
/// @param {Boolean} $expand [false] - Set to `true` to make the button full-width.
/// @param {Color} $background [$button-background] - Background color of the button.
/// @param {Color} $background-hover [$button-background-hover] - Background color of the button on hover. Set to `auto` to have the mixin automatically generate a hover color.
/// @param {Color} $color [$button-color] - Text color of the button. Set to `auto` to automatically generate a color based on the background color.
/// @param {Keyword} $style [solid] - Set to `hollow` to create a hollow button. The color defined in `$background` will be used as the primary color of the button.
@mixin button(
$expand: false,
$background: $button-background,
$background-hover: $button-background-hover,
$color: $button-color,
$style: $button-fill
) {
@include button-base;
@if $style == solid {
@include button-style($background, $background-hover, $color);
}
@else if $style == hollow {
@include button-hollow;
@include button-hollow-style($background);
}
@if $expand {
@include button-expand;
}
}
@mixin foundation-button {
.button {
@include button;
// Sizes
@each $size, $value in map-remove($button-sizes, default) {
&.#{$size} {
font-size: $value;
}
}
&.expanded { @include button-expand; }
// Colors
@each $name, $color in $foundation-palette {
@if $button-fill != hollow {
&.#{$name} {
@include button-style($color, auto, auto);
}
}
@else {
&.#{$name} {
@include button-hollow-style($color);
}
&.#{$name}.dropdown::after {
border-top-color: $color;
}
}
}
// Hollow style
@if $button-fill != hollow {
&.hollow {
@include button-hollow;
@include button-hollow-style;
@each $name, $color in $foundation-palette {
&.#{$name} {
@include button-hollow-style($color);
}
}
}
}
// Disabled style
&.disabled,
&[disabled] {
@include button-disabled;
}
// Dropdown arrow
&.dropdown {
@include button-dropdown;
@if $button-fill == hollow {
&::after {
border-top-color: $button-background;
}
}
}
// Button with dropdown arrow only
&.arrow-only::after {
margin-#{$global-left}: 0;
float: none;
top: -0.1em;
}
}
}

View file

@ -0,0 +1,105 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group callout
////
/// Default background color.
/// @type Color
$callout-background: $white !default;
/// Default fade value for callout backgrounds.
/// @type Number
$callout-background-fade: 85% !default;
/// Default border style for callouts.
/// @type List
$callout-border: 1px solid rgba($black, 0.25) !default;
/// Default bottom margin for callouts.
/// @type Number
$callout-margin: 0 0 1rem 0 !default;
/// Default inner padding for callouts.
/// @type Number
$callout-padding: 1rem !default;
/// Default font color for callouts.
/// @type Color
$callout-font-color: $body-font-color !default;
/// Default font color for callouts, if the callout has a dark background.
/// @type Color
$callout-font-color-alt: $body-background !default;
/// Default border radius for callouts.
/// @type Color
$callout-radius: $global-radius !default;
/// Amount to tint links used within colored panels. Set to `false` to disable this feature.
/// @type Number | Boolean
$callout-link-tint: 30% !default;
/// Adds basic styles for a callout, including padding and margin.
@mixin callout-base() {
margin: $callout-margin;
padding: $callout-padding;
border: $callout-border;
border-radius: $callout-radius;
position: relative;
color: $callout-font-color;
// Respect the padding, fool.
> :first-child {
margin-top: 0;
}
> :last-child {
margin-bottom: 0;
}
}
/// Generate quick styles for a callout using a single color as a baseline.
/// @param {Color} $color [$callout-background] - Color to use.
@mixin callout-style($color: $callout-background) {
$background: scale-color($color, $lightness: $callout-background-fade);
background-color: $background;
}
@mixin callout-size($padding) {
padding-top: $padding;
padding-right: $padding;
padding-bottom: $padding;
padding-left: $padding;
}
/// Adds styles for a callout.
/// @param {Color} $color [$callout-background] - Color to use.
@mixin callout($color: $callout-background) {
@include callout-base;
@include callout-style($color);
}
@mixin foundation-callout {
.callout {
@include callout;
@each $name, $color in $foundation-palette {
&.#{$name} {
@include callout-style($color);
}
}
&.small {
@include callout-size(0.5rem);
}
&.large {
@include callout-size(3rem);
}
}
}

View file

@ -0,0 +1,61 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group close-button
////
/// Default position of the close button. The first value should be `right` or `left`, and the second value should be `top` or `bottom`.
/// @type List
$closebutton-position: right top !default;
/// Right (or left) offset for a close button.
/// @type Number
$closebutton-offset-horizontal: 1rem !default;
/// Top (or bottom) offset for a close button.
/// @type Number
$closebutton-offset-vertical: 0.5rem !default;
/// Default font size of the close button.
/// @type Number
$closebutton-size: 2em !default;
/// The line-height of the close button. It affects the spacing of the element.
/// @type Number
$closebutton-lineheight: 1 !default;
/// Default color of the close button.
/// @type Color
$closebutton-color: $dark-gray !default;
/// Default color of the close button when being hovered on.
/// @type Color
$closebutton-color-hover: $black !default;
/// Adds styles for a close button, using the styles in the settings variables.
@mixin close-button {
$x: nth($closebutton-position, 1);
$y: nth($closebutton-position, 2);
@include disable-mouse-outline;
position: absolute;
color: $closebutton-color;
#{$x}: $closebutton-offset-horizontal;
#{$y}: $closebutton-offset-vertical;
font-size: $closebutton-size;
line-height: $closebutton-lineheight;
cursor: pointer;
&:hover,
&:focus {
color: $closebutton-color-hover;
}
}
@mixin foundation-close-button {
.close-button {
@include close-button;
}
}

View file

@ -0,0 +1,79 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group drilldown
////
/// Transition property to use for animating menus.
/// @type Transition
$drilldown-transition: transform 0.15s linear !default;
/// Adds arrows to drilldown items with submenus, as well as the back button.
/// @type Boolean
$drilldown-arrows: true !default;
/// Sets drilldown arrow color if arrow is used.
/// @type Color
$drilldown-arrow-color: $primary-color !default;
/// Background color for drilldown submenus.
/// @type Color
$drilldown-background: $white !default;
@mixin foundation-drilldown-menu {
// Applied to the Menu container
.is-drilldown {
position: relative;
overflow: hidden;
li {
display: block !important;
}
}
// Applied to nested <ul>s
.is-drilldown-submenu {
position: absolute;
top: 0;
#{$global-left}: 100%;
z-index: -1;
height: 100%;
width: 100%;
background: $drilldown-background;
transition: $drilldown-transition;
&.is-active {
z-index: 1;
display: block;
transform: translateX(if($global-text-direction == ltr, -100%, 100%));
}
&.is-closing {
transform: translateX(if($global-text-direction == ltr, 100%, -100%));
}
}
@if $drilldown-arrows {
.is-drilldown-submenu-parent > a {
position: relative;
&::after {
@include css-triangle(6px, $drilldown-arrow-color, $global-right);
position: absolute;
top: 50%;
margin-top: -6px;
#{$global-right}: 1rem;
}
}
.js-drilldown-back > a::before {
@include css-triangle(6px, $drilldown-arrow-color, $global-left);
border-#{$global-left}-width: 0;
display: inline-block;
vertical-align: middle;
margin-#{$global-right}: 0.75rem; // Creates space between the arrow and the text
}
}
}

View file

@ -0,0 +1,221 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group dropdown-menu
////
/// Enables arrows for items with dropdown menus.
/// @type Boolean
$dropdownmenu-arrows: true !default;
/// Sets dropdown menu arrow color if arrow is used.
/// @type Color
$dropdownmenu-arrow-color: $anchor-color !default;
/// Minimum width of dropdown sub-menus.
/// @type Length
$dropdownmenu-min-width: 200px !default;
/// Background color for dropdowns.
/// @type Color
$dropdownmenu-background: $white !default;
/// Border for dropdown sub-menus.
/// @type List
$dropdownmenu-border: 1px solid $medium-gray !default;
// Border width for dropdown sub-menus.
// Used to adjust top margin of a sub-menu if a border is used.
// @type Length
$dropdownmenu-border-width: nth($dropdownmenu-border, 1);
@mixin left-right-arrows {
> a::after {
#{$global-right}: 14px;
margin-top: -3px;
}
&.opens-left > a::after {
@include css-triangle(5px, $dropdownmenu-arrow-color, left);
}
&.opens-right > a::after {
@include css-triangle(5px, $dropdownmenu-arrow-color, right);
}
}
@mixin dropdown-menu-direction($dir: horizontal) {
@if $dir == horizontal {
> li.opens-left {
> .is-dropdown-submenu {
left: auto;
right: 0;
top: 100%;
}
}
> li.opens-right {
> .is-dropdown-submenu {
right: auto;
left: 0;
top: 100%;
}
}
@if $dropdownmenu-arrows {
> li.is-dropdown-submenu-parent > a {
padding-#{$global-right}: 1.5rem;
position: relative;
}
> li.is-dropdown-submenu-parent > a::after {
@include css-triangle(5px, $dropdownmenu-arrow-color, down);
#{$global-right}: 5px;
margin-top: -2px;
}
}
}
@else if $dir == vertical {
> li {
.is-dropdown-submenu {
top: 0;
}
&.opens-left {
> .is-dropdown-submenu {
left: auto;
right: 100%;
}
}
&.opens-right {
> .is-dropdown-submenu {
right: auto;
left: 100%;
}
}
@if $dropdownmenu-arrows {
@include left-right-arrows;
}
}
}
@else {
@warn 'The direction used for dropdown-menu-direction() must be horizontal or vertical.';
}
}
@mixin foundation-dropdown-menu {
.dropdown.menu {
@include dropdown-menu-direction(horizontal);
a {
@include disable-mouse-outline;
}
.no-js & ul {
display: none;
}
&.vertical {
@include dropdown-menu-direction(vertical);
}
@each $size in $breakpoint-classes {
@if $size != $-zf-zero-breakpoint {
@include breakpoint($size) {
&.#{$size}-horizontal {
@include dropdown-menu-direction(horizontal);
}
&.#{$size}-vertical {
@include dropdown-menu-direction(vertical);
}
}
}
}
&.align-right {
.is-dropdown-submenu.first-sub {
top: 100%;
left: auto;
right: 0;
}
}
}
.is-dropdown-menu.vertical {
width: 100px;
&.align-right {
float: right;
}
}
.is-dropdown-submenu-parent {
position: relative;
a::after {
position: absolute;
top: 50%;
#{$global-right}: 5px;
margin-top: -2px;
}
&.opens-inner > .is-dropdown-submenu {
top: 100%;
@if $global-text-direction == 'rtl' {
right: auto;
} @else {
left: auto;
}
}
&.opens-left > .is-dropdown-submenu {
left: auto;
right: 100%;
}
&.opens-right > .is-dropdown-submenu {
right: auto;
left: 100%;
}
}
.is-dropdown-submenu {
display: none;
position: absolute;
top: 0;
#{$global-left}: 100%;
min-width: $dropdownmenu-min-width;
z-index: 1;
background: $dropdownmenu-background;
border: $dropdownmenu-border;
.is-dropdown-submenu-parent {
@if $dropdownmenu-arrows {
@include left-right-arrows;
}
}
@if (type-of($dropdownmenu-border-width) == 'number') {
.is-dropdown-submenu {
margin-top: (-$dropdownmenu-border-width);
}
}
> li {
width: 100%;
}
// [TODO] Cut back specificity
// scss-lint:disable SelectorDepth
//&:not(.js-dropdown-nohover) > .is-dropdown-submenu-parent:hover > &, // why is this line needed? Opening is handled by JS and this causes some ugly flickering when the sub is re-positioned automatically...
&.js-dropdown-active {
display: block;
}
}
}

View file

@ -0,0 +1,65 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group dropdown
////
/// Padding for dropdown panes.
/// @type List
$dropdown-padding: 1rem !default;
/// Border for dropdown panes.
/// @type List
$dropdown-border: 1px solid $medium-gray !default;
/// Font size for dropdown panes.
/// @type List
$dropdown-font-size: 1rem !default;
/// Width for dropdown panes.
/// @type Number
$dropdown-width: 300px !default;
/// Border radius dropdown panes.
/// @type Number
$dropdown-radius: $global-radius !default;
/// Sizes for dropdown panes. Each size is a CSS class you can apply.
/// @type Map
$dropdown-sizes: (
tiny: 100px,
small: 200px,
large: 400px,
) !default;
/// Applies styles for a basic dropdown.
@mixin dropdown-container {
background-color: $body-background;
border: $dropdown-border;
border-radius: $dropdown-radius;
display: block;
font-size: $dropdown-font-size;
padding: $dropdown-padding;
position: absolute;
visibility: hidden;
width: $dropdown-width;
z-index: 10;
&.is-open {
visibility: visible;
}
}
@mixin foundation-dropdown {
.dropdown-pane {
@include dropdown-container;
}
@each $name, $size in $dropdown-sizes {
.dropdown-pane.#{$name} {
width: $size;
}
}
}

View file

@ -0,0 +1,63 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group flex-video
////
/// Margin below a flex video container.
/// @type Number
$flexvideo-margin-bottom: rem-calc(16) !default;
/// Padding used to create a 4:3 aspect ratio.
/// @type Number
$flexvideo-ratio: 4 by 3 !default;
/// Padding used to create a 16:9 aspect ratio.
/// @type Number
$flexvideo-ratio-widescreen: 16 by 9 !default;
/// Creates a percentage height that can be used as padding in a flex video container.
/// @param {List} $ratio - Ratio to use to calculate the height, formatted as `x by y`.
/// @return {Number} A percentage value that can be used as the `padding-bottom` parameter of a flex video container.
@function flex-video($ratio) {
$w: nth($ratio, 1);
$h: nth($ratio, 3);
@return $h / $w * 100%;
}
/// Creates a flex video container.
/// @param {List} $ratio [$flexvideo-ratio] - Ratio to use for the container, formatted as `x by y`.
@mixin flex-video($ratio: $flexvideo-ratio) {
position: relative;
height: 0;
padding-bottom: flex-video($ratio);
margin-bottom: $flexvideo-margin-bottom;
overflow: hidden;
iframe,
object,
embed,
video {
position: absolute;
top: 0;
#{$global-left}: 0;
width: 100%;
height: 100%;
}
}
@mixin foundation-flex-video {
.flex-video {
@include flex-video;
&.widescreen {
padding-bottom: flex-video($flexvideo-ratio-widescreen);
}
&.vimeo {
padding-top: 0;
}
}
}

View file

@ -0,0 +1,28 @@
@mixin foundation-flex-classes {
// Horizontal alignment using justify-content
@each $hdir, $prop in map-remove($-zf-flex-justify, left) {
.align-#{$hdir} {
@include flex-align($x: $hdir);
}
}
// Vertical alignment using align-items and align-self
@each $vdir, $prop in $-zf-flex-align {
.align-#{$vdir} {
@include flex-align($y: $vdir);
}
.align-self-#{$vdir} {
@include flex-align-self($y: $vdir);
}
}
// Source ordering
@include -zf-each-breakpoint {
@for $i from 1 through 6 {
.#{$-zf-size}-order-#{$i} {
@include flex-order($i);
}
}
}
}

View file

@ -0,0 +1,27 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group float
////
@mixin foundation-float-classes {
.float-left {
float: left !important;
}
.float-right {
float: right !important;
}
.float-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.clearfix {
@include clearfix;
}
}

View file

@ -0,0 +1,56 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group label
////
/// Default background color for labels.
/// @type Color
$label-background: $primary-color !default;
/// Default text color for labels.
/// @type Color
$label-color: foreground($label-background) !default;
/// Default font size for labels.
/// @type Number
$label-font-size: 0.8rem !default;
/// Default padding inside labels.
/// @type Number
$label-padding: 0.33333rem 0.5rem !default;
/// Default radius of labels.
/// @type Number
$label-radius: $global-radius !default;
/// Generates base styles for a label.
@mixin label {
display: inline-block;
padding: $label-padding;
font-size: $label-font-size;
line-height: 1;
white-space: nowrap;
cursor: default;
border-radius: $label-radius;
}
@mixin foundation-label {
.label {
@include label;
background: $label-background;
color: $label-color;
@each $name, $color in $foundation-palette {
@if $name != primary {
&.#{$name} {
background: $color;
color: foreground($color);
}
}
}
}
}

View file

@ -0,0 +1,115 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group media-object
////
/// Bottom margin of a media object.
/// @type Number
$mediaobject-margin-bottom: $global-margin !default;
/// Left and right padding on sections within a media object.
/// @type Number
$mediaobject-section-padding: $global-padding !default;
/// Width of images within a media object, when the object is stacked vertically. Set to 'auto' to use the image's natural width.
/// @type Number
$mediaobject-image-width-stacked: 100% !default;
/// Adds styles for a media object container.
@mixin media-object-container {
margin-bottom: $mediaobject-margin-bottom;
display: if($global-flexbox, flex, block);
@if $global-flexbox {
flex-wrap: nowrap;
}
}
/// Adds styles for sections within a media object.
/// @param {Number} $padding [$mediaobject-section-padding] - Padding between sections.
@mixin media-object-section($padding: $mediaobject-section-padding) {
@if $global-flexbox {
flex: 0 1 auto;
}
@else {
display: table-cell;
vertical-align: top;
}
&:first-child {
padding-#{$global-right}: $padding;
}
&:last-child:not(:nth-child(2)) {
padding-#{$global-left}: $padding;
}
> :last-child {
margin-bottom: 0;
}
}
/// Adds styles to stack sections of a media object. Apply this to the section elements, not the container.
@mixin media-object-stack {
padding: 0;
padding-bottom: $mediaobject-section-padding;
@if $global-flexbox {
flex-basis: 100%;
max-width: 100%;
}
@else {
display: block;
}
img {
width: $mediaobject-image-width-stacked;
}
}
@mixin foundation-media-object {
.media-object {
@include media-object-container;
img {
max-width: none;
}
@if $global-flexbox {
&.stack-for-#{$-zf-zero-breakpoint} {
@include breakpoint($-zf-zero-breakpoint only) {
flex-wrap: wrap;
}
}
}
&.stack-for-#{$-zf-zero-breakpoint} .media-object-section {
@include breakpoint($-zf-zero-breakpoint only) {
@include media-object-stack;
}
}
}
.media-object-section {
@include media-object-section;
@if $global-flexbox {
// scss-lint:disable ZeroUnit
&.main-section {
flex: 1 1 0px;
}
}
@else {
&.middle {
vertical-align: middle;
}
&.bottom {
vertical-align: bottom;
}
}
}
}

View file

@ -0,0 +1,9 @@
@mixin foundation-menu-icon {
.menu-icon {
@include hamburger($color: $titlebar-icon-color, $color-hover: $titlebar-icon-color-hover);
}
.menu-icon.dark {
@include hamburger;
}
}

View file

@ -0,0 +1,314 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group menu
////
/// Margin of a menu.
/// @type Number
$menu-margin: 0 !default;
/// Left-hand margin of a nested menu.
/// @type Number
$menu-margin-nested: 1rem !default;
/// Padding for items in a menu.
/// @type Number
$menu-item-padding: 0.7rem 1rem !default;
/// Text color of an active menu item.
/// @type Color
$menu-item-color-active: $white !default;
/// Background color of an active menu item.
/// @type Color
$menu-item-background-active: map-get($foundation-palette, primary) !default;
/// Spacing between an icon and text in a menu item.
/// @type Number
$menu-icon-spacing: 0.25rem !default;
/// Creates the base styles for a Menu.
@mixin menu-base {
margin: $menu-margin;
list-style-type: none;
@if $global-flexbox {
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
}
// List items are table cell to allow for vertical alignment
> li {
@include disable-mouse-outline;
@if $global-flexbox {
flex: 0 0 auto;
}
@else {
display: table-cell;
vertical-align: middle;
}
}
// Reset line height to make the height of the overall item easier to calculate
> li > a {
display: block;
padding: $menu-item-padding;
line-height: 1;
}
// Reset styles of inner elements
input,
a,
button {
margin-bottom: 0;
}
}
/// Expands the items of a Menu, so each item is the same width.
@mixin menu-expand {
@if $global-flexbox {
// scss-lint:disable ZeroUnit
> li {
flex: 1 1 0px;
}
}
@else {
width: 100%;
display: table;
table-layout: fixed;
}
}
/// Sets the direction of a Menu.
/// @param {Keyword} $dir [horizontal] - Direction of the Menu. Can be `horizontal` or `vertical`.
@mixin menu-direction($dir: horizontal) {
@if $dir == horizontal {
@if $global-flexbox {
flex-wrap: nowrap;
> li {
flex: 0 0 auto;
}
}
@else {
> li {
display: table-cell;
}
}
}
@else if $dir == vertical {
@if $global-flexbox {
flex-wrap: wrap;
> li {
flex: 0 0 100%;
max-width: 100%;
}
> li > a {
align-items: flex-start;
justify-content: flex-start;
}
}
@else {
> li {
display: block;
}
}
}
@else {
@warn 'The direction used for menu-direction() must be horizontal or vertical.';
}
}
/// Creates a simple Menu, which has no padding or hover state.
@mixin menu-simple {
li {
line-height: 1;
display: inline-block;
margin-#{$global-right}: get-side($menu-item-padding, $global-right);
}
a {
padding: 0;
}
}
/// Adds styles for a nested Menu, by adding `margin-left` to the menu.
/// @param {Keyword|Number} $padding [auto] - Length of the margin.
@mixin menu-nested($margin: $menu-margin-nested) {
margin-#{$global-left}: $margin;
}
/// Adds support for icons to Menu items.
/// @param {Keyword} $position [side] - Positioning for icons. Can be `side` (left, or right on RTL) or `top`.
/// @param {Boolean} $base [true] - Set to `false` to prevent the shared CSS between side- and top-aligned icons from being printed. Set this to `false` if you're calling the mixin multiple times on the same element.
@mixin menu-icons($position: side, $base: true) {
@if $base {
@if $global-flexbox {
> li > a {
display: flex;
}
}
@else {
> li > a {
img,
i,
svg {
vertical-align: middle;
+ span {
vertical-align: middle;
}
}
}
}
}
@if $position == side {
> li > a {
@if $global-flexbox {
flex-flow: row nowrap;
}
img,
i,
svg {
margin-#{$global-right}: $menu-icon-spacing;
@if not $global-flexbox {
display: inline-block;
}
}
}
}
@else if $position == top {
> li > a {
@if $global-flexbox {
flex-flow: column nowrap;
}
@else {
text-align: center;
}
img,
i,
svg {
@if not $global-flexbox {
display: block;
margin: 0 auto $menu-icon-spacing;
}
@else {
align-self: stretch;
text-align: center;
margin-bottom: $menu-icon-spacing;
}
}
}
}
}
@mixin menu-text {
font-weight: bold;
color: inherit;
line-height: 1;
padding-top: 0;
padding-bottom: 0;
padding: $menu-item-padding;
}
@mixin foundation-menu {
.menu {
@include menu-base;
@include menu-icons;
// Orientation
@include menu-direction(horizontal);
&.vertical {
@include menu-direction(vertical);
}
@each $size in $breakpoint-classes {
@if $size != $-zf-zero-breakpoint {
@include breakpoint($size) {
&.#{$size}-horizontal {
@include menu-direction(horizontal);
}
&.#{$size}-vertical {
@include menu-direction(vertical);
}
}
}
}
// Simple
&.simple {
@include menu-simple;
}
// Align right
&.align-#{$global-right} {
@if $global-flexbox {
justify-content: flex-end;
}
@else {
@include clearfix;
> li {
float: $global-right;
}
}
}
// Even-width
&.expanded {
@include menu-expand;
> li:first-child:last-child {
width: 100%;
}
}
// Vertical icons
&.icon-top {
@include menu-icons(top, $base: false);
}
// Nesting
&.nested {
@include menu-nested;
}
// Active state
.active > a {
color: $menu-item-color-active;
background: $menu-item-background-active;
}
}
.menu-text {
@include menu-text;
}
// Align center
.menu-centered {
text-align: center;
> .menu {
display: inline-block;
}
}
// Prevent FOUC when using the Responsive Menu plugin
.no-js [data-responsive-menu] ul {
display: none;
}
}

View file

@ -0,0 +1,177 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group off-canvas
////
/// Width of an off-canvas menu.
/// @type Number
$offcanvas-size: 250px !default;
/// Background color of an off-canvas menu.
/// @type Color
$offcanvas-background: $light-gray !default;
/// Z-index of an off-canvas menu.
/// @type Number
$offcanvas-zindex: -1 !default;
/// Length of the animation on an off-canvas menu.
/// @type Number
$offcanvas-transition-length: 0.5s !default;
/// Timing function of the animation on an off-canvas menu.
/// @type Keyword
$offcanvas-transition-timing: ease !default;
/// If `true`, a revealed off-canvas will be fixed-position, and scroll with the screen.
$offcanvas-fixed-reveal: true !default;
/// Background color for the overlay that appears when an off-canvas menu is open.
/// @type Color
$offcanvas-exit-background: rgba($white, 0.25) !default;
/// CSS class used for the main content area. The off-canvas mixins use this to target the page body.
$maincontent-class: 'off-canvas-content' !default;
/// Box shadow to place under the main content area. This shadow overlaps the off-canvas menus.
/// @type Shadow
$maincontent-shadow: 0 0 10px rgba($black, 0.5) !default;
/// Adds baseline styles for off-canvas. This CSS is required to make the other pieces work.
@mixin off-canvas-basics {
// Extra properties needed on <html> and <body> to make off-canvas work
html,
body {
height: 100%;
}
.off-canvas-wrapper {
width: 100%;
overflow-x: hidden;
position: relative;
backface-visibility: hidden;
-webkit-overflow-scrolling: auto;
}
.off-canvas-wrapper-inner {
@include clearfix;
position: relative;
width: 100%;
transition: transform $offcanvas-transition-length $offcanvas-transition-timing;
}
// Container for page content
.off-canvas-content,
.#{$maincontent-class} {
min-height: 100%;
background: $body-background;
transition: transform $offcanvas-transition-length $offcanvas-transition-timing;
backface-visibility: hidden;
z-index: 1;
padding-bottom: 0.1px; // Prevents margin collapsing, which would reveal the box shadow of the wrapper
@if has-value($maincontent-shadow) {
box-shadow: $maincontent-shadow;
}
}
// Click-to-exit overlay (generated by JavaScript)
.js-off-canvas-exit {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: $offcanvas-exit-background;
cursor: pointer;
transition: background $offcanvas-transition-length $offcanvas-transition-timing;
}
}
/// Adds basic styles for an off-canvas menu.
@mixin off-canvas-base {
@include disable-mouse-outline;
position: absolute;
background: $offcanvas-background;
z-index: $offcanvas-zindex;
max-height: 100%;
overflow-y: auto;
transform: translateX(0);
}
@mixin off-canvas-position(
$position: left,
$size: $offcanvas-size,
$fixed: false
) {
@if $position == left {
left: -$size;
top: 0;
width: $size;
}
@else if $position == right {
right: -$size;
top: 0;
width: $size;
}
// Generates an open state class that matches the width of the menu
@at-root {
.is-open-#{$position} {
@if $position == left {
transform: translateX($size);
}
@else if $position == right {
transform: translateX(-$size);
}
}
}
}
/// Adds styles that reveal an off-canvas menu.
/// @param {Keyword} $position [left] - Position of the off-canvas menu being revealed.
@mixin off-canvas-reveal(
$position: left
) {
#{$position}: 0;
z-index: auto;
@if $offcanvas-fixed-reveal {
position: fixed;
}
& ~ .#{$maincontent-class} {
margin-#{$position}: $offcanvas-size;
}
}
@mixin foundation-off-canvas {
@include off-canvas-basics;
// Off-canvas container
.off-canvas {
@include off-canvas-base;
&.position-left { @include off-canvas-position(left); }
&.position-right { @include off-canvas-position(right); }
}
// Reveal off-canvas menu on larger screens
@each $name, $value in $breakpoint-classes {
@if $name != $-zf-zero-breakpoint {
@include breakpoint($name) {
.position-left.reveal-for-#{$name} {
@include off-canvas-reveal(left);
}
.position-right.reveal-for-#{$name} {
@include off-canvas-reveal(right);
}
}
}
}
}

View file

@ -0,0 +1,193 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group orbit
////
/// Default color for Orbit's bullets.
/// @type Color
$orbit-bullet-background: $medium-gray !default;
/// Default active color for Orbit's bullets.
/// @type Color
$orbit-bullet-background-active: $dark-gray !default;
/// Default diameter for Orbit's bullets.
/// @type Number
$orbit-bullet-diameter: 1.2rem !default;
/// Default margin between Orbit's bullets.
/// @type Number
$orbit-bullet-margin: 0.1rem !default;
/// Default distance from slide region for Orbit's bullets.
/// @type Number
$orbit-bullet-margin-top: 0.8rem !default;
/// Default bottom margin from Orbit's bullets to whatever content may lurk below it.
/// @type Number
$orbit-bullet-margin-bottom: 0.8rem !default;
/// Default background color for Orbit's caption.
/// @type Color
$orbit-caption-background: rgba($black, 0.5) !default;
/// Default padding for Orbit's caption.
/// @type Number
$orbit-caption-padding: 1rem !default;
/// Default background color for Orbit's controls when hovered.
/// @type Color
$orbit-control-background-hover: rgba($black, 0.5) !default;
/// Default padding for Orbit's controls.
/// @type Number
$orbit-control-padding: 1rem !default;
/// Default z-index for Orbit's controls.
/// @type Number
$orbit-control-zindex: 10 !default;
/// Adds styles for the outer Orbit wrapper. These styles are used on the `.orbit` class.
@mixin orbit-wrapper {
position: relative;
}
/// Adds styles for the inner Orbit slide container. These styles are used on the `.orbit-container` class.
@mixin orbit-container {
position: relative;
margin: 0;
overflow: hidden;
list-style: none;
}
/// Adds styles for the individual slides of an Orbit slider. These styles are used on the `.orbit-slide` class.
@mixin orbit-slide {
width: 100%;
max-height: 100%;
&.no-motionui {
&.is-active {
top: 0;
left: 0;
}
}
}
@mixin orbit-figure {
margin: 0;
}
@mixin orbit-image {
margin: 0;
width: 100%;
max-width: 100%;
}
/// Adds styles for an orbit slide caption. These styles are used on the `.orbit-caption` class.
@mixin orbit-caption {
position: absolute;
bottom: 0;
width: 100%;
padding: $orbit-caption-padding;
margin-bottom: 0;
color: foreground($orbit-caption-background);
background-color: $orbit-caption-background;
}
/// Adds base styles for the next/previous buttons in an Orbit slider. These styles are shared between the `.orbit-next` and `.orbit-previous` classes in the default CSS.
@mixin orbit-control {
@include disable-mouse-outline;
@include vertical-center;
z-index: $orbit-control-zindex;
padding: $orbit-control-padding;
color: $white;
&:hover,
&:active,
&:focus {
background-color: $orbit-control-background-hover;
}
}
/// Adds styles for the Orbit previous button. These styles are used on the `.orbit-previous` class.
@mixin orbit-previous {
#{$global-left}: 0;
}
/// Adds styles for the Orbit next button. These styles are used on the `.orbit-next` class.
@mixin orbit-next {
#{$global-left}: auto;
#{$global-right}: 0;
}
/// Adds styles for a container of Orbit bullets. /// Adds styles for the Orbit previous button. These styles are used on the `.orbit-bullets` class.
@mixin orbit-bullets {
@include disable-mouse-outline;
position: relative;
margin-top: $orbit-bullet-margin-top;
margin-bottom: $orbit-bullet-margin-bottom;
text-align: center;
button {
width: $orbit-bullet-diameter;
height: $orbit-bullet-diameter;
margin: $orbit-bullet-margin;
background-color: $orbit-bullet-background;
border-radius: 50%;
&:hover {
background-color: $orbit-bullet-background-active;
}
&.is-active {
background-color: $orbit-bullet-background-active;
}
}
}
@mixin foundation-orbit {
.orbit {
@include orbit-wrapper;
}
.orbit-container {
@include orbit-container;
}
.orbit-slide {
@include orbit-slide;
}
.orbit-figure {
@include orbit-figure;
}
.orbit-image {
@include orbit-image;
}
.orbit-caption {
@include orbit-caption;
}
%orbit-control {
@include orbit-control;
}
.orbit-previous {
@extend %orbit-control;
@include orbit-previous;
}
.orbit-next {
@extend %orbit-control;
@include orbit-next;
}
.orbit-bullets {
@include orbit-bullets;
}
}

View file

@ -0,0 +1,162 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group pagination
////
/// Font size of pagination items.
/// @type Number
$pagination-font-size: rem-calc(14) !default;
/// Default bottom margin of the media object.
/// @type Number
$pagination-margin-bottom: $global-margin !default;
/// Text color of pagination items.
/// @type Color
$pagination-item-color: $black !default;
/// Padding inside of pagination items.
/// @type Number
$pagination-item-padding: rem-calc(3 10) !default;
/// Right margin to separate pagination items.
/// @type Number
$pagination-item-spacing: rem-calc(1) !default;
/// Default radius for pagination items.
/// @type Number
$pagination-radius: $global-radius !default;
/// Background color of pagination items on hover.
/// @type Color
$pagination-item-background-hover: $light-gray !default;
/// Background color of pagination item for the current page.
/// @type Color
$pagination-item-background-current: $primary-color !default;
/// Text color of the pagination item for the current page.
/// @type Color
$pagination-item-color-current: foreground($pagination-item-background-current) !default;
/// Text color of a disabled pagination item.
/// @type Color
$pagination-item-color-disabled: $medium-gray !default;
/// Color of the ellipsis in a pagination menu.
/// @type Color
$pagination-ellipsis-color: $black !default;
/// If `false`, don't display page number links on mobile, only next/previous links.
/// @type Boolean
$pagination-mobile-items: false !default;
/// If `true`, arrows are added to the next and previous links of pagination.
/// @type Boolean
$pagination-arrows: true !default;
/// Adds styles for a pagination container. Apply this to a `<ul>`.
@mixin pagination-container {
@include clearfix;
margin-#{$global-left}: 0;
margin-bottom: $pagination-margin-bottom;
// List item
li {
font-size: $pagination-font-size;
margin-#{$global-right}: $pagination-item-spacing;
border-radius: $pagination-radius;
@if $pagination-mobile-items {
display: inline-block;
}
@else {
display: none;
&:last-child,
&:first-child {
display: inline-block;
}
@include breakpoint(medium) {
display: inline-block;
}
}
}
// Page links
a,
button {
color: $pagination-item-color;
display: block;
padding: $pagination-item-padding;
border-radius: $global-radius;
&:hover {
background: $pagination-item-background-hover;
}
}
}
/// Adds styles for the current pagination item. Apply this to an `<a>`.
@mixin pagination-item-current {
padding: $pagination-item-padding;
background: $pagination-item-background-current;
color: $pagination-item-color-current;
cursor: default;
}
/// Adds styles for a disabled pagination item. Apply this to an `<a>`.
@mixin pagination-item-disabled {
padding: $pagination-item-padding;
color: $pagination-item-color-disabled;
cursor: not-allowed;
&:hover {
background: transparent;
}
}
/// Adds styles for an ellipsis for use in a pagination list.
@mixin pagination-ellipsis {
content: '\2026';
padding: $pagination-item-padding;
color: $pagination-ellipsis-color;
}
@mixin foundation-pagination {
.pagination {
@include pagination-container;
.current {
@include pagination-item-current;
}
.disabled {
@include pagination-item-disabled;
}
.ellipsis::after {
@include pagination-ellipsis;
}
}
@if $pagination-arrows {
.pagination-previous a::before,
.pagination-previous.disabled::before {
content: '\00ab';
display: inline-block;
margin-#{$global-right}: 0.5rem;
}
.pagination-next a::after,
.pagination-next.disabled::after {
content: '\00bb';
display: inline-block;
margin-#{$global-left}: 0.5rem;
}
}
}

View file

@ -0,0 +1,64 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
/// Adds styles for a progress bar container.
@mixin progress-container {
background-color: $progress-background;
height: $progress-height;
margin-bottom: $progress-margin-bottom;
border-radius: $progress-radius;
}
/// Adds styles for the inner meter of a progress bar.
@mixin progress-meter {
position: relative;
display: block;
width: 0%;
height: 100%;
background-color: $progress-meter-background;
@if has-value($progress-radius) {
border-radius: $global-radius;
}
}
/// Adds styles for text in the progress meter.
@mixin progress-meter-text {
@include absolute-center;
position: absolute;
margin: 0;
font-size: 0.75rem;
font-weight: bold;
color: $white;
white-space: nowrap;
@if has-value($progress-radius) {
border-radius: $progress-radius;
}
}
@mixin foundation-progress-bar {
// Progress bar
.progress {
@include progress-container;
@each $name, $color in $foundation-palette {
&.#{$name} {
.progress-meter {
background-color: $color;
}
}
}
}
// Inner meter
.progress-meter {
@include progress-meter;
}
// Inner meter text
.progress-meter-text {
@include progress-meter-text;
}
}

View file

@ -0,0 +1,172 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group reveal
////
/// Default background color of a modal.
/// @type Color
$reveal-background: $white !default;
/// Default width of a modal, with no class applied.
/// @type Number
$reveal-width: 600px !default;
/// Default maximum width of a modal.
/// @type Number
$reveal-max-width: $global-width !default;
/// Default padding inside a modal.
/// @type Number
$reveal-padding: $global-padding !default;
/// Default border around a modal.
/// @type Number
$reveal-border: 1px solid $medium-gray !default;
/// Default radius for modal.
/// @type Number
$reveal-radius: $global-radius !default;
/// z-index for modals. The overlay uses this value, while the modal itself uses this value plus one.
/// @type Number
$reveal-zindex: 1005 !default;
/// Background color of modal overlays.
/// @type Color
$reveal-overlay-background: rgba($black, 0.45) !default;
/// Adds styles for a modal overlay.
/// @param {Color} $background [$reveal-overlay-background] - Background color of the overlay.
@mixin reveal-overlay {
display: none;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: $reveal-zindex;
background-color: $reveal-overlay-background;
overflow-y: scroll;
}
/// Adds base styles for a modal.
@mixin reveal-modal-base {
@include disable-mouse-outline;
display: none;
z-index: $reveal-zindex + 1;
padding: $reveal-padding;
border: $reveal-border;
background-color: $reveal-background;
border-radius: $reveal-radius;
@include breakpoint(medium) {
min-height: 0;
}
// Make sure rows don't have a min-width on them
.column,
.columns {
min-width: 0;
}
// Strip margins from the last item in the modal
> :last-child {
margin-bottom: 0;
}
}
/// Adjusts the width of a modal.
/// @param {Number} $width - Width of the modal. Generally a percentage.
/// @param {Number} $max-width [$reveal-max-width] - Maximum width of the modal.
@mixin reveal-modal-width(
$width: $reveal-width,
$max-width: $reveal-max-width
) {
@include breakpoint(medium) {
@extend %reveal-centered;
width: $width;
max-width: $reveal-max-width;
}
}
/// Creates a full-screen modal, which stretches the full width and height of the window.
@mixin reveal-modal-fullscreen {
// scss-lint:disable DuplicateProperty
top: 0;
left: 0;
width: 100%;
height: 100%;
height: 100vh;
min-height: 100vh;
max-width: none;
margin-left: 0;
border: 0;
border-radius: 0;
}
@mixin foundation-reveal {
// [TODO] Is this necessary?
// scss-lint:disable QualifyingElement
body.is-reveal-open {
overflow: hidden;
}
// html gets this class only in iOS
html.is-reveal-open,
html.is-reveal-open body {
height: 100%;
overflow: hidden;
user-select: none;
}
// Overlay
.reveal-overlay {
@include reveal-overlay;
}
// Modal container
.reveal {
@include reveal-modal-base;
@include reveal-modal-width($reveal-width);
position: relative;
top: 100px;
margin-left: auto;
margin-right: auto;
overflow-y: auto;
// Placeholder selector for medium-and-up modals
// Prevents duplicate CSS when defining multiple Reveal sizes
@include breakpoint(medium) {
%reveal-centered {
left: auto;
right: auto;
margin: 0 auto;
}
}
// Remove padding
&.collapse {
padding: 0;
}
// Sizing classes
&.tiny { @include reveal-modal-width(30%); }
&.small { @include reveal-modal-width(50%); }
&.large { @include reveal-modal-width(90%); }
// Full-screen mode
&.full {
@include reveal-modal-fullscreen;
}
@include breakpoint($-zf-zero-breakpoint only) {
@include reveal-modal-fullscreen;
}
&.without-overlay {
position: fixed;
}
}
}

View file

@ -0,0 +1,133 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// [TODO] Check how plugin confirms disabled or vertical status
// [TODO] Check if transition: all; is necessary
////
/// @group slider
////
/// Default slider width of a vertical slider. (Doesn't apply to the native slider.)
/// @type Number
$slider-width-vertical: 0.5rem !default;
/// Transition properties to apply to the slider handle and fill. (Doesn't apply to the native slider.)
/// @type Transition
$slider-transition: all 0.2s ease-in-out !default;
/// Adds the general styles for sliders.
@mixin slider-container {
position: relative;
height: $slider-height;
margin-top: 1.25rem;
margin-bottom: 2.25rem;
background-color: $slider-background;
cursor: pointer;
user-select: none;
touch-action: none;
}
/// Adds the general styles for active fill for sliders.
@mixin slider-fill {
position: absolute;
top: 0;
left: 0;
display: inline-block;
max-width: 100%;
height: $slider-height;
background-color: $slider-fill-background;
transition: $slider-transition;
&.is-dragging {
transition: all 0s linear;
}
}
/// Adds the general styles for the slider handles.
@mixin slider-handle {
@include disable-mouse-outline;
@include vertical-center;
position: absolute;
left: 0;
z-index: 1;
display: inline-block;
width: $slider-handle-width;
height: $slider-handle-height;
background-color: $slider-handle-background;
transition: $slider-transition;
touch-action: manipulation;
border-radius: $slider-radius;
&:hover {
background-color: scale-color($slider-handle-background, $lightness: -15%);
}
&.is-dragging {
transition: all 0s linear;
}
}
@mixin slider-disabled {
opacity: $slider-opacity-disabled;
cursor: not-allowed;
}
@mixin slider-vertical {
display: inline-block;
width: $slider-width-vertical;
height: 12.5rem;
margin: 0 1.25rem;
transform: scale(1, -1);
.slider-fill {
top: 0;
width: $slider-width-vertical;
max-height: 100%;
}
.slider-handle {
position: absolute;
top: 0;
left: 50%;
width: $slider-handle-height;
height: $slider-handle-width;
transform: translateX(-50%);
}
}
@mixin foundation-slider {
// Container
.slider {
@include slider-container;
}
// Fill area
.slider-fill {
@include slider-fill;
}
// Draggable handle
.slider-handle {
@include slider-handle;
}
// Disabled state
.slider.disabled,
.slider[disabled] {
@include slider-disabled;
}
// Vertical slider
.slider.vertical {
@include slider-vertical;
}
// RTL support
@if $global-text-direction == rtl {
.slider:not(.vertical) {
transform: scale(-1, 1);
}
}
}

View file

@ -0,0 +1,38 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@mixin foundation-sticky {
.sticky-container {
position: relative;
}
.sticky {
position: absolute;
z-index: 0;
transform: translate3d(0, 0, 0);
}
.sticky.is-stuck {
position: fixed;
z-index: 5;
&.is-at-top {
top: 0;
}
&.is-at-bottom {
bottom: 0;
}
}
.sticky.is-anchored {
position: absolute;
left: auto;
right: auto;
&.is-at-bottom {
bottom: 0;
}
}
}

View file

@ -0,0 +1,232 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group switch
////
/// Background color of a switch.
/// @type Color
$switch-background: $medium-gray !default;
/// Background active color of a switch.
/// @type Color
$switch-background-active: $primary-color !default;
/// Height of a switch, with no class applied.
/// @type Number
$switch-height: 2rem !default;
/// Height of a switch with .tiny class.
/// @type Number
$switch-height-tiny: 1.5rem !default;
/// Height of a switch with .small class.
/// @type Number
$switch-height-small: 1.75rem !default;
/// Height of a switch with .large class.
/// @type Number
$switch-height-large: 2.5rem !default;
/// Border radius of the switch
/// @type Number
$switch-radius: $global-radius !default;
/// border around a modal.
/// @type Number
$switch-margin: $global-margin !default;
/// Background color for the switch container and paddle.
/// @type Color
$switch-paddle-background: $white !default;
/// Spacing between a switch paddle and the edge of the body.
/// @type Number
$switch-paddle-offset: 0.25rem !default;
/// border radius of the switch paddle
/// @type Number
$switch-paddle-radius: $global-radius !default;
/// switch transition.
/// @type Number
$switch-paddle-transition: all 0.25s ease-out !default;
// make them variables
// ask about accessibility on label
// change class name for text
/// Adds styles for a switch container. Apply this to a container class.
@mixin switch-container {
margin-bottom: $switch-margin;
outline: 0;
position: relative;
user-select: none;
// These properties cascade down to the switch text
color: $white;
font-weight: bold;
font-size: rem-calc(14);
}
/// Adds styles for a switch input. Apply this to an `<input>` within a switch.
@mixin switch-input {
opacity: 0;
position: absolute;
}
/// Adds styles for the background and paddle of a switch. Apply this to a `<label>` within a switch.
@mixin switch-paddle {
background: $switch-background;
cursor: pointer;
display: block;
position: relative;
width: 4rem;
height: $switch-height;
transition: $switch-paddle-transition;
border-radius: $switch-radius;
// Resetting these <label> presets so type styles cascade down
color: inherit;
font-weight: inherit;
// Needed to override specificity
input + & {
margin: 0;
}
// The paddle itself
&::after {
background: $switch-paddle-background;
content: '';
display: block;
position: absolute;
height: 1.5rem;
#{$global-left}: 0.25rem;
top: 0.25rem;
width: 1.5rem;
transition: $switch-paddle-transition;
transform: translate3d(0, 0, 0);
border-radius: $switch-paddle-radius;
}
// Change the visual style when the switch is active
input:checked ~ & {
background: $switch-background-active;
&::after {
#{$global-left}: 2.25rem;
}
}
input:focus ~ & {
@include disable-mouse-outline;
}
}
/// Adds base styles for active/inactive text inside a switch. Apply this to text elements inside the switch `<label>`.
@mixin switch-text {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
/// Adds styles for the active state text within a switch.
@mixin switch-text-active {
#{$global-left}: 8%;
display: none;
input:checked + label > & {
display: block;
}
}
/// Adds styles for the inactive state text within a switch.
@mixin switch-text-inactive {
#{$global-right}: 15%;
input:checked + label > & {
display: none;
}
}
/// Changes the size of a switch by modifying the size of the body and paddle. Apply this to a switch container.
/// @param {Number} $font-size [1rem] - Font size of label text within the switch.
/// @param {Number} $width [4rem] - Width of the switch body.
/// @param {Number} $height [2rem] - Height of the switch body.
/// @param {Number} $paddle-width [1.5rem] - Width of the switch paddle.
/// @param {Number} $paddle-offset [0.25rem] - Spacing between the switch paddle and the edge of the switch body.
@mixin switch-size(
$font-size: 1rem,
$width: 4rem,
$height: 2rem,
$paddle-width: 1.5rem,
$paddle-offset: 0.25rem
) {
$paddle-height: $height - ($paddle-offset * 2);
$paddle-left-active: $width - $paddle-width - $paddle-offset;
.switch-paddle {
width: $width;
height: $height;
font-size: $font-size;
}
.switch-paddle::after {
width: $paddle-width;
height: $paddle-height;
}
input:checked ~ .switch-paddle::after {
#{$global-left}: $paddle-left-active;
}
}
@mixin foundation-switch {
// Container class
.switch {
@include switch-container;
}
// <input> element
.switch-input {
@include switch-input;
}
// <label> element
.switch-paddle {
@include switch-paddle;
}
// Base label text styles
%switch-text {
@include switch-text;
}
// Active label text styles
.switch-active {
@extend %switch-text;
@include switch-text-active;
}
// Inactive label text styles
.switch-inactive {
@extend %switch-text;
@include switch-text-inactive;
}
// Switch sizes
.switch.tiny {
@include switch-size(rem-calc(10), 3rem, $switch-height-tiny, 1rem, $switch-paddle-offset);
}
.switch.small {
@include switch-size(rem-calc(12), 3.5rem, $switch-height-small, 1.25rem, $switch-paddle-offset);
}
.switch.large {
@include switch-size(rem-calc(16), 5rem, $switch-height-large, 2rem, $switch-paddle-offset);
}
}

View file

@ -0,0 +1,234 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
// scss-lint:disable MergeableSelector, QualifyingElement
////
/// @group table
////
/// Default color for table background.
/// @type Color
$table-background: $white !default;
/// Default scale for darkening the striped table rows and the table border.
/// @type Number
$table-color-scale: 5% !default;
/// Default style for table border.
/// @type List
$table-border: 1px solid smart-scale($table-background, $table-color-scale) !default;
/// Default padding for table.
/// @type Number
$table-padding: rem-calc(8 10 10) !default;
/// Default scale for darkening the table rows on hover.
/// @type Number
$table-hover-scale: 2% !default;
/// Default color of standard rows on hover.
/// @type List
$table-row-hover: darken($table-background, $table-hover-scale) !default;
/// Default color of striped rows on hover.
/// @type List
$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale) !default;
/// Default background color for striped rows.
/// @type Color
$table-striped-background: smart-scale($table-background, $table-color-scale) !default;
/// Default value for showing the stripe on rows of the tables, excluding the header and footer. If even, the even rows will have a background color. If odd, the odd rows will have a background color. If empty, or any other value, the table rows will have no striping.
/// @type Keyword
$table-stripe: even !default;
/// Default color for header background.
/// @type Color
$table-head-background: smart-scale($table-background, $table-color-scale / 2) !default;
/// Default color for footer background.
/// @type Color
$table-foot-background: smart-scale($table-background, $table-color-scale) !default;
/// Default font color for header.
/// @type Color
$table-head-font-color: $body-font-color !default;
/// Default value for showing the header when using stacked tables.
/// @type Boolean
$show-header-for-stacked: false !default;
@mixin -zf-table-children-styles($stripe: $table-stripe) {
thead,
tbody,
tfoot {
border: $table-border;
background-color: $table-background;
}
// Caption
caption {
font-weight: $global-weight-bold;
padding: $table-padding;
}
// Table head and foot
thead,
tfoot {
background: $table-head-background;
color: $table-head-font-color;
// Rows within head and foot
tr {
background: transparent;
}
// Cells within head and foot
th,
td {
padding: $table-padding;
font-weight: $global-weight-bold;
text-align: #{$global-left};
}
}
// Table rows
tbody {
tr {
// If stripe is set to even, darken the even rows.
@if $stripe == even {
&:nth-child(even) {
background-color: $table-striped-background;
}
}
// If stripe is set to odd, darken the odd rows.
@else if $stripe == odd {
&:nth-child(odd) {
background-color: $table-striped-background;
}
}
}
th,
td {
padding: $table-padding;
}
}
}
/// Adds the general styles for tables.
/// @param {Keyword} $stripe [$table-stripe] - Uses keywords even, odd, or none to darken rows of the table. The default value is even.
@mixin table(
$stripe: $table-stripe,
$nest: false
) {
width: 100%;
margin-bottom: $global-margin;
border-radius: $global-radius;
@if $nest {
@include -zf-table-children-styles($stripe);
}
@else {
@at-root {
@include -zf-table-children-styles($stripe);
}
}
}
/// Adds the ability to horizontally scroll the table when the content overflows horizontally.
@mixin table-scroll {
display: block;
width: 100%;
overflow-x: auto;
}
/// Slightly darkens the table rows on hover.
@mixin table-hover {
tr {
//Darkens the non-striped table rows on hover.
&:hover {
background-color: $table-row-hover;
}
//Darkens the even striped table rows.
@if($table-stripe == even) {
&:nth-of-type(even):hover {
background-color: $table-row-stripe-hover;
}
}
//Darkens the odd striped table rows.
@elseif($table-stripe == odd) {
&:nth-of-type(odd):hover {
background-color: $table-row-stripe-hover;
}
}
}
}
/// Adds styles for a stacked table. Useful for small-screen layouts.
/// @param {Boolean} $header [$show-header-for-stacked] - Show the first th of header when stacked.
@mixin table-stack($header: $show-header-for-stacked) {
@if $header {
thead {
th:first-child {
display: block;
}
th {
display: none;
}
}
}
@else {
thead {
display: none;
}
}
tfoot {
display: none;
}
tr,
th,
td {
display: block;
}
td {
border-top: 0;
}
}
@mixin foundation-table($nest: false) {
table {
@include table($nest: $nest);
}
table.stack {
@include breakpoint(medium down) {
@include table-stack;
}
}
table.scroll {
@include table-scroll;
}
table.hover {
@include table-hover;
}
.table-scroll {
overflow-x: auto;
table {
width: auto;
}
}
}

View file

@ -0,0 +1,165 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group tabs
////
/// Default margin of the tab bar.
/// @type Number
$tab-margin: 0 !default;
/// Default background color of a tab bar.
/// @type Color
$tab-background: $white !default;
/// active background color of a tab bar.
/// @type Color
$tab-background-active: $light-gray !default;
/// Font size of tab items.
/// @type Number
$tab-item-font-size: rem-calc(12) !default;
/// Default background color on hover for items in a Menu.
$tab-item-background-hover: $white !default;
/// Default padding of a tab item.
/// @type Number
$tab-item-padding: 1.25rem 1.5rem !default;
/// Maximum number of `expand-n` classes to include in the CSS.
/// @type Number
$tab-expand-max: 6 !default;
/// Default background color of tab content.
/// @type Color
$tab-content-background: $white !default;
/// Default border color of tab content.
/// @type Color
$tab-content-border: $light-gray !default;
/// Default text color of tab content.
/// @type Color
$tab-content-color: foreground($tab-background, $primary-color) !default;
/// Default padding for tab content.
/// @type Number | List
$tab-content-padding: 1rem !default;
/// Adds styles for a tab container. Apply this to a `<ul>`.
@mixin tabs-container {
@include clearfix;
margin: $tab-margin;
list-style-type: none;
background: $tab-background;
border: 1px solid $tab-content-border;
}
/// Augments a tab container to have vertical tabs. Use this in conjunction with `tabs-container()`.
@mixin tabs-container-vertical {
> li {
width: auto;
float: none;
display: block;
}
}
/// Adds styles for the links within a tab container. Apply this to the `<li>` elements inside a tab container.
@mixin tabs-title {
float: #{$global-left};
> a {
display: block;
padding: $tab-item-padding;
line-height: 1;
font-size: $tab-item-font-size;
&:hover {
background: $tab-item-background-hover;
}
&:focus,
&[aria-selected='true'] {
background: $tab-background-active;
}
}
}
/// Adds styles for the wrapper that surrounds a tab group's content panes.
@mixin tabs-content {
background: $tab-content-background;
transition: all 0.5s ease;
border: 1px solid $tab-content-border;
border-top: 0;
}
/// Augments a tab content container to have a vertical style, by shifting the border around. Use this in conjunction with `tabs-content()`.
@mixin tabs-content-vertical {
border: 1px solid $tab-content-border;
border-#{$global-left}: 0;
}
/// Adds styles for an individual tab content panel within the tab content container.
@mixin tabs-panel {
display: none;
padding: $tab-content-padding;
&.is-active {
display: block;
}
}
@mixin foundation-tabs {
.tabs {
@include tabs-container;
}
// Vertical
.tabs.vertical {
@include tabs-container-vertical;
}
// Simple
.tabs.simple {
> li > a {
padding: 0;
&:hover {
background: transparent;
}
}
}
// Primary color
.tabs.primary {
background: $primary-color;
> li > a {
color: foreground($primary-color);
&:hover,
&:focus {
background: smart-scale($primary-color);
}
}
}
.tabs-title {
@include tabs-title;
}
.tabs-content {
@include tabs-content;
}
.tabs-content.vertical {
@include tabs-content-vertical;
}
.tabs-panel {
@include tabs-panel;
}
}

View file

@ -0,0 +1,54 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group thumbnail
////
/// Border around thumbnail images.
/// @type Border
$thumbnail-border: solid 4px $white !default;
/// Bottom margin for thumbnail images.
/// @type Length
$thumbnail-margin-bottom: $global-margin !default;
/// Box shadow under thumbnail images.
/// @type Shadow
$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2) !default;
/// Box shadow under thumbnail images.
/// @type Shadow
$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5) !default;
/// Transition proprties for thumbnail images.
/// @type Transition
$thumbnail-transition: box-shadow 200ms ease-out !default;
/// Default radius for thumbnail images.
/// @type Number
$thumbnail-radius: $global-radius !default;
/// Adds thumbnail styles to an element.
@mixin thumbnail {
border: $thumbnail-border;
box-shadow: $thumbnail-shadow;
display: inline-block;
line-height: 0;
max-width: 100%;
transition: $thumbnail-transition;
border-radius: $thumbnail-radius;
margin-bottom: $thumbnail-margin-bottom;
&:hover,
&:focus {
box-shadow: $thumbnail-shadow-hover;
}
}
@mixin foundation-thumbnail {
.thumbnail {
@include thumbnail;
}
}

View file

@ -0,0 +1,89 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group title-bar
////
/// Background color of a title bar.
/// @type Color
$titlebar-background: $black !default;
/// Color of text inside a title bar.
/// @type Color
$titlebar-color: $white !default;
/// Padding inside a title bar.
/// @type Length
$titlebar-padding: 0.5rem !default;
/// Font weight of text inside a title bar.
/// @type Weight
$titlebar-text-font-weight: bold !default;
/// Color of menu icons inside a title bar.
/// @type Color
$titlebar-icon-color: $white !default;
/// Color of menu icons inside a title bar on hover.
/// @type Color
$titlebar-icon-color-hover: $medium-gray !default;
/// Spacing between the menu icon and text inside a title bar.
/// @type Length
$titlebar-icon-spacing: 0.25rem !default;
@mixin foundation-title-bar {
.title-bar {
background: $titlebar-background;
color: $titlebar-color;
padding: $titlebar-padding;
@if $global-flexbox {
display: flex;
align-items: center;
justify-content: space-between;
}
@else {
@include clearfix;
}
.menu-icon {
margin-#{$global-left}: $titlebar-icon-spacing;
margin-#{$global-right}: $titlebar-icon-spacing;
}
}
@if $global-flexbox {
// scss-lint:disable ZeroUnit
.title-bar-left,
.title-bar-right {
flex: 1 1 0px;
}
.title-bar-right {
text-align: right;
}
}
@else {
.title-bar-left {
float: left;
}
.title-bar-right {
float: right;
text-align: right;
}
}
.title-bar-title {
font-weight: $titlebar-text-font-weight;
vertical-align: middle;
display: inline-block;
}
.menu-icon.dark {
@include hamburger;
}
}

View file

@ -0,0 +1,104 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group tooltip
////
/// Default font weight of the defined term.
/// @type Keyword | Number
$has-tip-font-weight: $global-weight-bold !default;
/// Default border bottom of the defined term.
/// @type List
$has-tip-border-bottom: dotted 1px $dark-gray !default;
/// Default color of the tooltip background.
/// @type Color
$tooltip-background-color: $black !default;
/// Default color of the tooltip font.
/// @type Color
$tooltip-color: $white !default;
/// Default padding of the tooltip background.
/// @type Number
$tooltip-padding: 0.75rem !default;
/// Default font size of the tooltip text. By default, we recommend a smaller font size than the body copy.
/// @type Number
$tooltip-font-size: $small-font-size !default;
/// Default pip width for tooltips.
/// @type Number
$tooltip-pip-width: 0.75rem !default;
/// Default pip height for tooltips. This is helpful for calculating the distance of the tooltip from the tooltip word.
/// @type Number
$tooltip-pip-height: $tooltip-pip-width * 0.866 !default;
/// Default radius for tooltips.
/// @type Number
$tooltip-radius: $global-radius !default;
@mixin has-tip {
border-bottom: $has-tip-border-bottom;
font-weight: $has-tip-font-weight;
position: relative;
display: inline-block;
cursor: help;
}
@mixin tooltip {
background-color: $tooltip-background-color;
color: $tooltip-color;
font-size: $tooltip-font-size;
padding: $tooltip-padding;
position: absolute;
z-index: 10;
top: calc(100% + #{$tooltip-pip-height});
max-width: 10rem !important;
border-radius: $tooltip-radius;
&::before {
@include css-triangle($tooltip-pip-width, $tooltip-background-color, up);
bottom: 100%;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
&.top::before {
@include css-triangle($tooltip-pip-width, $tooltip-background-color, down);
top: 100%;
bottom: auto;
}
&.left::before {
@include css-triangle($tooltip-pip-width, $tooltip-background-color, right);
bottom: auto;
left: 100%;
top: 50%;
transform: translateY(-50%);
}
&.right::before {
@include css-triangle($tooltip-pip-width, $tooltip-background-color, left);
bottom: auto;
left: auto;
right: 100%;
top: 50%;
transform: translateY(-50%);
}
}
@mixin foundation-tooltip {
.has-tip {
@include has-tip;
}
.tooltip {
@include tooltip;
}
}

View file

@ -0,0 +1,168 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group top-bar
////
/// Padding for the top bar.
/// @type Number
$topbar-padding: 0.5rem !default;
/// Background color for the top bar. This color also cascades to menus within the top bar.
/// @type Color
$topbar-background: $light-gray !default;
/// Background color submenus within the top bar. Usefull if $topbar-background is transparent.
/// @type Color
$topbar-submenu-background: $topbar-background !default;
/// Spacing for the top bar title.
/// @type Number
$topbar-title-spacing: 1rem !default;
/// Maximum width of `<input>` elements inside the top bar.
/// @type Number
$topbar-input-width: 200px !default;
/// Breakpoint at which top bar switches from mobile to desktop view.
/// @type Breakpoint
$topbar-unstack-breakpoint: medium !default;
/// Adds styles for a top bar container.
@mixin top-bar-container {
@if $global-flexbox {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: nowrap;
}
@else {
@include clearfix;
}
padding: $topbar-padding;
&,
ul {
background-color: $topbar-background;
}
// Check if $topbar-background is differnt from $topbar-background-submenu
@if ($topbar-background != $topbar-submenu-background) {
ul ul {
background-color: $topbar-submenu-background;
}
}
// Restrain width of inputs by default to make them easier to arrange
input {
max-width: $topbar-input-width;
margin-#{$global-right}: 1rem;
}
// The above styles shouldn't apply to input group fields
.input-group-field {
width: 100%;
margin-#{$global-right}: 0;
}
// scss-lint:disable QualifyingElement
input.button {
width: auto;
}
}
/// Makes sections of a top bar stack on top of each other.
@mixin top-bar-stacked {
@if $global-flexbox {
flex-wrap: wrap;
// Sub-sections
.top-bar-left,
.top-bar-right {
flex: 0 0 100%;
max-width: 100%;
}
}
@else {
// Sub-sections
.top-bar-left,
.top-bar-right {
width: 100%;
}
}
}
/// Undoes the CSS applied by the `top-bar-stacked()` mixin.
@mixin top-bar-unstack {
@if $global-flexbox {
flex-wrap: nowrap;
// scss-lint:disable ZeroUnit
.top-bar-left,
.top-bar-right {
flex: 1 1 0px;
}
}
@else {
.top-bar-left,
.top-bar-right {
width: auto;
}
}
}
@mixin foundation-top-bar {
// Top bar container
.top-bar {
@include top-bar-container;
// Stack on small screens by default
@include top-bar-stacked;
@include breakpoint($topbar-unstack-breakpoint) {
@include top-bar-unstack;
}
// Generate classes for stacking on each screen size (defined in $breakpoint-classes)
@each $size in $breakpoint-classes {
@if $size != $-zf-zero-breakpoint {
&.stacked-for-#{$size} {
@include breakpoint($size down) {
@include top-bar-stacked;
}
}
}
}
}
// Sub-sections
@if $global-flexbox {
.top-bar-title {
flex: 0 0 auto;
margin-right: $topbar-title-spacing;
}
.top-bar-left,
.top-bar-right {
flex: 0 0 auto;
}
}
@else {
.top-bar-title {
float: left;
margin-right: $topbar-title-spacing;
}
.top-bar-left {
float: left;
}
.top-bar-right {
float: right;
}
}
}

View file

@ -0,0 +1,132 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
/// Hide an element by default, only displaying it above a certain screen size.
/// @param {Keyword} $size - Breakpoint to use. **Must be a breakpoint defined in `$breakpoints`.**
@mixin show-for($size) {
$size: map-get($breakpoints, $size);
$size: -zf-bp-to-em($size) - (1 / 16);
@include breakpoint($size down) {
display: none !important;
}
}
/// Hide an element by default, only displaying it within a certain breakpoint.
/// @param {Keyword} $size - Breakpoint to use. **Must be a breakpoint defined in `$breakpoints`.**
@mixin show-for-only($size) {
$lower-bound-size: map-get($breakpoints, $size);
$upper-bound-size: -zf-map-next($breakpoints, $size);
// more often than not this will be correct, just one time round the loop it won't so set in scope here
$lower-bound: -zf-bp-to-em($lower-bound-size) - (1 / 16);
// test actual lower-bound-size, if 0 set it to 0em
@if strip-unit($lower-bound-size) == 0 {
$lower-bound: -zf-bp-to-em($lower-bound-size);
}
@if $upper-bound-size == null {
@media screen and (max-width: $lower-bound) {
display: none !important;
}
}
@else {
$upper-bound: -zf-bp-to-em($upper-bound-size);
@media screen and (max-width: $lower-bound), screen and (min-width: $upper-bound) {
display: none !important;
}
}
}
/// Show an element by default, and hide it above a certain screen size.
/// @param {Keyword} $size - Breakpoint to use. **Must be a breakpoint defined in `$breakpoints`.**
@mixin hide-for($size) {
@include breakpoint($size) {
display: none !important;
}
}
/// Show an element by default, and hide it above a certain screen size.
/// @param {Keyword} $size - Breakpoint to use. **Must be a breakpoint defined in `$breakpoints`.**
@mixin hide-for-only($size) {
@include breakpoint($size only) {
display: none !important;
}
}
@mixin foundation-visibility-classes {
// Basic hiding classes
.hide {
display: none !important;
}
.invisible {
visibility: hidden;
}
// Responsive visibility classes
@each $size in $breakpoint-classes {
@if $size != $-zf-zero-breakpoint {
.hide-for-#{$size} {
@include hide-for($size);
}
.show-for-#{$size} {
@include show-for($size);
}
}
.hide-for-#{$size}-only {
@include hide-for-only($size);
}
.show-for-#{$size}-only {
@include show-for-only($size);
}
}
// Screen reader visibility classes
// Need a "hide-for-sr" class? Add aria-hidden='true' to the element
.show-for-sr,
.show-on-focus {
@include element-invisible;
}
// Only display the element when it's focused
.show-on-focus {
&:active,
&:focus {
@include element-invisible-off;
}
}
// Landscape and portrait visibility
.show-for-landscape,
.hide-for-portrait {
display: block !important;
@include breakpoint(landscape) {
display: block !important;
}
@include breakpoint(portrait) {
display: none !important;
}
}
.hide-for-landscape,
.show-for-portrait {
display: none !important;
@include breakpoint(landscape) {
display: none !important;
}
@include breakpoint(portrait) {
display: block !important;
}
}
}

View file

@ -0,0 +1,40 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
@mixin foundation-form-checkbox {
[type='file'],
[type='checkbox'],
[type='radio'] {
margin: 0 0 $form-spacing;
}
// Styles for input/label siblings
[type='checkbox'] + label,
[type='radio'] + label {
display: inline-block;
margin-#{$global-left}: $form-spacing * 0.5;
margin-#{$global-right}: $form-spacing;
margin-bottom: 0;
vertical-align: baseline;
&[for] {
cursor: pointer;
}
}
// Styles for inputs inside labels
label > [type='checkbox'],
label > [type='radio'] {
margin-#{$global-right}: $form-spacing * 0.5;
}
// Normalize file input width
[type='file'] {
width: 100%;
}
}

View file

@ -0,0 +1,84 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group abide
////
/// Sets if error styles should be added to inputs.
/// @type Boolean
$abide-inputs: true !default;
/// Sets if error styles should be added to labels.
/// @type Boolean
$abide-labels: true !default;
/// Background color to use for invalid text inputs.
/// @type Color
$input-background-invalid: map-get($foundation-palette, alert) !default;
/// Color to use for labels of invalid inputs.
/// @type Color
$form-label-color-invalid: map-get($foundation-palette, alert) !default;
/// Default font color for form error text.
/// @type Color
$input-error-color: map-get($foundation-palette, alert) !default;
/// Default font size for form error text.
/// @type Number
$input-error-font-size: rem-calc(12) !default;
/// Default font weight for form error text.
/// @type Keyword
$input-error-font-weight: $global-weight-bold !default;
/// Styles the background and border of an input field to have an error state.
///
/// @param {Color} $background [$alert-color] - Color to use for the background and border.
/// @param {Number} $background-alpha [0.1] - Transparency level of the background color.
@mixin form-input-error(
$background: $input-background-invalid,
$background-alpha: 0.1
) {
&:not(:focus) {
background-color: rgba($background, $background-alpha);
border-color: $background;
}
}
/// Adds error styles to a form element, using the values in the settings file.
@mixin form-error {
display: none;
margin-top: $form-spacing * -0.5;
margin-bottom: $form-spacing;
font-size: $input-error-font-size;
font-weight: $input-error-font-weight;
color: $input-error-color;
}
@mixin foundation-form-error {
@if $abide-inputs {
// Error class for invalid inputs
.is-invalid-input {
@include form-input-error;
}
}
@if $abide-labels {
// Error class for labels of invalid outputs
.is-invalid-label {
color: $form-label-color-invalid;
}
}
// Form error element
.form-error {
@include form-error;
&.is-visible {
display: block;
}
}
}

View file

@ -0,0 +1,54 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Default border around custom fieldsets.
/// @type Border
$fieldset-border: 1px solid $medium-gray !default;
/// Default padding inside custom fieldsets.
/// @type Number
$fieldset-padding: rem-calc(20) !default;
/// Default margin around custom fieldsets.
/// @type Number
$fieldset-margin: rem-calc(18 0) !default;
/// Default padding between the legend text and fieldset border.
/// @type Number
$legend-padding: rem-calc(0 3) !default;
@mixin fieldset {
border: $fieldset-border;
padding: $fieldset-padding;
margin: $fieldset-margin;
legend {
// Covers up the fieldset's border to create artificial padding
background: $body-background;
padding: $legend-padding;
margin: 0;
margin-#{$global-left}: rem-calc(-3);
}
}
@mixin foundation-form-fieldset {
fieldset {
border: 0;
padding: 0;
margin: 0;
}
legend {
margin-bottom: $form-spacing * 0.5;
max-width: 100%;
}
.fieldset {
@include fieldset;
}
}

View file

@ -0,0 +1,34 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Global spacing for form elements.
/// @type Number
$form-spacing: rem-calc(16) !default;
@import 'text';
@import 'checkbox';
@import 'label';
@import 'help-text';
@import 'input-group';
@import 'fieldset';
@import 'select';
@import 'range';
@import 'progress';
@import 'meter';
@import 'error';
@mixin foundation-forms {
@include foundation-form-text;
@include foundation-form-checkbox;
@include foundation-form-label;
@include foundation-form-helptext;
@include foundation-form-prepostfix;
@include foundation-form-fieldset;
@include foundation-form-select;
@include foundation-form-error;
}

View file

@ -0,0 +1,30 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Default color for help text.
/// @type Color
$helptext-color: $black !default;
/// Default font size for help text.
/// @type Number
$helptext-font-size: rem-calc(13) !default;
/// Default font style for help text.
/// @type Keyword
$helptext-font-style: italic !default;
@mixin foundation-form-helptext {
.help-text {
$margin-top: ($form-spacing * 0.5) * -1;
margin-top: $margin-top;
font-size: $helptext-font-size;
font-style: $helptext-font-style;
color: $helptext-color;
}
}

View file

@ -0,0 +1,128 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Color of labels prefixed to an input.
/// @type Color
$input-prefix-color: $black !default;
/// Background color of labels prefixed to an input.
/// @type Color
$input-prefix-background: $light-gray !default;
/// Border around labels prefixed to an input.
/// @type Border
$input-prefix-border: 1px solid $medium-gray !default;
/// Left/right padding of an pre/postfixed input label
$input-prefix-padding: 1rem !default;
@mixin foundation-form-prepostfix {
$height: ($input-font-size + $form-spacing * 1.5);
.input-group {
display: if($global-flexbox, flex, table);
width: 100%;
margin-bottom: $form-spacing;
@if $global-flexbox {
align-items: stretch;
}
> :first-child {
border-radius: if($global-text-direction == rtl, 0 $global-radius $global-radius 0, $global-radius 0 0 $global-radius);
}
> :last-child {
> * {
border-radius: if($global-text-direction == rtl, $global-radius 0 0 $global-radius, 0 $global-radius $global-radius 0);
}
}
}
%input-group-child {
margin: 0;
white-space: nowrap;
@if not $global-flexbox {
display: table-cell;
vertical-align: middle;
}
}
.input-group-label {
@extend %input-group-child;
text-align: center;
padding: 0 $input-prefix-padding;
background: $input-prefix-background;
color: $input-prefix-color;
border: $input-prefix-border;
white-space: nowrap;
@if $global-flexbox {
flex: 0 0 auto;
display: flex;
align-items: center;
}
@else {
width: 1%;
height: 100%;
}
@if has-value($input-prefix-border) {
&:first-child {
border-#{$global-right}: 0;
}
&:last-child {
border-#{$global-left}: 0;
}
}
}
.input-group-field {
@extend %input-group-child;
border-radius: 0;
// scss-lint:disable ZeroUnit
@if $global-flexbox {
flex: 1 1 0px;
width: auto;
height: auto;
}
@else {
height: $height;
}
}
.input-group-button {
@extend %input-group-child;
padding-top: 0;
padding-bottom: 0;
text-align: center;
@if $global-flexbox {
flex: 0 0 auto;
}
@else {
height: 100%;
width: 1%;
}
a,
input,
button {
margin: 0;
}
}
// Specificity bump needed to prevent override by buttons
// scss-lint:disable QualifyingSelector
.input-group .input-group-button {
display: table-cell;
}
}

View file

@ -0,0 +1,48 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Color for form labels.
/// @type Color
$form-label-color: $black !default;
/// Font size for form labels.
/// @type Number
$form-label-font-size: rem-calc(14) !default;
/// Font weight for form labels.
/// @type Keyword
$form-label-font-weight: $global-weight-normal !default;
/// Line height for form labels. The higher the number, the more space between the label and its input field.
/// @type Number
$form-label-line-height: 1.8 !default;
@mixin form-label {
display: block;
margin: 0;
font-size: $form-label-font-size;
font-weight: $form-label-font-weight;
line-height: $form-label-line-height;
color: $form-label-color;
}
@mixin form-label-middle {
$input-border-width: get-border-value($input-border, width);
margin: 0 0 $form-spacing;
padding: ($form-spacing / 2 + rem-calc($input-border-width)) 0;
}
@mixin foundation-form-label {
label {
@include form-label;
&.middle {
@include form-label-middle;
}
}
}

View file

@ -0,0 +1,109 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group meter
////
/// Height of a `<meter>` element.
/// @type Length
$meter-height: 1rem !default;
/// Border radius of a `<meter>` element.
/// @type Length
$meter-radius: $global-radius !default;
/// Background color of a `<meter>` element.
/// @type Color
$meter-background: $medium-gray !default;
/// Meter fill for an optimal value in a `<meter>` element.
/// @type Color
$meter-fill-good: $success-color !default;
/// Meter fill for an average value in a `<meter>` element.
/// @type Color
$meter-fill-medium: $warning-color !default;
/// Meter fill for a suboptimal value in a `<meter>` element.
/// @type Color
$meter-fill-bad: $alert-color !default;
@mixin foundation-meter-element {
meter {
-webkit-appearance: none;
-moz-appearance: none;
display: block;
width: 100%;
height: $meter-height;
margin-bottom: 1rem;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
// For Firefox
background: $meter-background;
border: 0;
// Chrome/Safari
&::-webkit-meter-bar {
background: $meter-background;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&::-webkit-meter-inner-element {
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&::-webkit-meter-optimum-value {
background: $meter-fill-good;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&::-webkit-meter-suboptimum-value {
background: $meter-fill-medium;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&::-webkit-meter-even-less-good-value {
background: $meter-fill-bad;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&::-moz-meter-bar {
background: $primary-color;
@if has-value($meter-radius) {
border-radius: $meter-radius;
}
}
&:-moz-meter-optimum::-moz-meter-bar {
background: $meter-fill-good;
}
&:-moz-meter-sub-optimum::-moz-meter-bar {
background: $meter-fill-medium;
}
&:-moz-meter-sub-sub-optimum::-moz-meter-bar {
background: $meter-fill-bad;
}
}
}

View file

@ -0,0 +1,85 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group progress-bar
////
/// Height of a progress bar.
/// @type Number
$progress-height: 1rem !default;
/// Background color of a progress bar.
/// @type Color
$progress-background: $medium-gray !default;
/// Bottom margin of a progress bar.
/// @type Number
$progress-margin-bottom: $global-margin !default;
/// Default color of a progress bar's meter.
/// @type Color
$progress-meter-background: $primary-color !default;
/// Default radius of a progress bar.
/// @type Number
$progress-radius: $global-radius !default;
@mixin foundation-progress-element {
progress {
-webkit-appearance: none;
-moz-appearance: none;
display: block;
width: 100%;
height: $progress-height;
margin-bottom: $progress-margin-bottom;
@if hasvalue($progress-radius) {
border-radius: $progress-radius;
}
// For Firefox
background: $progress-background;
border: 0;
&::-webkit-progress-bar {
background: $progress-background;
@if hasvalue($progress-radius) {
border-radius: $progress-radius;
}
}
&::-webkit-progress-value {
background: $progress-meter-background;
@if hasvalue($progress-radius) {
border-radius: $progress-radius;
}
}
&::-moz-progress-bar {
background: $progress-meter-background;
@if hasvalue($progress-radius) {
border-radius: $progress-radius;
}
}
@each $name, $color in $foundation-palette {
&.#{$name} {
// Internet Explorer sets the fill with color
color: $color;
&::-webkit-progress-value {
background: $color;
}
&::-moz-progress-bar {
background: $color;
}
}
}
}
}

View file

@ -0,0 +1,144 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group slider
////
/// Default height of the slider.
/// @type Number
$slider-height: 0.5rem !default;
/// Default background color of the slider's track.
/// @type Color
$slider-background: $light-gray !default;
/// Default color of the active fill color of the slider.
/// @type Color
$slider-fill-background: $medium-gray !default;
/// Default height of the handle of the slider.
/// @type Number
$slider-handle-height: 1.4rem !default;
/// Default width of the handle of the slider.
/// @type Number
$slider-handle-width: 1.4rem !default;
/// Default color of the handle for the slider.
/// @type Color
$slider-handle-background: $primary-color !default;
/// Default fade amount of a disabled slider.
/// @type Number
$slider-opacity-disabled: 0.25 !default;
/// Default radius for slider.
/// @type Number
$slider-radius: $global-radius !default;
@mixin foundation-range-input {
// scss-lint:disable QualifyingElement
input[type="range"] {
$margin: ($slider-handle-height - $slider-height) / 2;
-webkit-appearance: none;
-moz-appearance: none;
display: block;
width: 100%;
height: auto;
cursor: pointer;
margin-top: $margin;
margin-bottom: $margin;
border: 0;
line-height: 1;
@if has-value($slider-radius) {
border-radius: $slider-radius;
}
&:focus {
outline: 0;
}
&[disabled] {
opacity: $slider-opacity-disabled;
}
// Chrome/Safari
&::-webkit-slider-runnable-track {
height: $slider-height;
background: $slider-background;
}
&::-webkit-slider-handle {
-webkit-appearance: none;
background: $slider-handle-background;
width: $slider-handle-width;
height: $slider-handle-height;
margin-top: -$margin;
@if has-value($slider-radius) {
border-radius: $slider-radius;
}
}
// Firefox
&::-moz-range-track {
-moz-appearance: none;
height: $slider-height;
background: $slider-background;
}
&::-moz-range-thumb {
-moz-appearance: none;
background: $slider-handle-background;
width: $slider-handle-width;
height: $slider-handle-height;
margin-top: -$margin;
@if has-value($slider-radius) {
border-radius: $slider-radius;
}
}
// Internet Explorer
&::-ms-track {
height: $slider-height;
background: $slider-background;
color: transparent;
border: 0;
overflow: visible;
border-top: $margin solid $body-background;
border-bottom: $margin solid $body-background;
}
&::-ms-thumb {
background: $slider-handle-background;
width: $slider-handle-width;
height: $slider-handle-height;
border: 0;
@if has-value($slider-radius) {
border-radius: $slider-radius;
}
}
&::-ms-fill-lower {
background: $slider-fill-background;
}
&::-ms-fill-upper {
background: $slider-background;
}
@at-root {
output {
line-height: $slider-handle-height;
vertical-align: middle;
margin-left: 0.5em;
}
}
}
}

View file

@ -0,0 +1,67 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Background color for select menus.
/// @type Color
$select-background: $white !default;
/// Color of the dropdown triangle inside select menus. Set to `transparent` to remove it entirely.
/// @type Color
$select-triangle-color: $dark-gray !default;
/// Default radius for select menus.
/// @type Color
$select-radius: $global-radius !default;
@mixin form-select {
$height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
height: $height;
padding: ($form-spacing / 2);
border: $input-border;
margin: 0 0 $form-spacing;
font-size: $input-font-size;
font-family: $input-font-family;
line-height: normal;
color: $input-color;
background-color: $select-background;
border-radius: $select-radius;
-webkit-appearance: none;
-moz-appearance: none;
@if $select-triangle-color != transparent {
@include background-triangle($select-triangle-color);
background-size: 9px 6px;
background-position: $global-right (-$form-spacing) center;
background-origin: content-box;
background-repeat: no-repeat;
padding-#{$global-right}: ($form-spacing * 1.5);
}
// Disabled state
&:disabled {
background-color: $input-background-disabled;
cursor: $input-cursor-disabled;
}
// Hide the dropdown arrow shown in newer IE versions
&::-ms-expand {
display: none;
}
&[multiple] {
height: auto;
background-image: none;
}
}
@mixin foundation-form-select {
select {
@include form-select;
}
}

View file

@ -0,0 +1,163 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group forms
////
/// Font color of text inputs.
/// @type Color
$input-color: $black !default;
/// Font color of placeholder text within text inputs.
/// @type Color
$input-placeholder-color: $medium-gray !default;
/// Font family of text inputs.
/// @type Font
$input-font-family: inherit !default;
/// Font size of text inputs.
/// @type Number
$input-font-size: rem-calc(16) !default;
/// Background color of text inputs.
/// @type Color
$input-background: $white !default;
/// Background color of focused of text inputs.
/// @type Color
$input-background-focus: $white !default;
/// Background color of disabled text inputs.
/// @type Color
$input-background-disabled: $light-gray !default;
/// Border around text inputs.
/// @type Border
$input-border: 1px solid $medium-gray !default;
/// Border around focused text inputs.
/// @type Color
$input-border-focus: 1px solid $dark-gray !default;
/// Box shadow inside text inputs when not focused.
/// @type Shadow
$input-shadow: inset 0 1px 2px rgba($black, 0.1) !default;
/// Box shadow outside text inputs when focused.
/// @type Shadow
$input-shadow-focus: 0 0 5px $medium-gray !default;
/// Cursor to use when hovering over a disabled text input.
/// @type Cursor
$input-cursor-disabled: not-allowed !default;
/// Properties to transition on text inputs.
/// @type Transition
$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out !default;
/// Enables the up/down buttons that Chrome and Firefox add to `<input type='number'>` elements.
/// @type Boolean
$input-number-spinners: true !default;
/// Radius for text inputs.
/// @type Border
$input-radius: $global-radius !default;
@mixin form-element {
$height: ($input-font-size + ($form-spacing * 1.5) - rem-calc(1));
display: block;
box-sizing: border-box;
width: 100%;
height: $height;
padding: $form-spacing / 2;
border: $input-border;
margin: 0 0 $form-spacing;
font-family: $input-font-family;
font-size: $input-font-size;
color: $input-color;
background-color: $input-background;
box-shadow: $input-shadow;
border-radius: $input-radius;
@if has-value($input-transition) {
transition: $input-transition;
}
// Focus state
&:focus {
border: $input-border-focus;
background-color: $input-background-focus;
outline: none;
box-shadow: $input-shadow-focus;
@if has-value($input-transition) {
transition: $input-transition;
}
}
}
@mixin foundation-form-text {
// Text inputs
#{text-inputs()},
textarea {
@include form-element;
-webkit-appearance: none;
-moz-appearance: none;
}
// Text areas
textarea {
max-width: 100%;
&[rows] {
height: auto;
}
}
input,
textarea {
// Placeholder text
&::placeholder {
color: $input-placeholder-color;
}
// Disabled/readonly state
&:disabled,
&[readonly] {
background-color: $input-background-disabled;
cursor: $input-cursor-disabled;
}
}
// Reset styles on button-like inputs
[type='submit'],
[type='button'] {
border-radius: $button-radius;
-webkit-appearance: none;
-moz-appearance: none;
}
// Reset Normalize setting content-box to search elements
// scss-lint:disable QualifyingElement
input[type='search'] {
box-sizing: border-box;
}
// Number input styles
[type='number'] {
@if not $input-number-spinners {
-moz-appearance: textfield;
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
}
}
}

View file

@ -0,0 +1,102 @@
/**
* Foundation for Sites by ZURB
* Version 6.2.3
* foundation.zurb.com
* Licensed under MIT Open Source
*/
// Sass utilities
@import 'util/util';
// Global variables and styles
@import 'global';
// Components
@import 'grid/grid';
@import 'typography/typography';
@import 'forms/forms';
@import 'components/visibility';
@import 'components/float';
@import 'components/button';
@import 'components/button-group';
@import 'components/accordion-menu';
@import 'components/accordion';
@import 'components/badge';
@import 'components/breadcrumbs';
@import 'components/callout';
@import 'components/close-button';
@import 'components/drilldown';
@import 'components/dropdown-menu';
@import 'components/dropdown';
@import 'components/flex';
@import 'components/flex-video';
@import 'components/label';
@import 'components/media-object';
@import 'components/menu';
@import 'components/menu-icon';
@import 'components/off-canvas';
@import 'components/orbit';
@import 'components/pagination';
@import 'components/progress-bar';
@import 'components/reveal';
@import 'components/slider';
@import 'components/sticky';
@import 'components/switch';
@import 'components/table';
@import 'components/tabs';
@import 'components/title-bar';
@import 'components/top-bar';
@import 'components/thumbnail';
@import 'components/tooltip';
@mixin foundation-everything($flex: false) {
@if $flex {
$global-flexbox: true !global;
}
@include foundation-global-styles;
@if not $flex {
@include foundation-grid;
}
@else {
@include foundation-flex-grid;
}
@include foundation-typography;
@include foundation-forms;
@include foundation-button;
@include foundation-accordion;
@include foundation-accordion-menu;
@include foundation-badge;
@include foundation-breadcrumbs;
@include foundation-button-group;
@include foundation-callout;
@include foundation-close-button;
@include foundation-menu;
@include foundation-menu-icon;
@include foundation-drilldown-menu;
@include foundation-dropdown;
@include foundation-dropdown-menu;
@include foundation-flex-video;
@include foundation-label;
@include foundation-media-object;
@include foundation-off-canvas;
@include foundation-orbit;
@include foundation-pagination;
@include foundation-progress-bar;
@include foundation-slider;
@include foundation-sticky;
@include foundation-reveal;
@include foundation-switch;
@include foundation-table;
@include foundation-tabs;
@include foundation-thumbnail;
@include foundation-title-bar;
@include foundation-tooltip;
@include foundation-top-bar;
@include foundation-visibility-classes;
@include foundation-float-classes;
@if $flex {
@include foundation-flex-classes;
}
}

View file

@ -0,0 +1,151 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Outputs CSS classes for the grid.
/// @access private
@mixin foundation-grid(
$row: 'row',
$column: 'column',
$column-row: 'column-row',
$push: 'push',
$pull: 'pull',
$center: 'centered',
$uncenter: 'uncentered',
$collapse: 'collapse',
$uncollapse: 'uncollapse',
$offset: 'offset',
$end: 'end',
$expanded: 'expanded'
) {
// Row
.#{$row} {
@include grid-row;
// Collapsing
&.#{$collapse} {
> .#{$column} {
@include grid-col-collapse;
}
}
// Nesting
& & {
@include grid-row-nest($grid-column-gutter);
&.#{$collapse} {
margin-left: 0;
margin-right: 0;
}
}
// Expanded (full-width) row
&.#{$expanded} {
max-width: none;
.#{$row} {
margin-left: auto;
margin-right: auto;
}
}
}
// Column
.#{$column} {
@include grid-col;
@if $grid-column-align-edge {
&.#{$end} {
@include grid-col-end;
}
}
}
// Column row
// The double .row class is needed to bump up the specificity
.#{$column}.#{$row}.#{$row} {
float: none;
// To properly nest a column row, padding and margin is removed
.#{$row} & {
padding-left: 0;
padding-right: 0;
margin-left: 0;
margin-right: 0;
}
}
@include -zf-each-breakpoint {
@for $i from 1 through $grid-column-count {
// Column width
.#{$-zf-size}-#{$i} {
@include grid-col-size($i);
}
// Source ordering
@if $i < $grid-column-count {
.#{$-zf-size}-#{$push}-#{$i} {
@include grid-col-pos($i);
}
.#{$-zf-size}-#{$pull}-#{$i} {
@include grid-col-pos(-$i);
}
}
// Offsets
$o: $i - 1;
.#{$-zf-size}-#{$offset}-#{$o} {
@include grid-col-off($o);
}
}
// Block grid
@for $i from 1 through $block-grid-max {
.#{$-zf-size}-up-#{$i} {
@include grid-layout($i, ".#{$column}");
}
}
// Responsive collapsing
.#{$-zf-size}-#{$collapse} {
> .#{$column} { @include grid-col-collapse; }
.#{$row},
.#{$expanded}.#{$row} &.#{$row} {
margin-left: 0;
margin-right: 0;
}
}
.#{$-zf-size}-#{$uncollapse} {
$gutter: -zf-get-bp-val($grid-column-gutter, $-zf-size);
> .#{$column} { @include grid-col-uncollapse($gutter); }
}
// Positioning
.#{$-zf-size}-#{$center} {
@include grid-col-pos(center);
}
// Gutter adjustment
.#{$-zf-size}-#{$uncenter},
.#{$-zf-size}-#{$push}-0,
.#{$-zf-size}-#{$pull}-0 {
@include grid-col-unpos;
}
}
@if $column == 'column' {
.columns {
// scss-lint:disable PlaceholderInExtend
@extend .column;
}
}
}

View file

@ -0,0 +1,126 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Calculates the width of a column based on a number of factors.
///
/// @param {Number|List} $columns
/// Width of the column. Accepts multiple values:
/// - A percentage value will make the column that exact size.
/// - A single digit will make the column span that number of columns wide, taking into account the column count of the parent row.
/// - A string of the format "x of y" will make a column that is *x* columns wide, assuming *y* total columns for the parent.
///
/// @returns {Number} A calculated percentage value.
@function grid-column($columns) {
$width: 0%;
// Parsing percents, decimals, and column counts
@if type-of($columns) == 'number' {
@if unit($columns) == '%' {
$width: $columns;
}
@else if $columns < 1 {
$width: percentage($columns);
}
@else {
$width: percentage($columns / $grid-column-count);
}
}
// Parsing "n of n" expressions
@else if type-of($columns) == 'list' {
@if length($columns) != 3 {
@error 'Wrong syntax for grid-column(). Use the format "n of n".';
}
@else {
$width: percentage(nth($columns, 1) / nth($columns, 3));
}
}
// Anything else is incorrect
@else {
@error 'Wrong syntax for grid-column(). Use a number, decimal, percentage, or "n of n".';
}
@return $width;
}
/// Creates a grid column.
///
/// @param {Mixed} $columns [$grid-column-count] - Width of the column. Refer to the `grid-column()` function to see possible values.
/// @param {Number} $gutter [$grid-column-gutter] - Spacing between columns.
@mixin grid-column(
$columns: $grid-column-count,
$gutter: $grid-column-gutter
) {
@include grid-column-size($columns);
float: $global-left;
// Gutters
@if type-of($gutter) == 'map' {
@each $breakpoint, $value in $gutter {
$padding: rem-calc($value) / 2;
@include breakpoint($breakpoint) {
padding-left: $padding;
padding-right: $padding;
}
}
}
@else if type-of($gutter) == 'number' and strip-unit($gutter) > 0 {
$padding: rem-calc($gutter) / 2;
padding-left: $padding;
padding-right: $padding;
}
// Last column alignment
@if $grid-column-align-edge {
&:last-child:not(:first-child) {
float: $global-right;
}
}
}
/// Creates a grid column row. This is the equivalent of adding `.row` and `.column` to the same element.
///
/// @param {Number} $gutter [$grid-column-gutter] - Width of the gutters on either side of the column row.
@mixin grid-column-row(
$gutter: $grid-column-gutter
) {
@include grid-row;
@include grid-column($gutter: $gutter);
&,
&:last-child {
float: none;
}
}
/// Shorthand for `grid-column()`.
/// @alias grid-column
@function grid-col(
$columns: $grid-column-count
) {
@return grid-column($columns);
}
/// Shorthand for `grid-column()`.
/// @alias grid-column
@mixin grid-col(
$columns: $grid-column-count,
$gutter: $grid-column-gutter
) {
@include grid-column($columns, $gutter);
}
/// Shorthand for `grid-column-row()`.
/// @alias grid-column-row
@mixin grid-col-row(
$gutter: $grid-column-gutter
) {
@include grid-column-row($gutter);
}

View file

@ -0,0 +1,274 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group flex-grid
////
/// Creates a container for a flex grid row.
///
/// @param {Keyword|List} $behavior [null]
/// Modifications to the default grid styles. `nest` indicates the row will be placed inside another row. `collapse` indicates that the columns inside this row will not have padding. `nest collapse` combines both behaviors.
/// @param {Number} $width [$grid-row-width] - Maximum width of the row.
/// @param {Number} $columns [null] - Number of columns to use for this row. If set to `null` (the default), the global column count will be used.
/// @param {Boolean} $base [true] - Set to `false` to prevent basic styles from being output. Useful if you're calling this mixin on the same element twice, as it prevents duplicate CSS output.
/// @param {Number} $gutter [$grid-column-gutter] - Gutter to use when inverting margins, in case the row is nested.
@mixin flex-grid-row(
$behavior: null,
$width: $grid-row-width,
$columns: null,
$base: true,
$gutter: $grid-column-gutter
) {
$margin: auto;
@if index($behavior, nest) != null {
@include grid-row-nest($gutter);
@if index($behavior, collapse) != null {
margin-left: 0;
margin-right: 0;
}
}
@else {
max-width: $width;
margin-left: auto;
margin-right: auto;
}
@if $base {
display: flex;
flex-flow: row wrap;
}
@if $columns != null {
@include grid-context($columns, $base) {
@content;
}
}
}
/// Calculates the `flex` property for a flex grid column. It accepts all of the same values as the basic `grid-column()` function, along with two extras:
/// - `null` (the default) will make the column expand to fill space.
/// - `shrink` will make the column contract, so it only takes up the horizontal space it needs.
///
/// @param {Mixed} $columns [null] - Width of the column.
@function flex-grid-column($columns: null) {
// scss-lint:disable ZeroUnit
$flex: 1 1 0px;
@if $columns == shrink {
$flex: 0 0 auto;
}
@else if $columns != null {
$flex: 0 0 grid-column($columns);
}
@return $flex;
}
/// Creates a column for a flex grid. By default, the column will stretch to the full width of its container, but this can be overridden with sizing classes, or by using the `unstack` class on the parent flex row.
///
/// @param {Mixed} $columns [null] - Width of the column. Refer to the `flex-grid-column()` function to see possible values.
/// @param {Number} $gutter [$grid-column-gutter] - Space between columns, added as a left and right padding.
@mixin flex-grid-column(
$columns: null,
$gutter: $grid-column-gutter
) {
// Base properties
flex: flex-grid-column($columns);
// Gutters
@if type-of($gutter) == 'map' {
@each $breakpoint, $value in $gutter {
$padding: rem-calc($value) / 2;
@include breakpoint($breakpoint) {
padding-left: $padding;
padding-right: $padding;
}
}
}
@else if type-of($gutter) == 'number' and strip-unit($gutter) > 0 {
$padding: rem-calc($gutter) / 2;
padding-left: $padding;
padding-right: $padding;
}
// fixes recent Chrome version not limiting child width
// https://stackoverflow.com/questions/34934586/white-space-nowrap-and-flexbox-did-not-work-in-chrome
@if $columns == null {
min-width: initial;
}
// max-width fixes IE 10/11 not respecting the flex-basis property
@if $columns != null and $columns != shrink {
max-width: grid-column($columns);
}
}
/// Creates a block grid for a flex grid row.
///
/// @param {Number} $n - Number of columns to display on each row.
/// @param {String} $selector - Selector to use to target columns within the row.
@mixin flex-grid-layout(
$n,
$selector: '.column'
) {
flex-wrap: wrap;
> #{$selector} {
$pct: percentage(1/$n);
flex: 0 0 $pct;
max-width: $pct;
}
}
/// Changes the source order of a flex grid column. Columns with lower numbers appear first in the layout.
/// @param {Number} $order [0] - Order number to apply.
@mixin flex-grid-order($order: 0) {
@warn 'This mixin is being replaced by flex-order(). flex-grid-order() will be removed in Foundation 6.3.';
@include flex-order($order);
}
/// Horizontally or vertically aligns the columns within a flex row. Apply this mixin to a flex row.
///
/// @param {Keyword} $x [null] - Horizontal alignment to use. Can be `left`, `right`, `center`, `justify`, or `spaced`. Or, set it to `null` (the default) to not set horizontal alignment.
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
@mixin flex-grid-row-align($x: null, $y: null) {
@warn 'This mixin is being replaced by flex-align(). flex-grid-row-align() will be removed in Foundation 6.3.';
@include flex-align($x, $y);
}
/// Vertically align a single column within a flex row. Apply this mixin to a flex column.
///
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
@mixin flex-grid-column-align($y: null) {
@warn 'This mixin is being replaced by flex-align-self(). flex-grid-column-align() will be removed in Foundation 6.3.';
@include flex-align-self($y);
}
@mixin foundation-flex-grid {
// Row
.row {
@include flex-grid-row;
// Nesting behavior
& & {
@include flex-grid-row(nest, $base: false);
}
// Expanded row
&.expanded {
max-width: none;
}
&.collapse {
> .column { @include grid-col-collapse; }
}
}
// Column
.column {
@include flex-grid-column;
}
// Column row
// The double .row class is needed to bump up the specificity
.column.row.row {
float: none;
display: block;
// To properly nest a column row, padding and margin is removed
.row & {
padding-left: 0;
padding-right: 0;
margin-left: 0;
margin-right: 0;
}
}
@include -zf-each-breakpoint {
@for $i from 1 through $grid-column-count {
// Sizing (percentage)
.#{$-zf-size}-#{$i} {
flex: flex-grid-column($i);
max-width: grid-column($i);
}
// Offsets
$o: $i - 1;
.#{$-zf-size}-offset-#{$o} {
@include grid-column-offset($o);
}
}
// Source ordering
@for $i from 1 through 6 {
.#{$-zf-size}-order-#{$i} {
@include flex-order($i);
}
}
// Block grid
@for $i from 1 through $block-grid-max {
.#{$-zf-size}-up-#{$i} {
@include flex-grid-layout($i);
}
}
@if $-zf-size != $-zf-zero-breakpoint {
// Sizing (expand)
@include breakpoint($-zf-size) {
.#{$-zf-size}-expand {
flex: flex-grid-column();
}
}
// Auto-stacking/unstacking
@at-root (without: media) {
.row.#{$-zf-size}-unstack {
> .column {
flex: flex-grid-column(100%);
@include breakpoint($-zf-size) {
flex: flex-grid-column();
}
}
}
}
}
// Responsive collapsing
.#{$-zf-size}-collapse {
> .column { @include grid-col-collapse; }
}
.#{$-zf-size}-uncollapse {
$gutter: -zf-get-bp-val($grid-column-gutter, $-zf-size);
> .column { @include grid-col-uncollapse($gutter); }
}
}
// Sizing (shrink)
.shrink {
flex: flex-grid-column(shrink);
max-width: 100%;
}
// Vertical alignment using align-items and align-self
// Remove these in 6.3
@each $vdir, $prop in $-zf-flex-align {
.column.align-#{$vdir} {
@include flex-align-self($vdir);
}
}
.columns {
// scss-lint:disable PlaceholderInExtend
@extend .column;
}
}

View file

@ -0,0 +1,60 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// The maximum width of a row.
/// @type Number
$grid-row-width: $global-width !default;
/// The default column count of a grid. Changing this value affects the logic of the grid mixins, and the number of CSS classes output.
/// @type Number
$grid-column-count: 12 !default;
/// The amount of space between columns at different screen sizes. To use just one size, set the variable to a number instead of a map.
/// @type Map | Length
/// @since 6.1.0
$grid-column-gutter: (
small: 20px,
medium: 30px,
) !default;
/// If `true`, the last column in a row will align to the opposite edge of the row.
/// @type Boolean
$grid-column-align-edge: true !default;
/// The highest number of `.x-up` classes available when using the block grid CSS.
/// @type Number
$block-grid-max: 8 !default;
// Internal value to store the end column float direction
$-zf-end-float: if($grid-column-align-edge, $global-right, $global-left);
// The last piece to transition the responsive gutter feature
// Remove this in 6.3
$grid-column-responsive-gutter: null !default;
@if $grid-column-responsive-gutter {
// scss-lint:disable DebugStatement
@warn 'Rename $grid-column-responsive-gutter to $grid-column-gutter to remove this warning.';
$grid-column-gutter: $grid-column-responsive-gutter;
}
// If a single value is passed as a gutter, convert it to a map so the code knows what to do with it
@if type-of($grid-column-gutter) == 'number' {
$grid-column-gutter: (
small: $grid-column-gutter,
);
}
@import 'row';
@import 'column';
@import 'size';
@import 'position';
@import 'gutter';
@import 'classes';
@import 'layout';
@import 'flex-grid';

View file

@ -0,0 +1,34 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Collapse the gutters on a column by removing the padding. **Note:** only use this mixin within a breakpoint. To collapse a column's gutters on all screen sizes, use the `$gutter` parameter of the `grid-column()` mixin instead.
@mixin grid-column-collapse {
padding-left: 0;
padding-right: 0;
}
/// Un-collapse the gutters on a column by re-adding the padding.
///
/// @param {Number} $gutter [$grid-column-gutter] - Spacing between columns.
@mixin grid-column-uncollapse($gutter: $grid-column-gutter) {
$gutter: rem-calc($gutter) / 2;
padding-left: $gutter;
padding-right: $gutter;
}
/// Shorthand for `grid-column-collapse()`.
/// @alias grid-column-collapse
@mixin grid-col-collapse {
@include grid-column-collapse;
}
/// Shorthand for `grid-column-uncollapse()`.
/// @alias grid-column-uncollapse
@mixin grid-col-uncollapse($gutter: $grid-column-gutter) {
@include grid-column-uncollapse($gutter);
}

View file

@ -0,0 +1,51 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Sizes child elements so that `$n` number of items appear on each row.
///
/// @param {Number} $n - Number of elements to display per row.
/// @param {String} $selector ['.column'] - Selector(s) to use for child elements.
@mixin grid-layout(
$n,
$selector: '.column'
) {
& > #{$selector} {
width: percentage(1/$n);
float: $global-left;
&:nth-of-type(1n) {
clear: none;
}
&:nth-of-type(#{$n}n+1) {
clear: both;
}
&:last-child {
float: left;
}
}
}
/// Adds extra CSS to block grid children so the last items in the row center automatically. Apply this to the columns, not the row.
///
/// @param {Number} $n - Number of items that appear in each row.
@mixin grid-layout-center-last($n) {
@for $i from 1 to $n {
@if $i == 1 {
&:nth-child(#{$n}n+1):last-child {
margin-left: (100 - 100/$n * $i) / 2 * 1%;
}
}
@else {
&:nth-child(#{$n}n+1):nth-last-child(#{$i}) {
margin-left: (100 - 100/$n * $i) / 2 * 1%;
}
}
}
}

View file

@ -0,0 +1,73 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Reposition a column.
///
/// @param {Number|Keyword} $position - Direction and amount to move. The column will move equal to the width of the column count specified. A positive number will push the column to the right, while a negative number will pull it to the left. Set to center to center the column.
@mixin grid-column-position($position) {
@if type-of($position) == 'number' {
$offset: percentage($position / $grid-column-count);
position: relative;
#{$global-left}: $offset;
}
@else if $position == center {
float: none;
margin-left: auto;
margin-right: auto;
}
@else {
@warn 'Wrong syntax for grid-column-position(). Enter a positive or negative number, or center.';
}
}
/// Reset a position definition.
@mixin grid-column-unposition {
position: static;
margin-left: 0;
margin-right: 0;
float: left;
}
/// Offsets a column to the right by `$n` columns.
/// @param {Number|List} $n - Width to offset by. You can pass in any value accepted by the `grid-column()` mixin, such as `6`, `50%`, or `1 of 2`.
@mixin grid-column-offset($n) {
margin-#{$global-left}: grid-column($n);
}
/// Disable the default behavior of the last column in a row aligning to the opposite edge.
@mixin grid-column-end {
// This extra specificity is required for the property to be applied
&:last-child:last-child {
float: $global-left;
}
}
/// Shorthand for `grid-column-position()`.
/// @alias grid-column-position
@mixin grid-col-pos($position) {
@include grid-column-position($position);
}
/// Shorthand for `grid-column-unposition()`.
/// @alias grid-column-unposition
@mixin grid-col-unpos {
@include grid-column-unposition;
}
/// Shorthand for `grid-column-offset()`.
/// @alias grid-column-offset
@mixin grid-col-off($n) {
@include grid-column-offset($n);
}
/// Shorthand for `grid-column-end()`.
/// @alias grid-column-end
@mixin grid-col-end {
@include grid-column-end;
}

View file

@ -0,0 +1,95 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Change the behavior of columns defined inside this mixin to use a different column count.
/// @content
///
/// @param {Number} $columns - Number of columns to use.
/// @param {Boolean} $root [false]
/// If `false`, selectors inside this mixin will nest inside the parent selector.
/// If `true`, selectors will not nest.
@mixin grid-context(
$columns,
$root: false
) {
// Store the current column count so it can be re-set later
$old-grid-column-count: $grid-column-count;
$grid-column-count: $columns !global;
@if $root {
@at-root { @content; }
}
@else {
@content;
}
// Restore the old column count
$grid-column-count: $old-grid-column-count;
}
/// Creates a grid row.
/// @content
///
/// @param {Number} $columns [null] - Column count for this row. `null` will use the default column count.
/// @param {Keywords} $behavior [null]
/// Modifications to the default grid styles. `nest` indicates the row will be placed inside another row. `collapse` indicates that the columns inside this row will not have padding. `nest collapse` combines both behaviors.
/// @param {Number} $width [$grid-row-width] - Maximum width of the row.
/// @param {Boolean} $cf [true] - Whether or not to include a clearfix.
/// @param {Number} $gutter [$grid-column-gutter] - Gutter to use when inverting margins, in case the row is nested.
@mixin grid-row(
$columns: null,
$behavior: null,
$width: $grid-row-width,
$cf: true,
$gutter: $grid-column-gutter
) {
$margin: auto;
@if index($behavior, nest) != null {
@include grid-row-nest($gutter);
@if index($behavior, collapse) != null {
margin-left: 0;
margin-right: 0;
}
}
@else {
max-width: $width;
margin-left: auto;
margin-right: auto;
}
@if $cf {
@include clearfix;
}
@if $columns != null {
@include grid-context($columns) {
@content;
}
}
}
/// Inverts the margins of a row to nest it inside of a column.
///
/// @param {Map|null} $gutter [null] - Gutter value to use when inverting the margins. Set to `null` to refer to the responsive gutter settings.
@mixin grid-row-nest($gutter: $grid-column-gutter) {
@if type-of($gutter) == 'number' {
$gutter: ($-zf-zero-breakpoint: $gutter);
}
max-width: none;
@each $breakpoint, $value in $gutter {
$margin: rem-calc($value) / 2 * -1;
@include breakpoint($breakpoint) {
margin-left: $margin;
margin-right: $margin;
}
}
}

View file

@ -0,0 +1,24 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group grid
////
/// Set the width of a grid column.
///
/// @param {Number|List} $width [$grid-column-count] - Width to make the column. You can pass in any value accepted by the `grid-column()` function, such as `6`, `50%`, or `1 of 2`.
@mixin grid-column-size(
$columns: $grid-column-count
) {
width: grid-column($columns);
}
/// Shorthand for `grid-column-size()`.
/// @alias grid-column-size
@mixin grid-col-size(
$columns: $grid-column-count
) {
@include grid-column-size($columns);
}

View file

@ -0,0 +1,567 @@
// Foundation for Sites Settings
// -----------------------------
//
// Table of Contents:
//
// 1. Global
// 2. Breakpoints
// 3. The Grid
// 4. Base Typography
// 5. Typography Helpers
// 6. Abide
// 7. Accordion
// 8. Accordion Menu
// 9. Badge
// 10. Breadcrumbs
// 11. Button
// 12. Button Group
// 13. Callout
// 14. Close Button
// 15. Drilldown
// 16. Dropdown
// 17. Dropdown Menu
// 18. Flex Video
// 19. Forms
// 20. Label
// 21. Media Object
// 22. Menu
// 23. Meter
// 24. Off-canvas
// 25. Orbit
// 26. Pagination
// 27. Progress Bar
// 28. Reveal
// 29. Slider
// 30. Switch
// 31. Table
// 32. Tabs
// 33. Thumbnail
// 34. Title Bar
// 35. Tooltip
// 36. Top Bar
@import 'util/util';
// 1. Global
// ---------
$global-font-size: 100%;
$global-width: rem-calc(1200);
$global-lineheight: 1.5;
$foundation-palette: (
primary: #2199e8,
secondary: #777,
success: #3adb76,
warning: #ffae00,
alert: #ec5840,
);
$light-gray: #e6e6e6;
$medium-gray: #cacaca;
$dark-gray: #8a8a8a;
$black: #0a0a0a;
$white: #fefefe;
$body-background: $white;
$body-font-color: $black;
$body-font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif;
$body-antialiased: true;
$global-margin: 1rem;
$global-padding: 1rem;
$global-weight-normal: normal;
$global-weight-bold: bold;
$global-radius: 0;
$global-text-direction: ltr;
$global-flexbox: false;
$print-transparent-backgrounds: true;
@include add-foundation-colors;
// 2. Breakpoints
// --------------
$breakpoints: (
small: 0,
medium: 640px,
large: 1024px,
xlarge: 1200px,
xxlarge: 1440px,
);
$breakpoint-classes: (small medium large);
// 3. The Grid
// -----------
$grid-row-width: $global-width;
$grid-column-count: 12;
$grid-column-gutter: (
small: 20px,
medium: 30px,
);
$grid-column-align-edge: true;
$block-grid-max: 8;
// 4. Base Typography
// ------------------
$header-font-family: $body-font-family;
$header-font-weight: $global-weight-normal;
$header-font-style: normal;
$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace;
$header-sizes: (
small: (
'h1': 24,
'h2': 20,
'h3': 19,
'h4': 18,
'h5': 17,
'h6': 16,
),
medium: (
'h1': 48,
'h2': 40,
'h3': 31,
'h4': 25,
'h5': 20,
'h6': 16,
),
);
$header-color: inherit;
$header-lineheight: 1.4;
$header-margin-bottom: 0.5rem;
$header-text-rendering: optimizeLegibility;
$small-font-size: 80%;
$header-small-font-color: $medium-gray;
$paragraph-lineheight: 1.6;
$paragraph-margin-bottom: 1rem;
$paragraph-text-rendering: optimizeLegibility;
$code-color: $black;
$code-font-family: $font-family-monospace;
$code-font-weight: $global-weight-normal;
$code-background: $light-gray;
$code-border: 1px solid $medium-gray;
$code-padding: rem-calc(2 5 1);
$anchor-color: $primary-color;
$anchor-color-hover: scale-color($anchor-color, $lightness: -14%);
$anchor-text-decoration: none;
$anchor-text-decoration-hover: none;
$hr-width: $global-width;
$hr-border: 1px solid $medium-gray;
$hr-margin: rem-calc(20) auto;
$list-lineheight: $paragraph-lineheight;
$list-margin-bottom: $paragraph-margin-bottom;
$list-style-type: disc;
$list-style-position: outside;
$list-side-margin: 1.25rem;
$list-nested-side-margin: 1.25rem;
$defnlist-margin-bottom: 1rem;
$defnlist-term-weight: $global-weight-bold;
$defnlist-term-margin-bottom: 0.3rem;
$blockquote-color: $dark-gray;
$blockquote-padding: rem-calc(9 20 0 19);
$blockquote-border: 1px solid $medium-gray;
$cite-font-size: rem-calc(13);
$cite-color: $dark-gray;
$keystroke-font: $font-family-monospace;
$keystroke-color: $black;
$keystroke-background: $light-gray;
$keystroke-padding: rem-calc(2 4 0);
$keystroke-radius: $global-radius;
$abbr-underline: 1px dotted $black;
// 5. Typography Helpers
// ---------------------
$lead-font-size: $global-font-size * 1.25;
$lead-lineheight: 1.6;
$subheader-lineheight: 1.4;
$subheader-color: $dark-gray;
$subheader-font-weight: $global-weight-normal;
$subheader-margin-top: 0.2rem;
$subheader-margin-bottom: 0.5rem;
$stat-font-size: 2.5rem;
// 6. Abide
// --------
$abide-inputs: true;
$abide-labels: true;
$input-background-invalid: map-get($foundation-palette, alert);
$form-label-color-invalid: map-get($foundation-palette, alert);
$input-error-color: map-get($foundation-palette, alert);
$input-error-font-size: rem-calc(12);
$input-error-font-weight: $global-weight-bold;
// 7. Accordion
// ------------
$accordion-background: $white;
$accordion-plusminus: true;
$accordion-item-color: foreground($accordion-background, $primary-color);
$accordion-item-background-hover: $light-gray;
$accordion-item-padding: 1.25rem 1rem;
$accordion-content-background: $white;
$accordion-content-border: 1px solid $light-gray;
$accordion-content-color: foreground($accordion-content-background, $body-font-color);
$accordion-content-padding: 1rem;
// 8. Accordion Menu
// -----------------
$accordionmenu-arrows: true;
$accordionmenu-arrow-color: $primary-color;
// 9. Badge
// --------
$badge-background: $primary-color;
$badge-color: foreground($badge-background);
$badge-padding: 0.3em;
$badge-minwidth: 2.1em;
$badge-font-size: 0.6rem;
// 10. Breadcrumbs
// ---------------
$breadcrumbs-margin: 0 0 $global-margin 0;
$breadcrumbs-item-font-size: rem-calc(11);
$breadcrumbs-item-color: $primary-color;
$breadcrumbs-item-color-current: $black;
$breadcrumbs-item-color-disabled: $medium-gray;
$breadcrumbs-item-margin: 0.75rem;
$breadcrumbs-item-uppercase: true;
$breadcrumbs-item-slash: true;
// 11. Button
// ----------
$button-padding: 0.85em 1em;
$button-margin: 0 0 $global-margin 0;
$button-fill: solid;
$button-background: $primary-color;
$button-background-hover: scale-color($button-background, $lightness: -15%);
$button-color: $white;
$button-color-alt: $black;
$button-radius: $global-radius;
$button-sizes: (
tiny: 0.6rem,
small: 0.75rem,
default: 0.9rem,
large: 1.25rem,
);
$button-opacity-disabled: 0.25;
// 12. Button Group
// ----------------
$buttongroup-margin: 1rem;
$buttongroup-spacing: 1px;
$buttongroup-child-selector: '.button';
$buttongroup-expand-max: 6;
// 13. Callout
// -----------
$callout-background: $white;
$callout-background-fade: 85%;
$callout-border: 1px solid rgba($black, 0.25);
$callout-margin: 0 0 1rem 0;
$callout-padding: 1rem;
$callout-font-color: $body-font-color;
$callout-font-color-alt: $body-background;
$callout-radius: $global-radius;
$callout-link-tint: 30%;
// 14. Close Button
// ----------------
$closebutton-position: right top;
$closebutton-offset-horizontal: 1rem;
$closebutton-offset-vertical: 0.5rem;
$closebutton-size: 2em;
$closebutton-lineheight: 1;
$closebutton-color: $dark-gray;
$closebutton-color-hover: $black;
// 15. Drilldown
// -------------
$drilldown-transition: transform 0.15s linear;
$drilldown-arrows: true;
$drilldown-arrow-color: $primary-color;
$drilldown-background: $white;
// 16. Dropdown
// ------------
$dropdown-padding: 1rem;
$dropdown-border: 1px solid $medium-gray;
$dropdown-font-size: 1rem;
$dropdown-width: 300px;
$dropdown-radius: $global-radius;
$dropdown-sizes: (
tiny: 100px,
small: 200px,
large: 400px,
);
// 17. Dropdown Menu
// -----------------
$dropdownmenu-arrows: true;
$dropdownmenu-arrow-color: $anchor-color;
$dropdownmenu-min-width: 200px;
$dropdownmenu-background: $white;
$dropdownmenu-border: 1px solid $medium-gray;
// 18. Flex Video
// --------------
$flexvideo-margin-bottom: rem-calc(16);
$flexvideo-ratio: 4 by 3;
$flexvideo-ratio-widescreen: 16 by 9;
// 19. Forms
// ---------
$fieldset-border: 1px solid $medium-gray;
$fieldset-padding: rem-calc(20);
$fieldset-margin: rem-calc(18 0);
$legend-padding: rem-calc(0 3);
$form-spacing: rem-calc(16);
$helptext-color: $black;
$helptext-font-size: rem-calc(13);
$helptext-font-style: italic;
$input-prefix-color: $black;
$input-prefix-background: $light-gray;
$input-prefix-border: 1px solid $medium-gray;
$input-prefix-padding: 1rem;
$form-label-color: $black;
$form-label-font-size: rem-calc(14);
$form-label-font-weight: $global-weight-normal;
$form-label-line-height: 1.8;
$select-background: $white;
$select-triangle-color: $dark-gray;
$select-radius: $global-radius;
$input-color: $black;
$input-placeholder-color: $medium-gray;
$input-font-family: inherit;
$input-font-size: rem-calc(16);
$input-background: $white;
$input-background-focus: $white;
$input-background-disabled: $light-gray;
$input-border: 1px solid $medium-gray;
$input-border-focus: 1px solid $dark-gray;
$input-shadow: inset 0 1px 2px rgba($black, 0.1);
$input-shadow-focus: 0 0 5px $medium-gray;
$input-cursor-disabled: not-allowed;
$input-transition: box-shadow 0.5s, border-color 0.25s ease-in-out;
$input-number-spinners: true;
$input-radius: $global-radius;
// 20. Label
// ---------
$label-background: $primary-color;
$label-color: foreground($label-background);
$label-font-size: 0.8rem;
$label-padding: 0.33333rem 0.5rem;
$label-radius: $global-radius;
// 21. Media Object
// ----------------
$mediaobject-margin-bottom: $global-margin;
$mediaobject-section-padding: $global-padding;
$mediaobject-image-width-stacked: 100%;
// 22. Menu
// --------
$menu-margin: 0;
$menu-margin-nested: 1rem;
$menu-item-padding: 0.7rem 1rem;
$menu-item-color-active: $white;
$menu-item-background-active: map-get($foundation-palette, primary);
$menu-icon-spacing: 0.25rem;
// 23. Meter
// ---------
$meter-height: 1rem;
$meter-radius: $global-radius;
$meter-background: $medium-gray;
$meter-fill-good: $success-color;
$meter-fill-medium: $warning-color;
$meter-fill-bad: $alert-color;
// 24. Off-canvas
// --------------
$offcanvas-size: 250px;
$offcanvas-background: $light-gray;
$offcanvas-zindex: -1;
$offcanvas-transition-length: 0.5s;
$offcanvas-transition-timing: ease;
$offcanvas-fixed-reveal: true;
$offcanvas-exit-background: rgba($white, 0.25);
$maincontent-class: 'off-canvas-content';
$maincontent-shadow: 0 0 10px rgba($black, 0.5);
// 25. Orbit
// ---------
$orbit-bullet-background: $medium-gray;
$orbit-bullet-background-active: $dark-gray;
$orbit-bullet-diameter: 1.2rem;
$orbit-bullet-margin: 0.1rem;
$orbit-bullet-margin-top: 0.8rem;
$orbit-bullet-margin-bottom: 0.8rem;
$orbit-caption-background: rgba($black, 0.5);
$orbit-caption-padding: 1rem;
$orbit-control-background-hover: rgba($black, 0.5);
$orbit-control-padding: 1rem;
$orbit-control-zindex: 10;
// 26. Pagination
// --------------
$pagination-font-size: rem-calc(14);
$pagination-margin-bottom: $global-margin;
$pagination-item-color: $black;
$pagination-item-padding: rem-calc(3 10);
$pagination-item-spacing: rem-calc(1);
$pagination-radius: $global-radius;
$pagination-item-background-hover: $light-gray;
$pagination-item-background-current: $primary-color;
$pagination-item-color-current: foreground($pagination-item-background-current);
$pagination-item-color-disabled: $medium-gray;
$pagination-ellipsis-color: $black;
$pagination-mobile-items: false;
$pagination-arrows: true;
// 27. Progress Bar
// ----------------
$progress-height: 1rem;
$progress-background: $medium-gray;
$progress-margin-bottom: $global-margin;
$progress-meter-background: $primary-color;
$progress-radius: $global-radius;
// 28. Reveal
// ----------
$reveal-background: $white;
$reveal-width: 600px;
$reveal-max-width: $global-width;
$reveal-padding: $global-padding;
$reveal-border: 1px solid $medium-gray;
$reveal-radius: $global-radius;
$reveal-zindex: 1005;
$reveal-overlay-background: rgba($black, 0.45);
// 29. Slider
// ----------
$slider-width-vertical: 0.5rem;
$slider-transition: all 0.2s ease-in-out;
$slider-height: 0.5rem;
$slider-background: $light-gray;
$slider-fill-background: $medium-gray;
$slider-handle-height: 1.4rem;
$slider-handle-width: 1.4rem;
$slider-handle-background: $primary-color;
$slider-opacity-disabled: 0.25;
$slider-radius: $global-radius;
// 30. Switch
// ----------
$switch-background: $medium-gray;
$switch-background-active: $primary-color;
$switch-height: 2rem;
$switch-height-tiny: 1.5rem;
$switch-height-small: 1.75rem;
$switch-height-large: 2.5rem;
$switch-radius: $global-radius;
$switch-margin: $global-margin;
$switch-paddle-background: $white;
$switch-paddle-offset: 0.25rem;
$switch-paddle-radius: $global-radius;
$switch-paddle-transition: all 0.25s ease-out;
// 31. Table
// ---------
$table-background: $white;
$table-color-scale: 5%;
$table-border: 1px solid smart-scale($table-background, $table-color-scale);
$table-padding: rem-calc(8 10 10);
$table-hover-scale: 2%;
$table-row-hover: darken($table-background, $table-hover-scale);
$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale);
$table-striped-background: smart-scale($table-background, $table-color-scale);
$table-stripe: even;
$table-head-background: smart-scale($table-background, $table-color-scale / 2);
$table-foot-background: smart-scale($table-background, $table-color-scale);
$table-head-font-color: $body-font-color;
$show-header-for-stacked: false;
// 32. Tabs
// --------
$tab-margin: 0;
$tab-background: $white;
$tab-background-active: $light-gray;
$tab-item-font-size: rem-calc(12);
$tab-item-background-hover: $white;
$tab-item-padding: 1.25rem 1.5rem;
$tab-expand-max: 6;
$tab-content-background: $white;
$tab-content-border: $light-gray;
$tab-content-color: foreground($tab-background, $primary-color);
$tab-content-padding: 1rem;
// 33. Thumbnail
// -------------
$thumbnail-border: solid 4px $white;
$thumbnail-margin-bottom: $global-margin;
$thumbnail-shadow: 0 0 0 1px rgba($black, 0.2);
$thumbnail-shadow-hover: 0 0 6px 1px rgba($primary-color, 0.5);
$thumbnail-transition: box-shadow 200ms ease-out;
$thumbnail-radius: $global-radius;
// 34. Title Bar
// -------------
$titlebar-background: $black;
$titlebar-color: $white;
$titlebar-padding: 0.5rem;
$titlebar-text-font-weight: bold;
$titlebar-icon-color: $white;
$titlebar-icon-color-hover: $medium-gray;
$titlebar-icon-spacing: 0.25rem;
// 35. Tooltip
// -----------
$has-tip-font-weight: $global-weight-bold;
$has-tip-border-bottom: dotted 1px $dark-gray;
$tooltip-background-color: $black;
$tooltip-color: $white;
$tooltip-padding: 0.75rem;
$tooltip-font-size: $small-font-size;
$tooltip-pip-width: 0.75rem;
$tooltip-pip-height: $tooltip-pip-width * 0.866;
$tooltip-radius: $global-radius;
// 36. Top Bar
// -----------
$topbar-padding: 0.5rem;
$topbar-background: $light-gray;
$topbar-submenu-background: $topbar-background;
$topbar-title-spacing: 1rem;
$topbar-input-width: 200px;
$topbar-unstack-breakpoint: medium;

View file

@ -0,0 +1,22 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@mixin foundation-text-alignment {
@each $size in $breakpoint-classes {
@include breakpoint($size) {
@each $align in (left, right, center, justify) {
@if $size != $-zf-zero-breakpoint {
.#{$size}-text-#{$align} {
text-align: $align;
}
}
@else {
.text-#{$align} {
text-align: $align;
}
}
}
}
}
}

View file

@ -0,0 +1,443 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group typography-base
////
// Base Typography
// - - - - - - - - - - - - - - -
// These are styles applied to basic HTML tags, including:
// - Paragraphs <p>
// - Bold/italics <b> <strong> <i> <em>
// - Small text <small>
// - Headings <h1><h6>
// - Anchors <a>
// - Dividers <hr>
// - Lists <ul> <ol> <dl>
// - Blockquotes <blockquote>
// - Code blocks <code>
// - Abbreviations <abbr>
// - Citations <cite>
// - Keystrokes <kbd>
/// Font family for header elements.
/// @type String | List
$header-font-family: $body-font-family !default;
/// Font weight of headers.
/// @type String
$header-font-weight: $global-weight-normal !default;
/// Font style (e.g. italicized) of headers.
/// @type String
$header-font-style: normal !default;
/// Font stack used for elements that use monospaced type, such as code samples
/// @type String | List
$font-family-monospace: Consolas, 'Liberation Mono', Courier, monospace !default;
/// Sizes of headings at various screen sizes. Each key is a breakpoint, and each value is a map of heading sizes.
/// @type Map
$header-sizes: (
small: (
'h1': 24,
'h2': 20,
'h3': 19,
'h4': 18,
'h5': 17,
'h6': 16,
),
medium: (
'h1': 48,
'h2': 40,
'h3': 31,
'h4': 25,
'h5': 20,
'h6': 16,
),
) !default;
/// Color of headers.
/// @type Color
$header-color: inherit !default;
/// Line height of headers.
/// @type Number
$header-lineheight: 1.4 !default;
/// Bottom margin of headers.
/// @type Number
$header-margin-bottom: 0.5rem !default;
/// Text rendering method of headers.
/// @type String
$header-text-rendering: optimizeLegibility !default;
/// Font size of `<small>` elements.
/// @type Number
$small-font-size: 80% !default;
/// Color of `<small>` elements when placed inside headers.
/// @type Color
$header-small-font-color: $medium-gray !default;
/// Line height of text inside `<p>` elements.
/// @type Number
$paragraph-lineheight: 1.6 !default;
/// Bottom margin of paragraphs.
/// @type Number
$paragraph-margin-bottom: 1rem !default;
/// Text rendering method for paragraph text.
/// @type String
$paragraph-text-rendering: optimizeLegibility !default;
/// Text color of code samples.
/// @type Color
$code-color: $black !default;
/// Font family of code samples.
/// @type String | List
$code-font-family: $font-family-monospace !default;
/// Font weight of text in code samples.
/// @type String
$code-font-weight: $global-weight-normal !default;
/// Background color of code samples.
/// @type Color
$code-background: $light-gray !default;
/// Border around code samples.
/// @type List
$code-border: 1px solid $medium-gray !default;
/// Padding around text of code samples.
/// @type Number | List
$code-padding: rem-calc(2 5 1) !default;
/// Default color for links.
/// @type Color
$anchor-color: $primary-color !default;
/// Default color for links on hover.
/// @type Color
$anchor-color-hover: scale-color($anchor-color, $lightness: -14%) !default;
/// Default text deocration for links.
/// @type String
$anchor-text-decoration: none !default;
/// Default text decoration for links on hover.
/// @type String
$anchor-text-decoration-hover: none !default;
/// Maximum width of a divider.
/// @type Number
$hr-width: $global-width !default;
/// Default border for a divider.
/// @type List
$hr-border: 1px solid $medium-gray !default;
/// Default margin for a divider.
/// @type Number | List
$hr-margin: rem-calc(20) auto !default;
/// Line height for items in a list.
/// @type Number
$list-lineheight: $paragraph-lineheight !default;
/// Bottom margin for items in a list.
/// @type Number
$list-margin-bottom: $paragraph-margin-bottom !default;
/// Bullet type to use for unordered lists (e.g., `square`, `circle`, `disc`).
/// @type String
$list-style-type: disc !default;
/// Positioning for bullets on unordered list items.
/// @type String
$list-style-position: outside !default;
/// Left (or right) margin for lists.
/// @type Number
$list-side-margin: 1.25rem !default;
/// Left (or right) margin for a list inside a list.
/// @type Number
$list-nested-side-margin: 1.25rem !default;
/// Bottom margin for `<dl>` elements.
/// @type Number
$defnlist-margin-bottom: 1rem !default;
/// Font weight for `<dt>` elements.
/// @type String
$defnlist-term-weight: $global-weight-bold !default;
/// Spacing between `<dt>` and `<dd>` elements.
/// @type Number
$defnlist-term-margin-bottom: 0.3rem !default;
/// Text color of `<blockquote>` elements.
/// @type Color
$blockquote-color: $dark-gray !default;
/// Padding inside a `<blockquote>` element.
/// @type Number | List
$blockquote-padding: rem-calc(9 20 0 19) !default;
/// Side border for `<blockquote>` elements.
/// @type List
$blockquote-border: 1px solid $medium-gray !default;
/// Font size for `<cite>` elements.
/// @type Number
$cite-font-size: rem-calc(13) !default;
/// Text color for `<cite>` elements.
/// @type Color
$cite-color: $dark-gray !default;
/// Font family for `<kbd>` elements.
/// @type String | List
$keystroke-font: $font-family-monospace !default;
/// Text color for `<kbd>` elements.
/// @type Color
$keystroke-color: $black !default;
/// Background color for `<kbd>` elements.
/// @type Color
$keystroke-background: $light-gray !default;
/// Padding for `<kbd>` elements.
/// @type Number | List
$keystroke-padding: rem-calc(2 4 0) !default;
/// Border radius for `<kbd>` elements.
/// @type Number | List
$keystroke-radius: $global-radius !default;
/// Bottom border style for `<abbr>` elements.
/// @type List
$abbr-underline: 1px dotted $black !default;
@mixin foundation-typography-base {
// Typography resets
div,
dl,
dt,
dd,
ul,
ol,
li,
h1,
h2,
h3,
h4,
h5,
h6,
pre,
form,
p,
blockquote,
th,
td {
margin: 0;
padding: 0;
}
// Paragraphs
p {
font-size: inherit;
line-height: $paragraph-lineheight;
margin-bottom: $paragraph-margin-bottom;
text-rendering: $paragraph-text-rendering;
}
// Emphasized text
em,
i {
font-style: italic;
line-height: inherit;
}
// Strong text
strong,
b {
font-weight: $global-weight-bold;
line-height: inherit;
}
// Small text
small {
font-size: $small-font-size;
line-height: inherit;
}
// Headings
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: $header-font-family;
font-weight: $header-font-weight;
font-style: $header-font-style;
color: $header-color;
text-rendering: $header-text-rendering;
margin-top: 0;
margin-bottom: $header-margin-bottom;
line-height: $header-lineheight;
small {
color: $header-small-font-color;
line-height: 0;
}
}
// Heading sizes
@each $size, $headers in $header-sizes {
@include breakpoint($size) {
@each $header, $font-size in $headers {
#{$header} {
font-size: rem-calc($font-size);
}
}
}
}
// Links
a {
color: $anchor-color;
text-decoration: $anchor-text-decoration;
line-height: inherit;
cursor: pointer;
&:hover,
&:focus {
color: $anchor-color-hover;
@if $anchor-text-decoration-hover != $anchor-text-decoration {
text-decoration: $anchor-text-decoration-hover;
}
}
img {
border: 0;
}
}
// Horizontal rule
hr {
max-width: $hr-width;
height: 0;
border-right: 0;
border-top: 0;
border-bottom: $hr-border;
border-left: 0;
margin: $hr-margin;
clear: both;
}
// Lists
ul,
ol,
dl {
line-height: $list-lineheight;
margin-bottom: $list-margin-bottom;
list-style-position: $list-style-position;
}
// List items
li {
font-size: inherit;
}
// Unordered lists
ul {
list-style-type: $list-style-type;
margin-#{$global-left}: $list-side-margin;
}
// Ordered lists
ol {
margin-#{$global-left}: $list-side-margin;
}
// Nested unordered/ordered lists
ul, ol {
& & {
margin-#{$global-left}: $list-nested-side-margin;
margin-bottom: 0;
}
}
// Definition lists
dl {
margin-bottom: $defnlist-margin-bottom;
dt {
margin-bottom: $defnlist-term-margin-bottom;
font-weight: $defnlist-term-weight;
}
}
// Blockquotes
blockquote {
margin: 0 0 $paragraph-margin-bottom;
padding: $blockquote-padding;
border-#{$global-left}: $blockquote-border;
&, p {
line-height: $paragraph-lineheight;
color: $blockquote-color;
}
}
// Citations
cite {
display: block;
font-size: $cite-font-size;
color: $cite-color;
&:before {
content: '\2014 \0020';
}
}
// Abbreviations
abbr {
color: $body-font-color;
cursor: help;
border-bottom: $abbr-underline;
}
// Code
code {
font-family: $code-font-family;
font-weight: $code-font-weight;
color: $code-color;
background-color: $code-background;
border: $code-border;
padding: $code-padding;
}
// Keystrokes
kbd {
padding: $keystroke-padding;
margin: 0;
background-color: $keystroke-background;
color: $keystroke-color;
font-family: $keystroke-font;
@if has-value($keystroke-radius) {
border-radius: $keystroke-radius;
}
}
}

View file

@ -0,0 +1,77 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group typography-helpers
////
/// Default font size for lead paragraphs.
/// @type Number
$lead-font-size: $global-font-size * 1.25 !default;
/// Default line height for lead paragraphs.
/// @type String
$lead-lineheight: 1.6 !default;
/// Default line height for subheaders.
/// @type Number
$subheader-lineheight: 1.4 !default;
/// Default font color for subheaders.
/// @type Color
$subheader-color: $dark-gray !default;
/// Default font weight for subheaders.
/// @type String
$subheader-font-weight: $global-weight-normal !default;
/// Default top margin for subhheaders.
/// @type Number
$subheader-margin-top: 0.2rem !default;
/// Default bottom margin for subheaders.
/// @type Number
$subheader-margin-bottom: 0.5rem !default;
/// Default font size for statistic numbers.
/// @type Number
$stat-font-size: 2.5rem !default;
@mixin foundation-typography-helpers {
// Use to create a subheading under a main header
// Make sure you pair the two elements in a <header> element, like this:
// <header>
// <h1>Heading</h1>
// <h2>Subheading</h2>
// </header>
.subheader {
margin-top: $subheader-margin-top;
margin-bottom: $subheader-margin-bottom;
font-weight: $subheader-font-weight;
line-height: $subheader-lineheight;
color: $subheader-color;
}
// Use to style an introductory lead, deck, blurb, etc.
.lead {
font-size: $lead-font-size;
line-height: $lead-lineheight;
}
// Use to style a large number to display a statistic
.stat {
font-size: $stat-font-size;
line-height: 1;
p + & {
margin-top: -1rem;
}
}
// Use to remove the bullets from an unordered list
.no-bullet {
margin-#{$global-left}: 0;
list-style: none;
}
}

View file

@ -0,0 +1,77 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
/// If `true`, all elements will have transparent backgrounds when printed, to save on ink.
/// @type Boolean
/// @group global
$print-transparent-backgrounds: true !default;
// scss-lint:disable all
@mixin foundation-print-styles {
.show-for-print { display: none !important; }
@media print {
* {
@if $print-transparent-backgrounds {
background: transparent !important;
}
color: black !important; // Black prints faster: h5bp.com/s
box-shadow: none !important;
text-shadow: none !important;
}
.show-for-print { display: block !important; }
.hide-for-print { display: none !important; }
table.show-for-print { display: table !important; }
thead.show-for-print { display: table-header-group !important; }
tbody.show-for-print { display: table-row-group !important; }
tr.show-for-print { display: table-row !important; }
td.show-for-print { display: table-cell !important; }
th.show-for-print { display: table-cell !important; }
// Display the URL of a link after the text
a,
a:visited { text-decoration: underline;}
a[href]:after { content: ' (' attr(href) ')'; }
// Don't display the URL for images or JavaScript/internal links
.ir a:after,
a[href^='javascript:']:after,
a[href^='#']:after { content: ''; }
// Display what an abbreviation stands for after the text
abbr[title]:after { content: ' (' attr(title) ')'; }
// Prevent page breaks in the middle of a blockquote or preformatted text block
pre,
blockquote {
border: 1px solid $dark-gray;
page-break-inside: avoid;
}
// h5bp.com/t
thead { display: table-header-group; }
tr,
img { page-break-inside: avoid; }
img { max-width: 100% !important; }
@page { margin: 0.5cm; }
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
// Avoid page breaks after a heading
h2,
h3 { page-break-after: avoid; }
}
}

View file

@ -0,0 +1,28 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group typography
////
// scss-lint:disable DeclarationOrder
// Base typography styles (tags only)
@import 'base';
// Typography helper classes (classes only)
@import 'helpers';
// Text alignment classes
@import 'alignment';
// Print styles
@import 'print';
@mixin foundation-typography {
@include foundation-typography-base;
@include foundation-typography-helpers;
@include foundation-text-alignment;
@include foundation-print-styles;
}

View file

@ -0,0 +1,275 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group breakpoints
////
// scss-lint:disable ZeroUnit
/// A list of named breakpoints. You can use these with the `breakpoint()` mixin to quickly create media queries.
/// @type Map
$breakpoints: (
small: 0,
medium: 640px,
large: 1024px,
xlarge: 1200px,
xxlarge: 1440px,
) !default;
$-zf-zero-breakpoint: small !default;
@if nth(map-values($breakpoints), 1) != 0 {
@error 'Your smallest breakpoint (defined in $breakpoints) must be set to "0".';
}
@else {
$-zf-zero-breakpoint: nth(map-keys($breakpoints), 1);
}
/// All of the names in this list will be output as classes in your CSS, like `.small-12`, `.medium-6`, and so on. Each value in this list must also be in the `$breakpoints` map.
/// @type List
$breakpoint-classes: (small medium large) !default;
/// Generates a media query string matching the input value. Refer to the documentation for the `breakpoint()` mixin to see what the possible inputs are.
///
/// @param {Keyword|Number} $val [small] - Breakpoint name, or px, rem, or em value to process.
@function breakpoint($val: $-zf-zero-breakpoint) {
// Size or keyword
$bp: nth($val, 1);
// Value for max-width media queries
$bp-max: 0;
// Direction of media query (up, down, or only)
$dir: if(length($val) > 1, nth($val, 2), up);
// Eventual output
$str: '';
// Is it a named media query?
$named: false;
// Orientation media queries have a unique syntax
@if $bp == 'landscape' or $bp == 'portrait' {
@return '(orientation: #{$bp})';
}
@else if $bp == 'retina' {
@return '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)';
}
// Try to pull a named breakpoint out of the $breakpoints map
@if type-of($bp) == 'string' {
@if map-has-key($breakpoints, $bp) {
@if $dir == 'only' or $dir == 'down' {
$bp-max: -zf-map-next($breakpoints, $bp);
}
$bp: map-get($breakpoints, $bp);
$named: true;
}
@else {
$bp: 0;
@warn 'breakpoint(): "#{$val}" is not defined in your $breakpoints setting.';
}
}
// Convert any pixel, rem, or unitless value to em
$bp: -zf-bp-to-em($bp);
@if $bp-max {
$bp-max: -zf-bp-to-em($bp-max) - (1/16);
}
// Conditions to skip media query creation
// - It's a named breakpoint that resolved to "0 down" or "0 up"
// - It's a numeric breakpoint that resolved to "0 " + anything
@if $bp > 0em or $dir == 'only' or $dir == 'down' {
// `only` ranges use the format `(min-width: n) and (max-width: n)`
@if $dir == 'only' {
// Only named media queries can have an "only" range
@if $named == true {
// Only use "min-width" if the floor is greater than 0
@if $bp > 0em {
$str: $str + '(min-width: #{$bp})';
// Only add "and" to the media query if there's a ceiling
@if $bp-max != null {
$str: $str + ' and ';
}
}
// Only use "max-width" if there's a ceiling
@if $bp-max != null {
$str: $str + '(max-width: #{$bp-max})';
}
}
@else {
@warn 'breakpoint(): Only named media queries can have an `only` range.';
}
}
// `down` ranges use the format `(max-width: n)`
@else if $dir == 'down' {
$max: if($named, $bp-max, $bp);
// Skip media query creation if input value is exactly "0 down",
// unless the function was called as "small down", in which case it's just "small only"
@if $named or $bp > 0em {
@if $max != null {
$str: $str + '(max-width: #{$max})';
}
}
}
// `up` ranges use the format `(min-width: n)`
@else if $bp > 0em {
$str: $str + '(min-width: #{$bp})';
}
}
@return $str;
}
/// Wraps a media query around the content you put inside the mixin. This mixin accepts a number of values:
/// - If a string is passed, the mixin will look for it in the `$breakpoints` map, and use a media query there.
/// - If a pixel value is passed, it will be converted to an em value using `$global-font-size` as the base.
/// - If a rem value is passed, the unit will be changed to em.
/// - If an em value is passed, the value will be used as-is.
///
/// @param {Keyword|Number} $value - Breakpoint name, or px, rem, or em value to process.
///
/// @output If the breakpoint is "0px and larger", outputs the content as-is. Otherwise, outputs the content wrapped in a media query.
@mixin breakpoint($value) {
$str: breakpoint($value);
// If $str is still an empty string, no media query is needed
@if $str == '' {
@content;
}
// Otherwise, wrap the content in a media query
@else {
@media screen and #{$str} {
@content;
}
}
}
/// Convers the breakpoints map to a URL-encoded string, like this: `key1=value1&key2=value2`. The value is then dropped into the CSS for a special `<meta>` tag, which is read by the Foundation JavaScript. This is how we transfer values from Sass to JavaScript, so they can be defined in one place.
/// @access private
///
/// @param {Map} $map - Map to convert.
///
/// @returns {String} A string containing the map's contents.
@function -zf-bp-serialize($map) {
$str: '';
@each $key, $value in $map {
$str: $str + $key + '=' + -zf-bp-to-em($value) + '&';
}
$str: str-slice($str, 1, -2);
@return $str;
}
/// Find the next key in a map.
/// @access private
///
/// @param {Map} $map - Map to traverse.
/// @param {Mixed} $key - Key to use as a starting point.
///
/// @returns {Mixed} The value for the key after `$key`, if `$key` was found. If `$key` was not found, or `$key` was the last value in the map, returns `null`.
@function -zf-map-next($map, $key) {
// Store the values of the map as a list, so we can access them with nth
$values: map-values($map);
// Ghetto for loop
$i: 1;
$found: false;
@each $val in map-keys($map) {
@if $found == false {
@if ($key == $val) {
$found: true;
}
$i: $i + 1;
}
}
// If the key doesn't exist, or it's the last key in the map, return null
@if $i > length($map) {
@return null;
}
// Otherwise, return the value
@else {
@return nth($values, $i);
}
}
/// Get a value for a breakpoint from a responsive config map. If the config map has the key `$value`, the exact breakpoint value is returned. If the config map does *not* have the breakpoint, the value matching the next lowest breakpoint in the config map is returned.
/// @access private
///
/// @param {Map} $map - Input config map.
/// @param {Keyword} $value - Breakpoint name to use.
///
/// @return {Mixed} The corresponding breakpoint value.
@function -zf-get-bp-val($map, $value) {
// Check if the breakpoint name exists globally
@if not map-has-key($breakpoints, $value) {
@return null;
}
// Check if the breakpoint name exists in the local config map
@else if map-has-key($map, $value) {
// If it does, just return the value
@return map-get($map, $value);
}
// Otherwise, find the next lowest breakpoint and return that value
@else {
$anchor: null;
$found: false;
@each $key, $val in $breakpoints {
@if not $found {
@if map-has-key($map, $key) {
$anchor: $key;
}
@if $key == $value {
$found: true;
}
}
}
@return map-get($map, $anchor);
}
}
// Legacy breakpoint variables
// These will be removed in 6.3
$small-up: null;
$small-only: null;
$medium-up: null;
$medium-only: null;
$large-up: null;
$large-only: null;
$xlarge-up: null;
$xlarge-only: null;
$xxlarge-up: null;
$xxlarge-only: null;
@if map-has-key($breakpoints, small) {
$small-up: screen;
$small-only: unquote('screen and #{breakpoint(small only)}');
}
@if map-has-key($breakpoints, medium) {
$medium-up: unquote('screen and #{breakpoint(medium)}');
$medium-only: unquote('screen and #{breakpoint(medium only)}');
}
@if map-has-key($breakpoints, large) {
$large-up: unquote('screen and #{breakpoint(large)}');
$large-only: unquote('screen and #{breakpoint(large only)}');
}
@if map-has-key($breakpoints, xlarge) {
$xlarge-up: unquote('screen and #{breakpoint(xlarge)}');
$xlarge-only: unquote('screen and #{breakpoint(xlarge only)}');
}
@if map-has-key($breakpoints, xxlarge) {
$xxlarge-up: unquote('screen and #{breakpoint(xxlarge)}');
}

View file

@ -0,0 +1,60 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group functions
////
/// Checks the lightness of `$color`, and if it passes the `$threshold` of lightness, it returns the `$yes` color. Otherwise, it returns the `$no` color. Use this function to dynamically output a foreground color based on a given background color.
///
/// @param {Color} $color - Color to check the lightness of.
/// @param {Color} $yes [$black] - Color to return if `$color` is light.
/// @param {Color} $no [$white] - Color to return if `$color` is dark.
/// @param {Percentage} $threshold [60%] - Threshold of lightness to check against.
///
/// @returns {Color} The $yes color or $no color.
@function foreground($color, $yes: $black, $no: $white, $threshold: 60%) {
@if $color == transparent {
$color: $body-background;
}
@if (lightness($color) > $threshold) {
@return $yes;
}
@else {
@return $no;
}
}
/// Scales a color to be lighter if it's light, or darker if it's dark. Use this function to tint a color appropriate to its lightness.
///
/// @param {Color} $color - Color to scale.
/// @param {Percentage} $scale [5%] - Amount to scale up or down.
/// @param {Percentage} $threshold [40%] - Threshold of lightness to check against.
///
/// @returns {Color} A scaled color.
@function smart-scale($color, $scale: 5%, $threshold: 40%) {
@if lightness($color) > $threshold {
$scale: -$scale;
}
@return scale-color($color, $lightness: $scale);
}
/// Transfers the colors in the `$foundation-palette` variable into the legacy color variables, such as `$primary-color` and `$secondary-color`. Call this mixin below the Global section of your settings file to properly migrate your codebase.
@mixin add-foundation-colors() {
@if map-has-key($foundation-palette, primary) {
$primary-color: map-get($foundation-palette, primary) !global;
}
@if map-has-key($foundation-palette, secondary) {
$secondary-color: map-get($foundation-palette, secondary) !global;
}
@if map-has-key($foundation-palette, success) {
$success-color: map-get($foundation-palette, success) !global;
}
@if map-has-key($foundation-palette, warning) {
$warning-color: map-get($foundation-palette, warning) !global;
}
@if map-has-key($foundation-palette, alert) {
$alert-color: map-get($foundation-palette, alert) !global;
}
}

View file

@ -0,0 +1,68 @@
$-zf-flex-justify: (
'left': flex-start,
'right': flex-end,
'center': center,
'justify': space-between,
'spaced': space-around,
);
$-zf-flex-align: (
'top': flex-start,
'bottom': flex-end,
'middle': center,
'stretch': stretch,
);
/// Enables flexbox by adding `display: flex` to the element.
@mixin flex {
display: flex;
}
/// Horizontally or vertically aligns the items within a flex container.
///
/// @param {Keyword} $x [null] - Horizontal alignment to use. Can be `left`, `right`, `center`, `justify`, or `spaced`. Or, set it to `null` (the default) to not set horizontal alignment.
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
@mixin flex-align($x: null, $y: null) {
@if $x {
@if map-has-key($-zf-flex-justify, $x) {
$x: map-get($-zf-flex-justify, $x);
}
@else {
@warn 'flex-grid-row-align(): #{$x} is not a valid value for horizontal alignment. Use left, right, center, justify, or spaced.'
}
}
@if $y {
@if map-has-key($-zf-flex-align, $y) {
$y: map-get($-zf-flex-align, $y);
}
@else {
@warn 'flex-grid-row-align(): #{$y} is not a valid value for vertical alignment. Use top, bottom, middle, or stretch.'
}
}
justify-content: $x;
align-items: $y;
}
/// Vertically align a single column within a flex row. Apply this mixin to a flex column.
///
/// @param {Keyword} $y [null] - Vertical alignment to use. Can be `top`, `bottom`, `middle`, or `stretch`. Or, set it to `null` (the default) to not set vertical alignment.
@mixin flex-align-self($y: null) {
@if $y {
@if map-has-key($-zf-flex-align, $y) {
$y: map-get($-zf-flex-align, $y);
}
@else {
@warn 'flex-grid-column-align(): #{$y} is not a valid value for alignment. Use top, bottom, middle, or stretch.'
}
}
align-self: $y;
}
/// Changes the source order of a flex child. Children with lower numbers appear first in the layout.
/// @param {Number} $order [0] - Order number to apply.
@mixin flex-order($order: 0) {
order: $order;
}

View file

@ -0,0 +1,235 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group functions
////
/// Creates a CSS triangle, which can be used for dropdown arrows, dropdown pips, and more. Use this mixin inside a `&::before` or `&::after` selector, to attach the triangle to an existing element.
///
/// @param {Number} $triangle-size - Width of the triangle.
/// @param {Color} $triangle-color - Color of the triangle.
/// @param {Keyword} $triangle-direction - Direction the triangle points. Can be `up`, `right`, `down`, or `left`.
@mixin css-triangle(
$triangle-size,
$triangle-color,
$triangle-direction
) {
content: '';
display: block;
width: 0;
height: 0;
border: inset $triangle-size;
@if ($triangle-direction == down) {
border-color: $triangle-color transparent transparent;
border-top-style: solid;
border-bottom-width: 0;
}
@if ($triangle-direction == up) {
border-color: transparent transparent $triangle-color;
border-bottom-style: solid;
border-top-width: 0;
}
@if ($triangle-direction == right) {
border-color: transparent transparent transparent $triangle-color;
border-left-style: solid;
border-right-width: 0;
}
@if ($triangle-direction == left) {
border-color: transparent $triangle-color transparent transparent;
border-right-style: solid;
border-left-width: 0;
}
}
/// Creates a menu icon with a set width, height, number of bars, and colors. The mixin uses the height of the icon and the weight of the bars to determine spacing. <div class="docs-example-burger"></div>
///
/// @param {Color} $color [$black] - Color to use for the icon.
/// @param {Color} $color-hover [$dark-gray] - Color to use when the icon is hovered over.
/// @param {Number} $width [20px] - Width of the icon.
/// @param {Number} $height [16px] - Height of the icon.
/// @param {Number} $weight [2px] - Height of individual bars in the icon.
/// @param {Number} $bars [3] - Number of bars in the icon.
@mixin hamburger(
$color: $black,
$color-hover: $dark-gray,
$width: 20px,
$height: 16px,
$weight: 2px,
$bars: 3
) {
// box-shadow CSS output
$shadow: ();
$hover-shadow: ();
// Spacing between bars is calculated based on the total height of the icon and the weight of each bar
$spacing: floor(($height - ($weight * $bars)) / ($bars - 1));
// Icon container
position: relative;
display: inline-block;
vertical-align: middle;
cursor: pointer;
width: $width;
height: $height;
// Icon bars
&::after {
content: '';
position: absolute;
display: block;
width: 100%;
height: $weight;
background: $color;
top: 0;
left: 0;
@for $i from 2 through $bars {
$offset: ($weight + $spacing) * ($i - 1);
$shadow: append($shadow, 0 $offset 0 $color, comma);
}
box-shadow: $shadow;
}
// Hover state
@if $color-hover {
// Generate CSS
@for $i from 2 through $bars {
$offset: ($weight + $spacing) * ($i - 1);
$hover-shadow: append($hover-shadow, 0 $offset 0 $color-hover, comma);
}
&:hover::after {
background: $color-hover;
box-shadow: $hover-shadow;
}
}
}
/// Adds a downward-facing triangle as a background image to an element. The image is formatted as an SVG, making it easy to change the color. Because Internet Explorer doesn't support encoded SVGs as background images, a PNG fallback is also included.
/// There are two PNG fallbacks: a black triangle and a white triangle. The one used depends on the lightness of the input color.
///
/// @param {Color} $color [$black] - Color to use for the triangle.
@mixin background-triangle($color: $black) {
$rgb: 'rgb%28#{red($color)}, #{green($color)}, #{blue($color)}%29';
background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='32' height='24' viewBox='0 0 32 24'><polygon points='0,0 32,0 16,24' style='fill: #{$rgb}'></polygon></svg>");
@media screen and (min-width:0\0) {
@if lightness($color) < 60% {
// White triangle
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIpJREFUeNrEkckNgDAMBBfRkEt0ObRBBdsGXUDgmQfK4XhH2m8czQAAy27R3tsw4Qfe2x8uOO6oYLb6GlOor3GF+swURAOmUJ+RwtEJs9WvTGEYxBXqI1MQAZhCfUQKRzDMVj+TwrAIV6jvSUEkYAr1LSkcyTBb/V+KYfX7xAeusq3sLDtGH3kEGACPWIflNZfhRQAAAABJRU5ErkJggg==');
}
@else {
// Black triangle
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMBJREFUeNrEllsOhCAMRVszC9IlzU7KCmVHTJsoMWYMUtpyv9BgbuXQB5ZSdgBYYY4ycgBivk8KYFsQMfMiTTBP4o3nUzCKzOabLJbLy2/g31evGkAginR4/ZegKH5qX3bJCscA3t0x3kgO5tQFyhhFf50xRqFLbyMUNJQzgyjGS/wgCpvKqkRBpuWrE4V9d+1E4dPUXqIg107SQOE/2DRQxMwTDygIInVDET9T3lCoj/6j/VCmGjZOl2lKpZ8AAwDQP7zIimDGFQAAAABJRU5ErkJggg==');
}
}
}
/// Applies the micro clearfix hack popularized by Nicolas Gallagher. Include this mixin on a container if its children are all floated, to give the container a proper height.
/// The clearfix is augmented with specific styles to prevent borders in flexbox environments
/// @link http://nicolasgallagher.com/micro-clearfix-hack/ Micro Clearfix Hack
/// @link http://danisadesigner.com/blog/flexbox-clear-fix-pseudo-elements/ Flexbox fix
@mixin clearfix {
&::before,
&::after {
content: ' ';
display: table;
@if $global-flexbox {
flex-basis: 0;
order: 1;
}
}
&::after {
clear: both;
}
}
/// Adds CSS for a "quantity query" selector that automatically sizes elements based on how many there are inside a container.
/// @link http://alistapart.com/article/quantity-queries-for-css Quantity Queries for CSS
///
/// @param {Number} $max - Maximum number of items to detect. The higher this number is, the more CSS that's required to cover each number of items.
/// @param {Keyword} $elem [li] - Tag to use for sibling selectors.
@mixin auto-width($max, $elem: li) {
@for $i from 2 through $max {
&:nth-last-child(#{$i}):first-child,
&:nth-last-child(#{$i}):first-child ~ #{$elem} {
width: percentage(1 / $i);
}
}
}
/// Removes the focus ring around an element when a mouse input is detected.
@mixin disable-mouse-outline {
[data-whatinput='mouse'] & {
outline: 0;
}
}
/// Makes an element visually hidden, but still accessible to keyboards and assistive devices.
/// @link http://snook.ca/archives/html_and_css/hiding-content-for-accessibility Hiding Content for Accessibility
@mixin element-invisible {
position: absolute !important;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
}
/// Reverses the CSS output created by the `element-invisible()` mixin.
@mixin element-invisible-off {
position: static !important;
height: auto;
width: auto;
overflow: visible;
clip: auto;
}
/// Vertically centers the element inside of its first non-static parent,
/// @link http://www.sitepoint.com/centering-with-sass/ Centering With Sass
@mixin vertical-center {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
/// Horizontally centers the element inside of its first non-static parent,
/// @link http://www.sitepoint.com/centering-with-sass/ Centering With Sass
@mixin horizontal-center {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
/// Absolutely centers the element inside of its first non-static parent,
/// @link http://www.sitepoint.com/centering-with-sass/ Centering With Sass
@mixin absolute-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/// Iterates through breakpoints defined in `$breakpoint-classes` and prints the CSS inside the mixin at each breakpoint's media query. Use this with the grid, or any other component that has responsive classes.
///
/// @param {Boolean} $small [true] - If `false`, the mixin will skip the `small` breakpoint. Use this with components that don't prefix classes with `small-`, only `medium-` and up.
@mixin -zf-each-breakpoint($small: true) {
$map: $breakpoint-classes;
@if not $small {
$map: map-remove($map, $-zf-zero-breakpoint);
}
@each $size in $map {
$-zf-size: $size !global;
@include breakpoint($size) {
@content;
}
}
}

View file

@ -0,0 +1,40 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group functions
////
/// Generates a selector with every text input type. You can also filter the list to only output a subset of those selectors.
///
/// @param {List|Keyword} $types [()] - A list of text input types to use. Leave blank to use all of them.
@function text-inputs($types: ()) {
$return: ();
$all-types:
text
password
date
datetime
datetime-local
month
week
email
number
search
tel
time
url
color;
@if not has-value($types) {
$types: $all-types;
}
@each $type in $types {
$return: append($return, unquote('[type=\'#{$type}\']'), comma);
}
@return $return;
}

View file

@ -0,0 +1,90 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group functions
////
$global-font-size: 100% !default;
// scss-lint:disable ZeroUnit
/// Removes the unit (e.g. px, em, rem) from a value, returning the number only.
///
/// @param {Number} $num - Number to strip unit from.
///
/// @returns {Number} The same number, sans unit.
@function strip-unit($num) {
@return $num / ($num * 0 + 1);
}
/// Converts one or more pixel values into matching rem values.
///
/// @param {Number|List} $values - One or more values to convert. Be sure to separate them with spaces and not commas. If you need to convert a comma-separated list, wrap the list in parentheses.
/// @param {Number} $base [null] - The base value to use when calculating the `rem`. If you're using Foundation out of the box, this is 16px. If this parameter is `null`, the function will reference the `$base-font-size` variable as the base.
///
/// @returns {List} A list of converted values.
@function rem-calc($values, $base: null) {
$rem-values: ();
$count: length($values);
// If no base is defined, defer to the global font size
@if $base == null {
$base: $global-font-size;
}
// If the base font size is a %, then multiply it by 16px
// This is because 100% font size = 16px in most all browsers
@if unit($base) == '%' {
$base: ($base / 100%) * 16px;
}
@if $count == 1 {
@return -zf-to-rem($values, $base);
}
@for $i from 1 through $count {
$rem-values: append($rem-values, -zf-to-rem(nth($values, $i), $base));
}
@return $rem-values;
}
// Converts a unitless, pixel, or rem value to em, for use in breakpoints.
@function -zf-bp-to-em($value) {
// Pixel and unitless values are converted to rems
@if unit($value) == 'px' or unitless($value) {
$value: rem-calc($value, $base: 16px);
}
// Then the value is converted to ems
@return strip-unit($value) * 1em;
}
/// Converts a pixel value to matching rem value. *Any* value passed, regardless of unit, is assumed to be a pixel value. By default, the base pixel value used to calculate the rem value is taken from the `$global-font-size` variable.
/// @access private
///
/// @param {Number} $value - Pixel value to convert.
/// @param {Number} $base [null] - Base for pixel conversion.
///
/// @returns {Number} A number in rems, calculated based on the given value and the base pixel value. rem values are passed through as is.
@function -zf-to-rem($value, $base: null) {
// Check if the value is a number
@if type-of($value) != 'number' {
@warn inspect($value) + ' was passed to rem-calc(), which is not a number.';
@return $value;
}
// Calculate rem if units for $value is not rem
@if unit($value) != 'rem' {
$value: strip-unit($value) / strip-unit($base) * 1rem;
}
// Turn 0rem into 0
@if $value == 0rem {
$value: 0;
}
@return $value;
}

View file

@ -0,0 +1,11 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import 'unit';
@import 'value';
@import 'color';
@import 'selector';
@import 'flex';
@import 'breakpoint';
@import 'mixins';

View file

@ -0,0 +1,107 @@
// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group functions
////
/// Determine if a value is not falsey, in CSS terms. Falsey values are `null`, `none`, `0` with any unit, or an empty list.
///
/// @param {Mixed} $val - Value to check.
///
/// @returns {Boolean} `true` if `$val` is not falsey.
@function has-value($val) {
@if $val == null or $val == none {
@return false;
}
@if type-of($val) == 'number' and strip-unit($val) == 0 {
@return false;
}
@if type-of($val) == 'list' and length($val) == 0 {
@return false;
}
@return true;
}
/// Determine a top/right/bottom/right value on a padding, margin, etc. property, no matter how many values were passed in. Use this function if you need to know the specific side of a value, but don't know if the value is using a shorthand format.
///
/// @param {List|Number} $val - Value to analyze. Should be a shorthand sizing property, e.g. "1em 2em 1em"
/// @param {Keyword} $side - Side to return. Should be `top`, `right`, `bottom`, or `left`.
///
/// @returns {Number} A single value based on `$val` and `$side`.
@function get-side($val, $side) {
$length: length($val);
@if $length == 1 {
@return $val;
}
@if $length == 2 {
@return map-get((
top: nth($val, 1),
bottom: nth($val, 1),
left: nth($val, 2),
right: nth($val, 2),
), $side);
}
@if $length == 3 {
@return map-get((
top: nth($val, 1),
left: nth($val, 2),
right: nth($val, 2),
bottom: nth($val, 3),
), $side);
}
@if $length == 4 {
@return map-get((
top: nth($val, 1),
right: nth($val, 2),
bottom: nth($val, 3),
left: nth($val, 4),
), $side);
}
}
/// Given border $val, find a specific element of the border, which is $elem. The possible values for $elem are width, style, and color.
///
/// @param {List} $val - Border value to find a value in.
/// @param {Keyword} $elem - Border component to extract.
///
/// @returns {Mixed} If the value exists, returns the value. If the value is not in the border definition, the function will return a 0px width, solid style, or black border.
@function get-border-value($val, $elem) {
// Find the width, style, or color and return it
@each $v in $val {
$type: type-of($v);
@if $elem == width and $type == 'number' {
@return $v;
}
@if $elem == style and $type == 'string' {
@return $v;
}
@if $elem == color and $type == 'color' {
@return $v;
}
}
// Defaults
$defaults: (
width: 0,
style: solid,
color: #000,
);
@return map-get($defaults, $elem);
}
/// Finds a value in a nested map.
/// @link https://css-tricks.com/snippets/sass/deep-getset-maps/ Deep Get/Set in Maps
///
/// @param {Map} $map - Map to pull a value from.
/// @param {String} $keys... - Keys to use when looking for a value.
/// @returns {Mixed} The value found in the map.
@function map-deep-get($map, $keys...) {
@each $key in $keys {
$map: map-get($map, $key);
}
@return $map;
}