UNPKG

12 kBSCSSView Raw
1// Foundation for Sites by ZURB
2// foundation.zurb.com
3// Licensed under MIT Open Source
4
5////
6/// @group xy-grid
7////
8
9// Margin Grid classes
10@mixin xy-base-grid-classes {
11
12 // Grid Container
13 .grid-container {
14 @include xy-grid-container;
15
16 &.fluid {
17 @include xy-grid-container(100%);
18 }
19
20 &.full {
21 @include xy-grid-container(100%, 0);
22 }
23 }
24
25 // Base grid styles
26 .grid-x {
27 @include xy-grid;
28 }
29
30 .cell {
31 @include xy-cell-base();
32 @include xy-cell-static($grid-columns, false, $gutter-type: padding);
33
34 &.auto {
35 @include xy-cell-base(auto);
36 }
37
38 &.shrink {
39 @include xy-cell-base(shrink);
40 }
41
42 }
43 .grid-x {
44 > .auto {
45 @include xy-cell-static(auto, false);
46 }
47
48 > .shrink {
49 @include xy-cell-static(shrink, false);
50 }
51 }
52
53 // Auto width
54 @include -zf-each-breakpoint() {
55 // This is a bit of a hack/workaround, see these issues & PRs for the backstory:
56 // https://github.com/zurb/foundation-sites/issues/10244
57 // https://github.com/zurb/foundation-sites/pull/10222 and
58 // https://github.com/zurb/foundation-sites/pull/10164
59 .grid-x {
60 $str: "> .#{$-zf-size}-shrink, > .#{$-zf-size}-full";
61 @for $i from 1 through $grid-columns {
62 $str: $str + ", > .#{$-zf-size}-#{$i}"
63 }
64 #{$str} {
65 flex-basis: auto;
66 }
67 }
68 }
69
70 @include -zf-each-breakpoint() {
71 @if not($-zf-size == small) {
72 .grid-x > .#{$-zf-size}-auto {
73 @include xy-cell-base(auto);
74 @include xy-cell-static(auto, false);
75 }
76
77 .grid-x > .#{$-zf-size}-shrink {
78 @include xy-cell-base(shrink);
79 @include xy-cell-static(shrink, false);
80 }
81 }
82
83 @for $i from 1 through $grid-columns {
84 // Sizing (percentage)
85 .grid-x > .#{$-zf-size}-#{$i} {
86 @include xy-cell-static($i, false, $gutter-type: padding);
87 }
88 }
89 }
90
91 // Reset width when using `.grid-margin-x` not on `.grid-x`
92 .grid-margin-x:not(.grid-x) > .cell {
93 width: auto;
94 }
95
96 // Reset height when using `.grid-margin-y` not on `.grid-y`
97 .grid-margin-y:not(.grid-y) > .cell {
98 height: auto;
99 }
100}
101
102@mixin -xy-breakpoint-cell-classes($class-breakpoint, $gutter-breakpoint, $vertical) {
103 $prefix: if($class-breakpoint == $-zf-zero-breakpoint, '', '#{$class-breakpoint}-');
104 > .#{$prefix}auto {
105 @include xy-cell-static(auto, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
106 }
107
108 > .#{$prefix}shrink {
109 @include xy-cell-static(shrink, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
110 }
111
112 @for $i from 1 through $grid-columns {
113 // Sizing (percentage)
114 $classname: if($vertical, '.#{$class-breakpoint}-#{$i}', '.#{$class-breakpoint}-#{$i}');
115
116 > #{$classname} {
117 @include xy-cell-static($i, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
118 }
119 }
120}
121
122// Margin Grid classes
123@mixin xy-margin-grid-classes(
124 $gutter-position: left right,
125 $vertical: false,
126 $wrapping-selector: '.grid-margin-x'
127){
128 #{$wrapping-selector} {
129 @include xy-gutters($negative: true, $gutter-position: $gutter-position);
130
131 // Base cell styles
132 > .cell {
133 @include xy-cell-static($vertical: $vertical);
134 }
135
136 // base styles need to all be before the auto and shrink styles
137 @include -zf-each-breakpoint() {
138 @if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size) and $-zf-size != $-zf-zero-breakpoint) {
139 > .cell {
140 @include xy-cell-static($breakpoint: $-zf-size, $vertical: $vertical);
141 }
142 }
143 }
144
145 @include -zf-each-breakpoint() {
146
147 // This is purely for responsive gutters - the margin grid has to go back and adjust widths (or heights)
148 // for prior breakpoints based on the responsive gutter.
149 @if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size)) {
150 @each $bp in -zf-breakpoints-less-than($-zf-size) {
151 @if(map-has-key($grid-margin-gutters, $bp)) {
152 @include -xy-breakpoint-cell-classes($bp, $-zf-size, $vertical);
153 }
154 }
155 }
156
157 @include -xy-breakpoint-cell-classes($-zf-size, $-zf-size, $vertical);
158 }
159 }
160}
161
162// Padding Grid classes
163@mixin xy-padding-grid-classes {
164 .grid-padding-x {
165
166 // Negative margin for nested grids
167 .grid-padding-x {
168 @include xy-gutters($negative: true);
169 }
170
171 // Negative margin for grids within `grid-container/grid-container.fluid`
172 // This allows margin and padding grids to line up with eachother
173 .grid-container:not(.full) > & {
174 @include xy-gutters($negative: true);
175 }
176
177 // Base cell styles
178 > .cell {
179 @include xy-gutters($gutters: $grid-padding-gutters, $gutter-type: padding);
180 }
181 }
182}
183
184// Block Grid classes
185@mixin xy-block-grid-classes($margin-grid: true, $padding-grid: true) {
186 @if $padding-grid {
187 @include -zf-each-breakpoint {
188 @for $i from 1 through $xy-block-grid-max {
189 .#{$-zf-size}-up-#{$i} {
190 @include xy-grid-layout($i, '.cell', false, $gutter-type: padding);
191 }
192 }
193 }
194 }
195
196 @if $margin-grid {
197 @include -zf-each-breakpoint {
198 @for $i from 1 through $xy-block-grid-max {
199 // This is purely for responsive gutters - the margin grid has to go back and adjust widths (or heights)
200 // for prior breakpoints based on the responsive gutter.
201 @if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size)) {
202 @each $bp in -zf-breakpoints-less-than($-zf-size) {
203 @if(map-has-key($grid-margin-gutters, $bp)) {
204 .grid-margin-x.#{$bp}-up-#{$i} {
205 @include xy-grid-layout($i, '.cell', false, $gutter-type: margin, $breakpoint: $bp);
206 }
207 }
208 }
209 }
210 }
211 @for $i from 1 through $xy-block-grid-max {
212 .grid-margin-x.#{$-zf-size}-up-#{$i} {
213 @include xy-grid-layout($i, '.cell', false, $gutter-type: margin, $breakpoint: $-zf-size);
214 }
215 }
216 }
217 }
218}
219
220// Collapse classes
221@mixin xy-collapse-grid-classes($margin-grid: true, $padding-grid: true) {
222 @each $bp in $breakpoint-classes {
223 @if $margin-grid {
224 .#{$bp}-margin-collapse {
225 @include xy-grid-collapse($gutter-type: margin, $min-breakpoint: $bp);
226 }
227 }
228
229 @if $padding-grid {
230 .#{$bp}-padding-collapse {
231 @include xy-grid-collapse($gutter-type: padding, $min-breakpoint: $bp);
232 }
233 }
234 }
235}
236
237// Offset classes
238@mixin xy-offset-cell-classes {
239 @include -zf-each-breakpoint {
240 @for $i from 1 through $grid-columns {
241 // Offsets
242 $o: $i - 1;
243
244 .#{$-zf-size}-offset-#{$o} {
245 @include xy-cell-offset($o, $gutters: $grid-padding-gutters, $gutter-type: padding, $breakpoint: $-zf-size);
246 }
247
248 .grid-margin-x > .#{$-zf-size}-offset-#{$o} {
249 @include xy-cell-offset($o, $breakpoint: $-zf-size);
250 }
251 }
252 }
253}
254
255// Vertical Grid classes
256@mixin xy-vertical-grid-classes(
257 $margin-grid: true,
258 $padding-grid: true
259) {
260
261 @include -zf-each-breakpoint() {
262 @if not($-zf-size == small) {
263 }
264 }
265
266 .grid-y {
267 @include xy-grid(vertical, false);
268
269
270 > .cell {
271 @include xy-cell-reset();
272 }
273
274 > .auto {
275 @include xy-cell-static(auto, false, $breakpoint: $-zf-size, $vertical: true);
276 }
277
278 > .shrink {
279 @include xy-cell-static(shrink, false, $breakpoint: $-zf-size, $vertical: true);
280 }
281
282
283 @include -zf-each-breakpoint() {
284 // This is a bit of a hack/workaround, see these issues and PRs for the backstory:
285 // https://github.com/zurb/foundation-sites/issues/10244
286 // https://github.com/zurb/foundation-sites/pull/10222 and
287 // https://github.com/zurb/foundation-sites/pull/10164
288 $str: "> .#{$-zf-size}-shrink, > .#{$-zf-size}-full";
289 @for $i from 1 through $grid-columns {
290 $str: $str + ", > .#{$-zf-size}-#{$i}"
291 }
292 #{$str} {
293 flex-basis: auto;
294 }
295 }
296
297 @include -zf-each-breakpoint() {
298 @if not($-zf-size == small) {
299 > .#{$-zf-size}-auto {
300 @include xy-cell-base(auto);
301 @include xy-cell-static(auto, false, $breakpoint: $-zf-size, $vertical: true);
302 }
303
304 > .#{$-zf-size}-shrink {
305 @include xy-cell-static(shrink, false, $breakpoint: $-zf-size, $vertical: true);
306 }
307
308 }
309
310 @for $i from 1 through $grid-columns {
311 // Sizing (percentage)
312 > .#{$-zf-size}-#{$i} {
313 @include xy-cell-static($i, false, $vertical: true, $gutter-type: padding);
314 }
315 }
316
317 }
318 }
319
320 @if $padding-grid {
321 .grid-padding-y {
322 // Negative margin for nested grids
323 .grid-padding-y {
324 @include xy-gutters($negative: true, $gutter-position: top bottom);
325 }
326
327 // Base cell styles
328 > .cell {
329 @include xy-gutters($gutters: $grid-padding-gutters, $gutter-type: padding, $gutter-position: top bottom);
330 }
331 }
332 }
333
334 @if $margin-grid {
335 @include xy-margin-grid-classes(top bottom, true, '.grid-margin-y')
336 }
337
338}
339
340@mixin xy-frame-grid-classes($vertical-grid: true, $margin-grid: true) {
341 // Framed grid styles
342 .grid-frame {
343 @include xy-grid-frame;
344 }
345
346 .cell .grid-frame {
347 width: 100%; // Same as include with $nested, but with less css
348 }
349
350 .cell-block {
351 @include xy-cell-block();
352 }
353
354 .cell-block-y {
355 @include xy-cell-block(true);
356 }
357
358
359 .cell-block-container {
360 @include xy-cell-block-container();
361 }
362
363
364 @include -zf-each-breakpoint(false) {
365
366 .#{$-zf-size}-grid-frame {
367 @include xy-grid-frame;
368 }
369
370 .cell .#{$-zf-size}-grid-frame {
371 width: 100%; // Same as include with $nested, but with less css
372 }
373
374 .#{$-zf-size}-cell-block {
375 @include xy-cell-block();
376 }
377
378 .#{$-zf-size}-cell-block-container {
379 @include xy-cell-block-container();
380 }
381
382 .#{$-zf-size}-cell-block-y {
383 @include xy-cell-block(true);
384 }
385 }
386
387 @if $vertical-grid {
388 .grid-y {
389 &.grid-frame {
390 width: auto;
391 @include xy-grid-frame(true);
392 }
393
394 @include -zf-each-breakpoint(false) {
395 &.#{$-zf-size}-grid-frame {
396 width: auto;
397 @include xy-grid-frame(true);
398 }
399
400 }
401 }
402 .cell {
403 .grid-y.grid-frame {
404 height: 100%; // Same as include with $nested, but with less css
405 }
406 @include -zf-each-breakpoint(false) {
407 .grid-y.#{$-zf-size}-grid-frame {
408 height: 100%; // Same as include with $nested, but with less css
409 }
410 }
411 }
412 }
413 @if $margin-grid {
414 @include xy-margin-grid-classes(top bottom, true, '.grid-margin-y')
415 .grid-frame.grid-margin-y {
416 @include xy-grid-frame(true, false, $grid-margin-gutters, $include-base: false)
417 }
418 @include -zf-each-breakpoint(false) {
419 .grid-margin-y.#{$-zf-size}-grid-frame {
420 @include xy-grid-frame(true, false, $grid-margin-gutters, $-zf-size, false)
421 }
422 }
423 }
424}
425
426// Final classes
427@mixin foundation-xy-grid-classes(
428 $base-grid: true,
429 $margin-grid: true,
430 $padding-grid: true,
431 $block-grid: true,
432 $collapse: true,
433 $offset: true,
434 $vertical-grid: true,
435 $frame-grid: true
436) {
437
438 // Base grid styles
439 @if($base-grid) {
440 @include xy-base-grid-classes();
441 }
442
443 // Margin grid
444 @if($margin-grid) {
445 @include xy-margin-grid-classes();
446 }
447
448 // Padding grid
449 @if($padding-grid) {
450 @include xy-padding-grid-classes();
451 }
452
453 // Block grid
454 @if($block-grid) {
455 @include xy-block-grid-classes($margin-grid, $padding-grid);
456 }
457
458 // Collapse gutters
459 @if($collapse) {
460 @include xy-collapse-grid-classes($margin-grid, $padding-grid);
461 }
462
463 // Offset gutters
464 @if($offset) {
465 @include xy-offset-cell-classes();
466 }
467
468 // Vertical grid
469 @if($vertical-grid) {
470 @include xy-vertical-grid-classes($margin-grid, $padding-grid);
471 }
472
473 @if ($frame-grid) {
474 @include xy-frame-grid-classes($vertical-grid, $margin-grid)
475 }
476}