susy 1.0.9 → 2.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. data/CHANGELOG.mkdn +0 -27
  2. data/README.md +4 -87
  3. data/docs/BUGS.md +2 -0
  4. data/docs/Gemfile.lock +142 -0
  5. data/docs/README.md +54 -0
  6. data/docs/config.rb +120 -0
  7. data/docs/lib/guide_helpers.rb +19 -0
  8. data/docs/source/apple-touch-icon-114x114-precomposed.png +0 -0
  9. data/docs/source/apple-touch-icon-144x144-precomposed.png +0 -0
  10. data/docs/source/apple-touch-icon-72x72-precomposed.png +0 -0
  11. data/docs/source/apple-touch-icon-precomposed.png +0 -0
  12. data/docs/source/demos/grid-types.html.md +263 -0
  13. data/docs/source/demos/index.html.md +23 -0
  14. data/docs/source/demos/magic.html.md +320 -0
  15. data/docs/source/favicon.ico +0 -0
  16. data/docs/source/fonts/@Font-Face License.txt +18 -0
  17. data/docs/source/fonts/Baskerville-amp-webfont.eot +0 -0
  18. data/docs/source/fonts/Baskerville-amp-webfont.svg +241 -0
  19. data/docs/source/fonts/Baskerville-amp-webfont.ttf +0 -0
  20. data/docs/source/fonts/Baskerville-amp-webfont.woff +0 -0
  21. data/docs/source/fonts/CenturyOldStyle-Bold-webfont.eot +0 -0
  22. data/docs/source/fonts/CenturyOldStyle-Bold-webfont.svg +240 -0
  23. data/docs/source/fonts/CenturyOldStyle-Bold-webfont.ttf +0 -0
  24. data/docs/source/fonts/CenturyOldStyle-Bold-webfont.woff +0 -0
  25. data/docs/source/fonts/CenturyOldStyle-Italic-webfont.eot +0 -0
  26. data/docs/source/fonts/CenturyOldStyle-Italic-webfont.svg +240 -0
  27. data/docs/source/fonts/CenturyOldStyle-Italic-webfont.ttf +0 -0
  28. data/docs/source/fonts/CenturyOldStyle-Italic-webfont.woff +0 -0
  29. data/docs/source/fonts/CenturyOldStyle-Regular-webfont.eot +0 -0
  30. data/docs/source/fonts/CenturyOldStyle-Regular-webfont.svg +240 -0
  31. data/docs/source/fonts/CenturyOldStyle-Regular-webfont.ttf +0 -0
  32. data/docs/source/fonts/CenturyOldStyle-Regular-webfont.woff +0 -0
  33. data/docs/source/fonts/CenturyOldStyleCaps-Regular-webfont.eot +0 -0
  34. data/docs/source/fonts/CenturyOldStyleCaps-Regular-webfont.svg +240 -0
  35. data/docs/source/fonts/CenturyOldStyleCaps-Regular-webfont.ttf +0 -0
  36. data/docs/source/fonts/CenturyOldStyleCaps-Regular-webfont.woff +0 -0
  37. data/docs/source/fonts/FranklinGothic-Book-webfont.eot +0 -0
  38. data/docs/source/fonts/FranklinGothic-Book-webfont.svg +240 -0
  39. data/docs/source/fonts/FranklinGothic-Book-webfont.ttf +0 -0
  40. data/docs/source/fonts/FranklinGothic-Book-webfont.woff +0 -0
  41. data/docs/source/fonts/FranklinGothic-BookIt-webfont.eot +0 -0
  42. data/docs/source/fonts/FranklinGothic-BookIt-webfont.svg +240 -0
  43. data/docs/source/fonts/FranklinGothic-BookIt-webfont.ttf +0 -0
  44. data/docs/source/fonts/FranklinGothic-BookIt-webfont.woff +0 -0
  45. data/docs/source/fonts/FranklinGothic-Cd-webfont.eot +0 -0
  46. data/docs/source/fonts/FranklinGothic-Cd-webfont.svg +240 -0
  47. data/docs/source/fonts/FranklinGothic-Cd-webfont.ttf +0 -0
  48. data/docs/source/fonts/FranklinGothic-Cd-webfont.woff +0 -0
  49. data/docs/source/fonts/FranklinGothic-CdIt-webfont.eot +0 -0
  50. data/docs/source/fonts/FranklinGothic-CdIt-webfont.svg +240 -0
  51. data/docs/source/fonts/FranklinGothic-CdIt-webfont.ttf +0 -0
  52. data/docs/source/fonts/FranklinGothic-CdIt-webfont.woff +0 -0
  53. data/docs/source/fonts/FranklinGothic-Med-webfont.eot +0 -0
  54. data/docs/source/fonts/FranklinGothic-Med-webfont.svg +240 -0
  55. data/docs/source/fonts/FranklinGothic-Med-webfont.ttf +0 -0
  56. data/docs/source/fonts/FranklinGothic-Med-webfont.woff +0 -0
  57. data/docs/source/fonts/FranklinGothic-MedCd-webfont.eot +0 -0
  58. data/docs/source/fonts/FranklinGothic-MedCd-webfont.svg +240 -0
  59. data/docs/source/fonts/FranklinGothic-MedCd-webfont.ttf +0 -0
  60. data/docs/source/fonts/FranklinGothic-MedCd-webfont.woff +0 -0
  61. data/docs/source/fonts/FranklinGothic-MedCdIt-webfont.eot +0 -0
  62. data/docs/source/fonts/FranklinGothic-MedCdIt-webfont.svg +240 -0
  63. data/docs/source/fonts/FranklinGothic-MedCdIt-webfont.ttf +0 -0
  64. data/docs/source/fonts/FranklinGothic-MedCdIt-webfont.woff +0 -0
  65. data/docs/source/fonts/FranklinGothic-MedIt-webfont.eot +0 -0
  66. data/docs/source/fonts/FranklinGothic-MedIt-webfont.svg +240 -0
  67. data/docs/source/fonts/FranklinGothic-MedIt-webfont.ttf +0 -0
  68. data/docs/source/fonts/FranklinGothic-MedIt-webfont.woff +0 -0
  69. data/docs/source/fonts/License.txt +77 -0
  70. data/docs/source/fonts/susy.eot +0 -0
  71. data/docs/source/fonts/susy.svg +69 -0
  72. data/docs/source/fonts/susy.ttf +0 -0
  73. data/docs/source/fonts/susy.woff +0 -0
  74. data/docs/source/guides/getting-started.html.md +277 -0
  75. data/docs/source/guides/reference.html.md +658 -0
  76. data/docs/source/guides/upgrade-1-0.html.md +286 -0
  77. data/docs/source/humans.txt +45 -0
  78. data/docs/source/images/splash-iphone.png +0 -0
  79. data/docs/source/images/splash-iphone4.png +0 -0
  80. data/docs/source/images/splash-landscape.png +0 -0
  81. data/docs/source/images/splash-portrait.png +0 -0
  82. data/docs/source/index.html.md +87 -0
  83. data/docs/source/javascripts/jquery-1.7.1.min.js +4 -0
  84. data/docs/source/javascripts/jqwidont.js +5 -0
  85. data/docs/source/javascripts/modernizr-2.5.3.min.js +4 -0
  86. data/docs/source/javascripts/modernizr.selectors.js +55 -0
  87. data/docs/source/javascripts/viewport.js +9 -0
  88. data/docs/source/layouts/grid-types.haml +22 -0
  89. data/docs/source/layouts/layout.haml +34 -0
  90. data/docs/source/layouts/magic.haml +28 -0
  91. data/docs/source/partials/_contentinfo.haml +47 -0
  92. data/docs/source/partials/_demonav.haml +2 -0
  93. data/docs/source/partials/_google_analytics.haml +5 -0
  94. data/docs/source/partials/_head.haml +22 -0
  95. data/docs/source/partials/_javascripts.haml +4 -0
  96. data/docs/source/partials/_navigation.haml +15 -0
  97. data/docs/source/sites-using-susy.html.md +29 -0
  98. data/docs/source/stylesheets/_base/_base.scss +23 -0
  99. data/docs/source/stylesheets/_base/_colors.scss +47 -0
  100. data/docs/source/stylesheets/_base/_size.scss +49 -0
  101. data/docs/source/stylesheets/_base/_type.scss +19 -0
  102. data/docs/source/stylesheets/_demos/_demo.scss +28 -0
  103. data/docs/source/stylesheets/_demos/magic/_layout.scss +39 -0
  104. data/docs/source/stylesheets/_demos/magic/_style.scss +104 -0
  105. data/docs/source/stylesheets/_demos/types/_layouts.scss +88 -0
  106. data/docs/source/stylesheets/_demos/types/_template.scss +57 -0
  107. data/docs/source/stylesheets/_general/_century-oldstyle.scss +70 -0
  108. data/docs/source/stylesheets/_general/_font-license.scss +23 -0
  109. data/docs/source/stylesheets/_general/_fonts.scss +26 -0
  110. data/docs/source/stylesheets/_general/_franklin-gothic.scss +112 -0
  111. data/docs/source/stylesheets/_general/_icons.scss +86 -0
  112. data/docs/source/stylesheets/_general/_root.scss +79 -0
  113. data/docs/source/stylesheets/_general/_type.scss +114 -0
  114. data/docs/source/stylesheets/_layout.scss +48 -0
  115. data/docs/source/stylesheets/_modules/_ag-test.scss +59 -0
  116. data/docs/source/stylesheets/_modules/_banner.scss +61 -0
  117. data/docs/source/stylesheets/_modules/_contentinfo.scss +41 -0
  118. data/docs/source/stylesheets/_modules/_intro.scss +53 -0
  119. data/docs/source/stylesheets/_modules/_nav.scss +44 -0
  120. data/docs/source/stylesheets/_modules/_pages.scss +5 -0
  121. data/docs/source/stylesheets/_modules/_secondary.scss +22 -0
  122. data/docs/source/stylesheets/_modules/_toggle.scss +40 -0
  123. data/docs/source/stylesheets/_vendor/pygments/solarized.scss +65 -0
  124. data/docs/source/stylesheets/grid-types.css.scss +6 -0
  125. data/docs/source/stylesheets/magic.css.scss +6 -0
  126. data/docs/source/stylesheets/site.css.scss +27 -0
  127. data/lib/susy.rb +12 -1
  128. data/sass/README.md +33 -0
  129. data/sass/_susy.scss +55 -16
  130. data/sass/susy/_api.scss +39 -0
  131. data/sass/susy/_grids.scss +2 -0
  132. data/sass/susy/_gutters.scss +2 -0
  133. data/sass/susy/_helpers.scss +14 -0
  134. data/sass/susy/_language.scss +3 -0
  135. data/sass/susy/_math.scss +3 -0
  136. data/sass/susy/api/_float.scss +72 -0
  137. data/sass/susy/api/_isolation.scss +16 -0
  138. data/sass/susy/grids/_add.scss +10 -0
  139. data/sass/susy/grids/_find.scss +10 -0
  140. data/sass/susy/gutters/_add.scss +10 -0
  141. data/sass/susy/gutters/_find.scss +10 -0
  142. data/sass/susy/helpers/_background-grid.scss +65 -0
  143. data/sass/susy/helpers/_box-sizing.scss +25 -0
  144. data/sass/susy/helpers/_clearfix.scss +51 -0
  145. data/sass/susy/helpers/_columns.scss +15 -0
  146. data/sass/susy/helpers/_find.scss +63 -0
  147. data/sass/susy/helpers/_sass-lists.scss +71 -0
  148. data/sass/susy/helpers/_span-shared.scss +9 -0
  149. data/sass/susy/language/_parse-add.scss +19 -0
  150. data/sass/susy/language/_parse-list.scss +53 -0
  151. data/sass/susy/language/_span.scss +20 -0
  152. data/sass/susy/math/_columns.scss +70 -0
  153. data/sass/susy/math/_context.scss +3 -0
  154. data/sass/susy/math/_gutters.scss +11 -0
  155. data/templates/box-sizing/behaviors/box-sizing/boxsizing.htc +399 -0
  156. data/templates/box-sizing/behaviors/box-sizing/boxsizing.php +23 -0
  157. data/templates/box-sizing/manifest.rb +4 -0
  158. data/templates/project/README.md +59 -0
  159. data/templates/project/_base.scss +0 -10
  160. data/templates/project/behaviors/box-sizing/boxsizing.htc +399 -0
  161. data/templates/project/behaviors/box-sizing/boxsizing.php +23 -0
  162. data/templates/project/manifest.rb +3 -0
  163. data/templates/project/screen.scss +0 -8
  164. metadata +200 -43
  165. data/Manifest +0 -39
  166. data/Rakefile +0 -19
  167. data/VERSION +0 -1
  168. data/sass/susy/_background.scss +0 -18
  169. data/sass/susy/_functions.scss +0 -376
  170. data/sass/susy/_grid.scss +0 -286
  171. data/sass/susy/_isolation.scss +0 -51
  172. data/sass/susy/_margin.scss +0 -93
  173. data/sass/susy/_media.scss +0 -112
  174. data/sass/susy/_padding.scss +0 -92
  175. data/sass/susy/_settings.scss +0 -56
  176. data/sass/susy/_support.scss +0 -198
  177. data/sass/susy/_units.scss +0 -159
  178. data/susy.gemspec +0 -35
  179. data/test/config.rb +0 -10
  180. data/test/css/background.css +0 -16
  181. data/test/css/bleed.css +0 -20
  182. data/test/css/functions.css +0 -7
  183. data/test/css/grid.css +0 -134
  184. data/test/css/isolation.css +0 -46
  185. data/test/css/margin.css +0 -20
  186. data/test/css/media.css +0 -101
  187. data/test/css/padding.css +0 -12
  188. data/test/scss/background.scss +0 -11
  189. data/test/scss/bleed.scss +0 -19
  190. data/test/scss/functions.scss +0 -15
  191. data/test/scss/grid.scss +0 -77
  192. data/test/scss/isolation.scss +0 -19
  193. data/test/scss/margin.scss +0 -27
  194. data/test/scss/media.scss +0 -50
  195. data/test/scss/padding.scss +0 -19
