susy 1.0.9 → 2.0.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.