Upgrade Path
susy-sass3 is a ground-up rethink of Susy 2. If you’re coming from Susy 2 (or the older Susy 1), this is a significant change — but the result is much smaller and more flexible. This page covers the highlights. For the reasoning behind the redesign, see Why susy-sass3 Is Just Functions, and for the trickiest concept, Understanding Spread.
No More Mixins
The biggest change: susy-sass3 has no mixins. span, container,
gutters, last, gallery, bleed, isolate, show-grid,
susy-breakpoint, and the rest have all been removed. Web layout has grown
too powerful and flexible to wrap up in a fixed set of shortcuts.
Instead, susy-sass3 gives you three functions — span, gutter, and slice — and you apply their return values yourself. What used to be a mixin becomes a couple of plain CSS declarations:
// Susy 2
.item { @include span(3 of 12); }
// susy-sass3 — you write the output
.item {
float: left;
width: span(3 of 12);
margin-right: gutter(of 12);
}
This is more typing for a floated grid, but it also means susy-sass3 works just as well with flexbox, CSS grid, transforms, or anything else — it never assumes how you want to build your layout.
Settings
susy-sass3 trims the settings down to four: columns,
gutters, spread, and container-spread. Most of the Susy 2 settings
are simply gone.
Columns
columns no longer takes a bare number. Describe your grid as a list of
column sizes, using susy-repeat() for equal
columns:
// Susy 2
$susy: (columns: 12);
// susy-sass3
$susy: ('columns': susy-repeat(12));
The old $count x $width syntax for static grids is likewise replaced:
// Susy 2: columns: 4 x 120px
// susy-sass3
$susy: ('columns': susy-repeat(4, 120px));
Math, Output, Container, Flow…
There’s no math, output, container, container-position,
flow, last-flow, gutter-position, global-box-sizing, debug,
or use-custom setting anymore. Because susy-sass3 only returns values and never
writes layout CSS, most of these no longer have anything to configure.
Fluid vs static is now decided by your units. Unitless columns produce
%output; united columns produce that unit; mixing them producescalc().Gutter position (before / after / inside / split) was about where a mixin wrote margins or padding. Now you decide that yourself by choosing which property to apply
gutter()to.Flow / direction is handled with your own CSS (or logical properties).
Spread
spread existed in Susy 2 as a per-span option (narrow / wide /
wider) and was otherwise handled behind the scenes. susy-sass3 promotes it to a
first-class setting, with a matching
container-spread, giving you full control over
the edge gutters at both ends. See Understanding Spread.
Functions
Span & Gutter
The span and gutter functions carry
over, using the shorthand syntax. The old columns() and
space() functions are gone — the narrow / wide spread keywords cover
that difference now.
// Susy 2
$a: columns(3, 6);
$b: space(2, 7);
// susy-sass3
$a: span(3 of 6);
$b: span(2 of 7 wide);
Container & Isolation
There’s no container function or mixin, and no isolation output — those were
tied to specific layout techniques. Set your own container width, and use modern
layout tools (flexbox, grid) to avoid the sub-pixel issues isolation worked
around.
Debugging Grids
The Susy 2 show-grid mixin and debug settings are replaced by susy-sass3’s
SVG Grid plugin. Import it and drop the returned SVG
into a background:
@import 'susy-sass3/sass/plugins/svg-grid';
.grid { background: susy-svg-grid() no-repeat scroll; }
Responsive Design
Media-query handling has been removed entirely — there’s no susy-breakpoint
or susy-media. susy-sass3 returns values, so you can call the functions inside
any @media block (or any media-query library you already use):
.main { width: span(4 of 4); }
@media (min-width: 40em) {
.main { width: span(3 of 12); }
}
Distribution & Toolchain
susy-sass3 is distributed on npm only now (no RubyGems or Bower). The package is
susy-sass3.susy-sass3 additionally moves the whole thing onto Dart Sass; the old node-sass / Compass toolchain is no longer supported.
See the Changelog for the full history.