/* ========================================================================== #LAYOUT ========================================================================== */ /** * Grid-like layout system. * * The layout object provides us with a column-style layout system. This file * contains the basic structural elements, but classes should be complemented * with width utilities, for example: * *
*
*
*
*
*
* * The above will create a two-column structure in which each column will * fluidly fill half of the width of the parent. We can have more complex * systems: * *
*
*
*
*
*
*
*
* * The above will create a system in which the first item will be 100% width * until we enter our medium breakpoint, when it will become 33.333% width. The * second and third items will be 50% of their parent, until they also become * 33.333% width at the medium breakpoint. * * We can also manipulate entire layout systems by adding a series of modifiers * to the `.o-layout` block. For example: * *
* * This will reverse the displayed order of the system so that it runs in the * opposite order to our source, effectively flipping the system over. * *
* * This will cause the system to fill up from either the centre or the right * hand side. Default behaviour is to fill up the layout system from the left. * * There are plenty more options available to us: explore them below. */ // By default we use the `font-size: 0;` trick to remove whitespace between // items. Set this to true in order to use a markup-based strategy like // commenting out whitespace or minifying HTML. $inuit-use-markup-fix: false !default; /* Default/mandatory classes ========================================================================== */ /** * 1. Allows us to use the layout object on any type of element. * 2. We need to defensively reset any box-model properties. * 3. Use the negative margin trick for multi-row grids: * http://csswizardry.com/2011/08/building-better-grid-systems/ */ .o-layout { display: block; /* [1] */ margin: 0; /* [2] */ padding: 0; /* [2] */ list-style: none; /* [1] */ margin-left: -$inuit-global-spacing-unit; /* [3] */ @if ($inuit-use-markup-fix == false) { font-size: 0; } } /** * 1. Required in order to combine fluid widths with fixed gutters. * 2. Allows us to manipulate grids vertically, with text-level properties, * etc. * 3. Default item alignment is with the tops of each other, like most * traditional grid/layout systems. * 4. By default, all layout items are full-width (mobile first). * 5. Gutters provided by left padding: * http://csswizardry.com/2011/08/building-better-grid-systems/ * 6. Fallback for old IEs not supporting `rem` values. */ .o-layout__item { box-sizing: border-box; /* [1] */ display: inline-block; /* [2] */ vertical-align: top; /* [3] */ width: 100%; /* [4] */ padding-left: $inuit-global-spacing-unit; /* [5] */ @if ($inuit-use-markup-fix == false) { font-size: $inuit-global-font-size; /* [6] */ font-size: 1rem; } } /* Gutter size modifiers ========================================================================== */ .o-layout--flush { margin-left: 0; > .o-layout__item { padding-left: 0; } } .o-layout--tiny { margin-left: -$inuit-global-spacing-unit-tiny; > .o-layout__item { padding-left: $inuit-global-spacing-unit-tiny; } } .o-layout--small { margin-left: -$inuit-global-spacing-unit-small; > .o-layout__item { padding-left: $inuit-global-spacing-unit-small; } } .o-layout--large { margin-left: -$inuit-global-spacing-unit-large; > .o-layout__item { padding-left: $inuit-global-spacing-unit-large; } } .o-layout--huge { margin-left: -$inuit-global-spacing-unit-huge; > .o-layout__item { padding-left: $inuit-global-spacing-unit-huge; } } /* Vertical alignment modifiers ========================================================================== */ /** * Align all grid items to the middles of each other. */ .o-layout--middle { > .o-layout__item { vertical-align: middle; } } /** * Align all grid items to the bottoms of each other. */ .o-layout--bottom { > .o-layout__item { vertical-align: bottom; } } /** * Stretch all grid items of each row to have an equal-height. * Please be aware that this modifier class doesn’t take any effect in IE9 and * below and other older browsers due to the lack of `display: flex` support. */ .o-layout--stretch { display: flex; flex-wrap: wrap; > .o-layout__item { display: flex; } &.o-layout--center { justify-content: center; } &.o-layout--right { justify-content: flex-end; } &.o-layout--left { justify-content: flex-start; } } /* Fill order modifiers ========================================================================== */ /** * Fill up the layout system from the centre. */ .o-layout--center { text-align: center; > .o-layout__item { text-align: left; } } /** * Fill up the layout system from the right-hand side. */ .o-layout--right { text-align: right; > .o-layout__item { text-align: left; } } /** * Fill up the layout system from the left-hand side. This will likely only be * needed when using in conjunction with `.o-layout--reverse`. */ .o-layout--left { text-align: left; > .o-layout__item { text-align: left; } } /** * Reverse the rendered order of the grid system. */ .o-layout--reverse { direction: rtl; > .o-layout__item { direction: ltr; } } /* Auto-widths modifier ========================================================================== */ /** * Cause layout items to take up a non-explicit amount of width. */ .o-layout--auto { > .o-layout__item { width: auto; } }