@@ -0,0 +1,19 @@
1
+ module GuideHelpers
2
+ def page_title
3
+ title = "Susy: "
4
+ if data.page.title
5
+ title << data.page.title
6
+ else
7
+ title << "Responsive grids for Compass"
8
+ end
9
+ title
10
+ end
11
+
12
+ def page_side_content
13
+ side_content = false
14
+ if data.page.side_content
15
+ side_content = data.page.side_content
16
+ end
17
+ side_content
18
+ end
19
+ end
@@ -0,0 +1,263 @@
1
+ ---
2
+ title: Grid Types
3
+ stylesheet: "grid-types.css"
4
+ pagenav: >
5
+ <ul>
6
+ <li><a href="#demo-magic">Magic</a></li>
7
+ <li><a href="#demo-fluid">Fluid</a></li>
8
+ <li><a href="#demo-static">Static</a></li>
9
+ <li><a href="#demo-mix">Mixing <span class="amp">&</span> Matching</a></li>
10
+ </ul>
11
+ ---
12
+
13
+ ## Different Grid Types
14
+
15
+ You can build grids of all kinds with Susy.
16
+ Define you grid using any unit of measurement
17
+ (ems, pixels, percentages, inches, etc.)
18
+ and then determine how and when
19
+ you want that grid responding to the viewport.
20
+
21
+ Susy converts all internal grid-widths into percentages,
22
+ so that once you have a grid
23
+ it is **able** to respond and flex in any way you choose.
24
+ How the grid responds depends on the outer container.
25
+
26
+ Here are a few examples
27
+ of grids with different container styles.
28
+
29
+ ### <a href="#demo-magic" id="demo-magic">The Magic Grid</a>
30
+
31
+ The default grid in Susy is what I call "the magic grid".
32
+ Fluid on the inside,
33
+ with an elastic container max-width.
34
+ The em-width makes it responsive to font sizes,
35
+ while the max-width setting makes it responsive to window sizes.
36
+
37
+ :::scss
38
+ // Setting up the Magic Grid
39
+ $total-columns: 12; // 12 columns
40
+ $column-width: 4em; // columns are 4em wide
41
+ $gutter-width: 1em; // with 1em gutters
42
+ $grid-padding: 1em; // and 1em padding on the grid container
43
+
44
+ .magic-container { @include container; }
45
+
46
+ <aside class="magic-container">
47
+ <h4>Magic grid: <b>.magic-container</b></h4>
48
+ <p>
49
+ 12 columns,
50
+ 4em width,
51
+ 1em gutters,
52
+ 1em padding.
53
+ Magic.
54
+ </p>
55
+ </aside>
56
+
57
+ What we've defined is a simple elastic grid,
58
+ but by default the outer container width
59
+ will be set as a max-width,
60
+ making this a magic grid.
61
+
62
+ You can also have px-based magic grids,
63
+ and so on,
64
+ though I find them somewhat less magical.
65
+ What make it a magic grid
66
+ is the fact that it collapses with the browser at smaller sizes,
67
+ but remains set-width at larger sizes.
68
+
69
+ There is a more complete
70
+ [mobile-first magic grid demo](/demos/magic/)
71
+ if you are interested.
72
+
73
+ ### <a href="#demo-fluid" id="demo-fluid">The Fluid Grid</a>
74
+
75
+ There are many ways to build a fluid grid with Susy.
76
+ You could simply replace all the em-widths above
77
+ with percentage widths.
78
+ But that's actually the hard way,
79
+ unless you know exactly what percentages you want to use.
80
+ Let me show you some easier options.
81
+
82
+ Say you want to build a fluid grid
83
+ based on the [960gs](http://960.gs/) dimensions:
84
+
85
+ :::scss
86
+ // A Fluid Grid based on 960gs
87
+ $total-columns: 12;
88
+ $column-width: 60px;
89
+ $gutter-width: 20px;
90
+ $grid-padding: 10px;
91
+
92
+ That's a good start.
93
+ We now have a 960px magic grid.
94
+ Turning that into a fluid grid is simple:
95
+
96
+ :::scss
97
+ // Make it fluid!
98
+ $container-style: fluid;
99
+
100
+ .fluid-container { @include container; }
101
+
102
+ <aside class="fluid-container">
103
+ <h4>Fluid grid #1: <b>.fluid-container</b></h4>
104
+ <p>
105
+ 12 columns,
106
+ 60px initial width,
107
+ 20px initial gutters,
108
+ 10px initial padding.
109
+ Fluid.
110
+ </p>
111
+ </aside>
112
+
113
+ That's it.
114
+ You have a fluid grid
115
+ based on the dimensions of the 960gs.
116
+ By default the container is set to 100% width,
117
+ but you can override that as well:
118
+
119
+ :::scss
120
+ // Make it smaller
121
+ $container-width: 60%;
122
+
123
+ .fluid-60-container { @include container; }
124
+
125
+ <aside class="fluid-60-container">
126
+ <h4>Fluid grid #2: <b>.fluid-60-container</b></h4>
127
+ <p>Same as above, but contained at 60%.</p>
128
+ </aside>
129
+
130
+ ### <a href="#demo-static" id="demo-static">The Static Grid</a>
131
+
132
+ Perhaps you don't want your grid to respond
133
+ to the size of the viewport at all.
134
+ By telling Susy you want a "static" grid,
135
+ Susy will apply your container-width
136
+ directly to the "width" property.
137
+
138
+ This is your more standard grid type.
139
+ Most "elastic" and "fixed" grids fit this category.
140
+ Unlike the magic grid, it doesn't collapse.
141
+
142
+ Let's take our first grid and make it static:
143
+
144
+ :::scss
145
+ // Setting up the Static Grid
146
+ $total-columns: 12;
147
+ $column-width: 4em;
148
+ $gutter-width: 1em;
149
+ $grid-padding: 1em;
150
+
151
+ $container-style: static;
152
+
153
+ .static-container { @include container; }
154
+
155
+ <aside class="static-container">
156
+ <h4>Static elastic grid: <b>.static-container</b></h4>
157
+ <p>
158
+ 12 columns,
159
+ 4em width,
160
+ 1em gutters,
161
+ 1em padding.
162
+ Static.
163
+ </p>
164
+ </aside>
165
+
166
+ ### <a href="#demo-mix" id="demo-mix">Mixing and matching</a>
167
+
168
+ Using those same 4 basic settings,
169
+ and the two advanced override settings,
170
+ you can create nearly any grid without doing any math.
171
+
172
+ Want the 960 grid system
173
+ updated to 1140px?
174
+
175
+ :::scss
176
+ // The 960gs in 1140px
177
+ $total-columns: 12;
178
+ $column-width: 60px;
179
+ $gutter-width: 20px;
180
+ $grid-padding: 10px;
181
+
182
+ $container-style: static;
183
+ $container-width: 1140px;
184
+
185
+ .larger-960-container { @include container; }
186
+
187
+ <aside class="larger-960-container">
188
+ <h4>Larger 960-based grid: <b>.larger-960-container</b></h4>
189
+ <p>
190
+ 12 columns,
191
+ 60px width,
192
+ 20px gutters,
193
+ 10px padding.
194
+ Static,
195
+ 1140px total width.
196
+ </p>
197
+ </aside>
198
+
199
+ Why not make it elastic and magic?
200
+
201
+ :::scss
202
+ // The 960gs in ems
203
+ $total-columns: 12;
204
+ $column-width: 60px;
205
+ $gutter-width: 20px;
206
+ $grid-padding: 10px;
207
+
208
+ $container-style: magic;
209
+ $container-width: 60em;
210
+
211
+ .elastic-960-container { @include container; }
212
+
213
+ <aside class="elastic-960-container">
214
+ <h4>Elastic 960 grid: <b>.elastic-960-container</b></h4>
215
+ <p>
216
+ 12 columns,
217
+ 60px width,
218
+ 20px gutters,
219
+ 10px padding.
220
+ Magic elastic,
221
+ 60em total width.
222
+ </p>
223
+ </aside>
224
+
225
+ Or we can make a magic-elastic grid,
226
+ defined in percentages:
227
+
228
+ :::scss
229
+ // Elastic grid as percentages
230
+ $total-columns: 12;
231
+ $column-width: 6%;
232
+ $gutter-width: 2%;
233
+ $grid-padding: 1%;
234
+
235
+ $container-style: magic;
236
+ $container-width: 50em;
237
+
238
+ .elastic-percentage-container { @include container; }
239
+
240
+ <aside class="elastic-percentage-container">
241
+ <h4>Elastic magic grid, defined as percentages: <b>.elastic-percentage-container</b></h4>
242
+ <p>
243
+ 12 columns,
244
+ 6% width,
245
+ 2% gutters,
246
+ 1% padding.
247
+ Magic elastic,
248
+ 50em total width.
249
+ </p>
250
+ </aside>
251
+
252
+ Play around.
253
+ Start to add breakpoints,
254
+ with different grids at different sizes,
255
+ or just pick the grid best suited for your site:
256
+ magic-elastic,
257
+ magic-fixed,
258
+ static-elastic,
259
+ static-fixed,
260
+ fluid,
261
+ defined as one but displayed as another...
262
+ The possibilities are endless.
263
+ Have fun!
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: Demos
3
+ ---
4
+
5
+ ## Demos
6
+
7
+ - [Different grid types](grid-types)
8
+ - [Mobile-first "magic" grids](magic)
9
+
10
+ ### Elsewhere
11
+
12
+ - [Off-Canvas layout with Susy][off-canvas]
13
+ - [Nettuts: Responsive Grids With Susy][nettuts]
14
+
15
+ [nettuts]: http://net.tutsplus.com/tutorials/html-css-techniques/responsive-grids-with-susy/
16
+ [off-canvas]: http://oddbird.net/2012/11/27/susy-off-canvas/
17
+
18
+ Have a tutorial you'd like to see?
19
+ [Contact us][twitter],
20
+ or [write it yourself][github].
21
+
22
+ [twitter]: http://twitter.com/compasssusy
23
+ [github]: https://github.com/ericam/susy/tree/master/docs/source/demos
@@ -0,0 +1,320 @@
1
+ ---
2
+ title: Demos
3
+ stylesheet: "magic.css"
4
+ aside: >
5
+ <h3>In this demo:</h3>
6
+ <p>
7
+ Build a mobile-first layout
8
+ with a combination fluid/elastic grid,
9
+ responding smoothly to font and browser sizes,
10
+ without doing any math.
11
+ </p>
12
+ pagenav: >
13
+ <h3>Skip to:</h3>
14
+ <ul>
15
+ <li><a href="#demo-settings">Basic Settings</a></li>
16
+ <li><a href="#demo-mobile">Mobile Layout</a></li>
17
+ <li><a href="#demo-breakpoints">Breakpoints</a></li>
18
+ <li><a href="#demo-screen">Large-Screens</a></li>
19
+ <li><a href="#demo-complete">Complete Layout</a></li>
20
+ </ul>
21
+ ---
22
+
23
+ ## Mobile-First Magic Grids
24
+
25
+ All Susy sites are fluid on the inside,
26
+ but my favorite of the Susy options is
27
+ what I call the Magic Grid.
28
+ Fluid on the inside and elastic on the outside,
29
+ the magic grid responds to both font and window size
30
+ while keeping you in control of typographic line lengths.
31
+
32
+ This demo will lay out the steps
33
+ for building its own mobile-first layout
34
+ based on Susy's default Magic Grid.
35
+
36
+ ### <a href="#demo-settings" id="demo-settings">Basic Settings</a>
37
+
38
+ We'll start by defining
39
+ our mobile-first grid.
40
+ We'll keep the default grid sizes,
41
+ and just change the number of columns used:
42
+
43
+ :::scss
44
+ $total-columns : 7;
45
+ $column-width : 4em;
46
+ $gutter-width : 1em;
47
+ $grid-padding : $gutter-width;
48
+
49
+ In this case I decided that 7 columns
50
+ was a good line-length for the main content.
51
+ While that's larger than most mobile devices,
52
+ the site will flex to fit them as well.
53
+
54
+ We've set `$column-width: 4em`,
55
+ but Susy doesn't apply that directly.
56
+ That will be used to determine the outer container width
57
+ (using `max-width` unless [otherwise instructed][overrides]),
58
+ and then to figure out percentages internally.
59
+
60
+ Think of these settings as a max-width
61
+ for your initial layout.
62
+
63
+ [overrides]: http://susy.oddbird.net/guides/reference/#ref-container-override
64
+
65
+ ### <a href="#demo-mobile" id="demo-mobile">Mobile Layout</a>
66
+
67
+ The first step in applying our Susy grid is to
68
+ define our [container][container]:
69
+
70
+ :::scss
71
+ .page { @include container; }
72
+
73
+ I wrote the source order in a way
74
+ that makes sense to me
75
+ even when the sidebars move inline with the main content.
76
+
77
+ :::yaml
78
+ - .page
79
+ - .banner
80
+ - .pagenav
81
+ - .main
82
+ - .summary
83
+ - .content
84
+ - .contentinfo
85
+
86
+ We're going to keep the mobile layout simple and linear,
87
+ but I want the footer to have a red background
88
+ that encompasses the [grid-padding][grid-padding].
89
+ In order to do that,
90
+ I apply negative margins equal to `$grid-padding`,
91
+ and add it back in as padding to the footer:
92
+
93
+ :::scss
94
+ .contentinfo {
95
+ margin: 0 0 - $grid-padding;
96
+ padding: 0 $grid-padding;
97
+ }
98
+
99
+ Add in some style and typography,
100
+ and we're done with the mobile layout.
101
+
102
+ [container]: http://susy.oddbird.net/guides/reference/#ref-container
103
+ [grid-padding]: http://susy.oddbird.net/guides/reference/#ref-grid-padding
104
+
105
+ ### <a href="#demo-breakpoints" id="demo-breakpoints">Breakpoints</a>
106
+
107
+ I'm only adding one layout [breakpoint][breakpoint] to this page,
108
+ although you can add as many as you want.
109
+
110
+ As soon as there is enough room for 12 columns,
111
+ we'll jump to a 12-column grid,
112
+ and bring our two sidebars into play.
113
+
114
+ Let's set that breakpoint as a variable,
115
+ since we'll need it several times:
116
+
117
+ :::scss
118
+ $break: 12;
119
+
120
+ We could get more complex,
121
+ switching to 12 columns at an arbitrary min-width (`$break: 40em 12`),
122
+ or adding a fallback class for older versions of IE (`$break: 12 lt-ie9`),
123
+ but I don't think we need either one in this case.
124
+
125
+ Let's update the container
126
+ to respond to our new breakpoint:
127
+
128
+ :::scss
129
+ .page {
130
+ @include container($total-columns, $break);
131
+ }
132
+
133
+ We're using the shortcut here,
134
+ setting multiple containers in a single command.
135
+ The first argument uses the default layout (`$total-columns`)
136
+ which doesn't trigger any media-queries,
137
+ the second uses our 12-column breakpoint.
138
+ This serves the same function as the longhand
139
+ using [at-breakpoint][at-breakpoint]:
140
+
141
+ :::scss
142
+ .page {
143
+ @include container;
144
+ @include at-breakpoint($break) {
145
+ @include container;
146
+ }
147
+ }
148
+
149
+ However, the shorthand also performs some optimizations for us,
150
+ using `set-container-width` instead of `container` inside the breakpoint.
151
+ Since we know the other container settings are already in place,
152
+ all we need to override is the container's width.
153
+ you can also do that longhand too, if you like:
154
+
155
+ :::scss
156
+ .page {
157
+ @include container;
158
+ @include at-breakpoint($break) {
159
+ @include set-container-width;
160
+ }
161
+ }
162
+
163
+ The longhand can be useful
164
+ if you have other operations to perform inside the breakpoint.
165
+ In our case, we can move on to laying out our 12-column grid.
166
+
167
+ [breakpoint]: http://susy.oddbird.net/guides/reference/#ref-media-layouts
168
+ [at-breakpoint]: http://susy.oddbird.net/guides/reference/#ref-at-breakpoint
169
+
170
+ ### <a href="#demo-screen" id="demo-screen">Large-Screen Layout</a>
171
+
172
+ Let's start with the banner.
173
+ It should span the full width,
174
+ but have 2 of 12 columns [prefixed][prefix] as padding on the left.
175
+
176
+ Since the banner didn't have any layout styles
177
+ in our mobile layout,
178
+ we can place the entire selector block
179
+ inside a breakpoint:
180
+
181
+ :::scss
182
+ @include at-breakpoint($break) {
183
+ .banner { @include prefix(2,$break); }
184
+ }
185
+
186
+ Notice that I'm using `$break` as the `context` argument.
187
+ That way if I decide to change it,
188
+ I won't have to worry about updating all the contexts.
189
+
190
+ Next comes the pagenav,
191
+ which we want to set as a sidebar
192
+ [spanning][span-columns] 2 of the available 12 columns.
193
+ We can add that to the same breakpoint block
194
+ we already created.
195
+
196
+ :::scss
197
+ @include at-breakpoint($break) {
198
+ .banner { @include prefix(2,$break); }
199
+ .pagenav { @include span-columns(2,$break); }
200
+ }
201
+
202
+ The main content will fill the remaining space,
203
+ spanning 10 of 12 columns,
204
+ including the final right-most "[omega][omega]" column.
205
+ Adding that to what we have:
206
+
207
+ :::scss
208
+ @include at-breakpoint($break) {
209
+ .banner { @include prefix(2,$break); }
210
+ .pagenav { @include span-columns(2,$break); }
211
+ .main { @include span-columns(10 omega, $break); }
212
+ }
213
+
214
+ Inside the main content
215
+ we have a summary (which becomes a second sidebar),
216
+ and content that occupies the main area.
217
+ The content spans 7 of the main 10,
218
+ while the summary spans the remaining 3 (omega) of 10:
219
+
220
+ :::scss
221
+ @include at-breakpoint($break) {
222
+ .banner { @include prefix(2,$break); }
223
+ .pagenav { @include span-columns(2,$break); }
224
+ .main {
225
+ $main-columns: 10;
226
+ @include span-columns($main-columns omega, $break);
227
+ .content { @include span-columns(7,$main-columns) }
228
+ .summary { @include span-columns(3 omega, $main-columns) }
229
+ }
230
+ }
231
+
232
+ (Again, notice I'm using `$main-columns` for defining columns and contexts.)
233
+
234
+ That works, even though the summary comes first in our source.
235
+ Applying `omega` to an element
236
+ automatically pushes it to the end.
237
+
238
+ All we have left is the footer.
239
+ With 12 columns available now,
240
+ we can replace the grid-padding trick
241
+ with a few columns of padding on either side.
242
+ Let's create a new breakpoint block for that
243
+ inside the footer block we already have.
244
+ We also need to clear the floated content above,
245
+ which is easy enough with plain CSS:
246
+
247
+ :::scss
248
+ .contentinfo {
249
+ margin: 0 0 - $grid-padding;
250
+ padding: 0 $grid-padding;
251
+ @include at-breakpoint($break) {
252
+ clear: both;
253
+ margin: 0;
254
+ @include pad(2,3,$break);
255
+ }
256
+ }
257
+
258
+ And we're done. The rest is [stylish icing][styles].
259
+
260
+ [prefix]: http://susy.oddbird.net/guides/reference/#ref-prefix
261
+ [span-columns]: http://susy.oddbird.net/guides/reference/#ref-span-columns
262
+ [omega]: http://susy.oddbird.net/guides/reference/#ref-omega
263
+ [styles]: https://github.com/ericam/susy/blob/master/docs/source/stylesheets/_demos/magic/_style.scss
264
+
265
+ ### <a href="#demo-complete" id="demo-complete">Complete Layout Styles</a>
266
+
267
+ In the end,
268
+ we have an entirely responsive layout
269
+ defined in just a few simple and meaningful lines,
270
+ without doing any math at all:
271
+
272
+ :::scss
273
+ // Settings
274
+
275
+ $total-columns : 7;
276
+ $column-width : 4em;
277
+ $gutter-width : 1em;
278
+ $grid-padding : $gutter-width;
279
+
280
+ $break : 12;
281
+
282
+ // Container
283
+
284
+ .page {
285
+ @include container($total-columns, $break);
286
+ }
287
+
288
+ // Layout
289
+
290
+ @include at-breakpoint($break) {
291
+ .banner { @include prefix(2,$break); }
292
+ .pagenav { @include span-columns(2,$break); }
293
+ .main {
294
+ $main-columns: 10;
295
+ @include span-columns($main-columns omega, $break);
296
+ .content { @include span-columns(7,$main-columns) }
297
+ .summary { @include span-columns(3 omega, $main-columns) }
298
+ }
299
+ }
300
+
301
+ .contentinfo {
302
+ clear: both;
303
+ margin: 0 0 - $grid-padding;
304
+ padding: 0 $grid-padding;
305
+ @include at-breakpoint($break) {
306
+ margin: 0;
307
+ @include pad(2,3,$break);
308
+ }
309
+ }
310
+
311
+ **Note**:
312
+ Due to a known Sass bug,
313
+ if you are using an IE fallback class,
314
+ you can not apply `at-breakpoint` at the document root.
315
+ This should be fixed soon.
316
+ In the meantime,
317
+ breakpoints with fallback classes must be nested
318
+ inside another selector.
319
+ We're not using the fallback,
320
+ so we're ok.