Settings¶
The new syntax for Susy is based around a number of settings that can be written either as a Sass Map or using a shorthand syntax. These two definitions are interchangeable:
$susy: (
columns: 12,
gutters: 1/4,
math: fluid,
output: float,
gutter-position: inside,
);
$shorthand: 12 1/4 fluid float inside;
Either format can be passed as a single argument to the functions and mixins that make up the Susy language. Maps can even be used as part of the shorthand:
$susy: (
columns: 12,
gutters: .25,
math: fluid,
);
@include layout($susy float inside);
Unless otherwise noted, most settings can be controlled both globally (by setting the site-wide default) or locally (passed to individual functions and mixins).
Global Defaults¶
Here are all the global Susy settings with their default values:
$susy: (
flow: ltr,
math: fluid,
output: float,
gutter-position: after,
container: auto,
container-position: center,
columns: 4,
gutters: .25,
column-width: false,
global-box-sizing: content-box,
last-flow: to,
debug: (
image: hide,
color: rgba(#66f, .25),
output: background,
toggle: top right,
),
use-custom: (
background-image: true,
background-options: false,
box-sizing: true,
clearfix: false,
rem: true,
)
);
You can set your own global defaults, or create individual layout maps to access as needed.
For global settings,
create a $susy variable
with any values that you need.
$susy: (
columns: 12,
gutters: .25,
gutter-position: inside,
)
Layout¶
A “layout” in Susy is made up of any combination of settings. Layouts are stored as maps, but can also be written as shorthand.
Layout [function]¶
Convert shorthand into a map of settings.
- function
- Format:
layout($layout)- $layout:
// function input
$map: layout(auto 12 .25 inside fluid isolate);
//output
$map: (
container: auto,
columns: 12,
gutters: .25,
gutter-position: inside,
math: fluid,
output: isolate,
);
This is useful any time you need to combine settings stored in different variables. It’s not possible to combine two shorthand variables:
// THIS WON'T WORK
$short: 12 .25 inside;
@include layout($short fluid no-gutters);
but it is possible to add a map into the shorthand:
// THIS WILL WORK
$map: layout(12 .25 inside);
@include layout($map fluid no-gutters);
or combine two maps:
$map1: 13 static;
$map2: (6em 1em) inside;
@include layout($map1 $map2);
Layout [mixin]¶
Set a new layout as the global default.
- mixin
- Format:
layout($layout, $clean)- $layout:
- $clean:
<boolean>
// mixin: set a global layout
@include layout(12 1/4 inside-static);
By default, these new settings are added to your existing global settings. Use the $clean argument to establish new settings from scratch.
With Layout¶
Temporarily set defaults for a section of your code.
- mixin
- Format:
with-layout($layout, $clean) { @content }- $layout:
- $clean:
<boolean>
- @content:
Sass content block
@include with-layout(8 static) {
// Temporary 8-column static grid...
}
// Global settings are restored...
By default, these new settings are added to your existing global settings. Use the $clean argument to establish new settings from scratch.
Susy-Get¶
- function
- Format:
susy-get($key, $layout)- $key:
Setting name
- $layout:
You can access your layout settings at any time,
using the susy-get function.
$large: layout(80em 24 1/4 inside);
$large-container: susy-get(container, $large);
To access a nested setting like debug/image,
send the full path as a list for the $key argument.
$debug-image: susy-get(debug image);
If no setting is available
(or no $layout is provided)
susy-get falls back to the global user settings,
and finally to the Susy default settings.
Flow¶
The reading direction of your document. Layout elements will stack out in the direction of flow, unless otherwise directed.
- setting
- Key:
flow- Scope:
global, local
- Options:
rtl|ltr- Default:
ltr
Math¶
Susy can produce either relative widths (fluid percentages) or static widths (using given units).
- setting
- Key:
math- Scope:
global, local
- Options:
fluid|static- Default:
fluid
fluid¶All internal grid spans will be calculated relative to the container, and output as
%values.static¶All internal grid values will be calculated as multiples of the
column-widthsetting. If you set column-width to4em, your grid widths will be output asemvalues.
Output¶
Susy can generate output using different layout techniques. Currently we have a float module, with an extension to handle isolation as well. In the future there could be flexbox, grid, and other output styles.
- setting
- Key:
output- Scope:
global, local
- Options:
float|isolate- Default:
float
float¶Floats are the most common form of layout used on the web.
isolate¶Isolation is a trick developed by John Albin Wilkins to help fix sub-pixel rounding bugs in fluid, floated layouts. You can think of it like absolute positioning of floats. We find it to be very useful for spot-checking the worst rounding bugs, but we think it’s overkill as a layout technique all to itself.
Container¶
Set the max-width of the containing element.
- setting
- Key:
container
- Scope:
global, local [container only]
- Options:
<length>|auto- Default:
auto
<length>Set any explicit length (e.g.
60emor80%), and it will be applied directly to the container.
auto¶Susy will calculate the width of your container based on the other grid settings, or fall back to
100%.
Warning
For static layouts,
leave container: auto
and set the column-width instead.
Susy will calculate the outer container width for you.
Dividing columns out of a set container width
would leave you open to sub-pixel errors,
and no one likes sub-pixel errors.
Container Position¶
Align the container relative to it’s parent element (often the viewport).
- setting
- Key:
container-position
- Scope:
global, local [container only]
- Options:
left|center|right|<length> [*2]- Default:
center
left¶Holds container elements flush left, with
margin-left: 0;andmargin-right: auto;.center¶Centers the container, by setting both left and right margins to
auto.right¶Pushes the container flush right, with
margin-right: 0;andmargin-left: auto;.
<length> [*2]If one length is given, it will be applied to both side margins, to offset the container from the edges of the viewport. If two values are given, they will be used as
leftandrightmargins respectively.
Columns¶
Establish the column-count and arrangement for a grid.
- setting
- Key:
columns- Scope:
global, local
- Options:
<number>|<list>- Default:
4
<number>The number of columns in your layout.
<list>For asymmetrical grids, list the size of each column relative to the other columns, where
1is a single column-unit.(1 2)would create a 2-column grid, with the second column being twice the width of the first. For a Fibonacci-inspired grid, use(1 1 2 3 5 8 13).
Gutters¶
Set the width of a gutter relative to columns on your grid.
- setting
- Key:
gutters- Scope:
global, local
- Options:
<ratio>- Default:
1/4
<ratio>Gutters are established as a ratio to the size of a column. The default
1/4setting will create gutters one quarter the size of a column. In asymmetrical grids, this is1/4the size of a single column-unit.If you want to set explicit column and gutter widths, write your
gutterssetting as<gutter-width>/<column-width>. You can even leave the units attached.// 70px columns, 20px gutters $susy: ( gutters: 20px/70px, );
Column Width¶
Optionally set the explicit width of a column.
- setting
- Key:
column-width- Scope:
global, local
- Options:
<length>|false/null- Default:
false
<length>The width of one column, using any valid unit. This will be used in
staticlayouts to calculate all grid widths, but can also be used byfluidlayouts to calculate an outer maximum width for the container.false/nullThere is no need for column-width in
fluidlayouts unless you specifically want the container-width calculated for you.
Gutter Position¶
Set how and where gutters are added to the layout, either as padding or margins on layout elements.
- setting
- Key:
gutter-position
- Scope:
global, local
- Options:
before|after|split|inside|inside-static- Default:
after
before¶Gutters are added as
marginbefore a layout element, relative to the flow direction (left-margin for ltr, right-margin for rtl). The first gutter on each row will need to be removed.after¶Gutters are added as
marginafter a layout element, relative to the flow direction. The last gutter on each row will need to be removed.split¶Gutters are added as
marginon both sides of a layout element, and are not removed at the edges of the grid.inside¶Gutters are added as
paddingon both sides of a layout element, and are not removed at the edges of the grid.inside-static¶Gutters are added as static
paddingon both sides of a layout element, even in a fluid layout context, and are not removed at the edges of the grid.
Global Box Sizing¶
Tell Susy what box model is being applied globally.
- setting
- Key:
global-box-sizing- Scope:
global
- Options:
border-box|content-box- Default:
content-box
content-box¶Browsers use the
content-boxmodel unless you specify otherwise.border-box¶If you are using the Paul Irish universal border-box technique (or something similar), you should change this setting to
border-box. You can also use ourborder-box-sizingmixin, and we’ll take care of it all for you.
For more, see the MDN box-sizing documentation.
Last Flow¶
The float-direction for the last element in a row when using the float output.
- setting
- Key:
last-flow- Scope:
global
- Options:
from|to- Default:
to
from¶This is the default for all other elements in a layout. In an
ltr(left-to-right) flow, the from-direction isleft, and this setting would float “last” elements to the left, along with the other elements.to¶In many cases (especially with
fluidgrids), it can be helpful to float the last element in a row in the opposite direction.
Debug¶
Susy has a few tools to help in debugging your layout as you work. These settings help you control the debugging environment.
- setting block
- Key:
debug- Scope:
global, local [container only]
- Options:
<map of sub-settings>
$susy: (
debug: (
image: show,
color: blue,
output: overlay,
toggle: top right,
),
);
Warning
Grid images are not exact.
Browsers have extra trouble
with sub-pixel rounding on background images.
These are meant for rough debugging,
not for pixel-perfect measurements.
Expect the to side of your grid image
(right if your flow is ltr)
to be off by several pixels.
Debug Image¶
Toggle the available grid images on and off.
- setting
- Key:
debug image- Scope:
global, local [container only]
- Options:
show|hide|show-columns|show-baseline- Default:
hide
show¶Show grid images, usually on the background of container elements, for the purpose of debugging. If you are using Compass vertical rhythms (or have set your own
$base-line-heightvariable) Susy will show baseline grids as well.hide¶Hide all grid debugging images.
show-columns¶Show only horizontal grid-columns, even if a baseline grid is available.
show-baseline¶Show only the baseline grid, if the
$base-line-heightvariable is available.
Debug Output¶
The debug image can be output either as a background on the container, or as a generated overlay.
- setting
- Key:
debug output- Scope:
global, local [container only]
- Options:
background|overlay- Default:
background
background¶Debugging images will be generated on on the background of the container element.
overlay¶Debugging images will be generated as an overlay using the container’s
::beforeelement. Initially, the overlay is hidden, until you hover over the toggle we place in a corner of the viewport. Hover over the toggle to make the overlay appear.
Debug Toggle¶
If you are using the grid overlay option,
Susy will generate a toggle to show/hide the overlay.
Hovering over the toggle will show the overlay.
You can place the toggle in any corner of the viewport
using a combination of top, right, bottom, and left.
- setting
- Key:
debug toggle- Scope:
global
- Options:
right|leftandtop|bottom- Default:
top right
Debug Color¶
Change the color of columns in the generated grid image.
- setting
- Key:
debug color- Scope:
global
- Options:
<color>
- Default:
rgba(#66f, .25)
Custom Support¶
There are several common helpers that you can tell Susy to use, if you provide them yourself or through a third-party library like Compass or Bourbon.
Custom Clearfix¶
Tell Susy to use a global clearfix mixin.
- setting
- Key:
use-custom clearfix- Scope:
global
- Options:
<boolean>
- Default:
false
falseSusy will use an internal micro-clearfix.
trueSusy will look for an existing
clearfixmixin, and fallback to the internal micro-clearfix if none is found.
Custom Background Image¶
Tell Susy to use a global background-image mixin.
This is only used for debugging.
- setting
- Key:
use-custom background-image- Scope:
global
- Options:
<boolean>
- Default:
true
falseSusy will output background-images directly to CSS.
trueSusy will look for an existing
background-imagemixin (like the ones provided by Compass and Bourbon), and fallback to plain CSS output if none is found.
Custom Background Options¶
Tell Susy to use global background-size, -origin, and -clip mixins.
This is only used for debugging.
- setting
- Key:
use-custom background-options- Scope:
global
- Options:
<boolean>
- Default:
false
falseSusy will output background-options directly to CSS.
trueSusy will look for existing
background-size,-origin, and-clipmixins (like the ones provided by Compass and Bourbon), and fallback to plain CSS output if none is found.
Custom Breakpoint Options¶
Tell Susy to use a custom breakpoint mixin,
like the one provided by the Breakpoint plugin.
- setting
- Key:
use-custom breakpoint- Scope:
global
- Options:
<boolean>
- Default:
true
falseSusy will use an internal fallback for media-queries.
trueSusy will look for existing an
breakpointmixin like the one provided by the [Breakpoint](http://breakpoint-sass.com) plugin, and fallback to internal media-query support if none is found.
Custom Box Sizing¶
Tell Susy to use a global box-sizing mixin.
- setting
- Key:
use-custom box-sizing- Scope:
global
- Options:
<boolean>
- Default:
true
falseSusy will output
box-sizingofficial syntax, as well as-mozand-webkitprefixed versions.trueSusy will look for an existing
box-sizingmixin (like the ones provided by Compass and Bourbon), and fallback to mozilla, webkit, and official syntax if none is found.
Custom Rem¶
Tell Susy to use the Compass rem support module.
- setting
- Key:
use-custom rem- Scope:
global
- Options:
<boolean>
- Default:
true
falseSusy will output length values directly to CSS.
trueSusy will look for an existing
remmixin, and check the$rhythm-unitand$rem-with-px-fallbacksettings provided by Compass, or fallback to plain CSS output if they aren’t found.
Location¶
Reference a specific column on the grid
for row edges,
isolation,
or asymmetrical layouts.
Locations keywords don’t require the at flag.
- setting
- Key:
location- Scope:
local
- Options:
first/alpha|last/omega|<number>- Default:
null
first¶alpha¶Set location to
1.last¶omega¶Set the location to the final column, and any previous columns included by the relevant
span.
<number>Set the location to any column-index between
1and the total number of available columns.
Box Sizing¶
Set a new box model on any given element.
- setting
- Key:
box-sizing- Scope:
local
- Options:
border-box|content-box- Default:
null
border-boxOutput
box-sizingCSS to set theborder-boxmodel.content-boxOutput
box-sizingCSS to set thecontent-boxmodel.
Spread¶
Adjust how many gutters are included in a column span.
- setting
- Key:
spread- Scope:
local
- Options:
narrow|wide|wider- Default:
various…
narrow¶In most cases, column-spans include the gutters between columns. A span of
3 narrowcovers the width of 3 columns, as well as 2 internal gutters. This is the default in most cases.wide¶Sometimes you need to include one side gutter in a span width. A span of
3 widecovers the width of 3 columns, and 3 gutters (2 internal, and 1 side). This is the default for several margin/padding mixins.wider¶Sometimes you need to include both side gutters in a span width. A span of
3 widercovers the width of 3 columns, and 4 gutters (2 internal, and 2 sides).
Gutter Override¶
Set an explicit one-off gutter-width on an element, or remove its gutters entirely.
- setting
- Key:
gutter-override- Scope:
local
- Options:
no-gutters/no-gutter|<length>- Default:
null
<length>Override the calculated gutter output with an explicit width.
Role¶
Mark a grid element as a nesting context for child elements.
- setting
- Key:
role- Scope:
local
- Options:
nest- Default:
null
nest¶Mark an internal grid element as a context for nested grids.
Note
This can be used with any grid type,
but it is required for nesting
with split, inside, or inside-static gutters.