UNPKG

12.7 kBSCSSView Raw
1// Name: Grid
2// Description: Component to create responsive, fluid and nestable grids
3//
4// Component: `uk-grid`
5//
6// Modifiers: `uk-grid-small`
7// `uk-grid-medium`
8// `uk-grid-large`
9// `uk-grid-collapse`
10// `uk-grid-divider`
11// `uk-grid-match`
12// `uk-grid-stack`
13// `uk-grid-margin`
14// `uk-grid-margin-small`
15// `uk-grid-margin-medium`
16// `uk-grid-margin-large`
17// `uk-grid-margin-collapse`
18//
19// Sub-modifier: `uk-grid-item-match`
20//
21// States: `uk-first-column`
22//
23// ========================================================================
24
25
26// Variables
27// ========================================================================
28
29$grid-gutter-horizontal: $global-gutter !default;
30$grid-gutter-vertical: $grid-gutter-horizontal !default;
31$grid-gutter-horizontal-l: $global-medium-gutter !default;
32$grid-gutter-vertical-l: $grid-gutter-horizontal-l !default;
33
34$grid-small-gutter-horizontal: $global-small-gutter !default;
35$grid-small-gutter-vertical: $grid-small-gutter-horizontal !default;
36
37$grid-medium-gutter-horizontal: $global-gutter !default;
38$grid-medium-gutter-vertical: $grid-medium-gutter-horizontal !default;
39
40$grid-large-gutter-horizontal: $global-medium-gutter !default;
41$grid-large-gutter-vertical: $grid-large-gutter-horizontal !default;
42$grid-large-gutter-horizontal-l: $global-large-gutter !default;
43$grid-large-gutter-vertical-l: $grid-large-gutter-horizontal-l !default;
44
45$grid-divider-border-width: $global-border-width !default;
46$grid-divider-border: $global-border !default;
47
48
49/* ========================================================================
50 Component: Grid
51 ========================================================================== */
52
53/*
54 * 1. Allow cells to wrap into the next line
55 * 2. Reset list
56 */
57
58.uk-grid {
59 display: flex;
60 /* 1 */
61 flex-wrap: wrap;
62 /* 2 */
63 margin: 0;
64 padding: 0;
65 list-style: none;
66}
67
68/*
69 * Grid cell
70 * Note: Space is allocated solely based on content dimensions, but shrinks: 0 1 auto
71 * Reset margin for e.g. paragraphs
72 */
73
74.uk-grid > * { margin: 0; }
75
76/*
77 * Remove margin from the last-child
78 */
79
80.uk-grid > * > :last-child { margin-bottom: 0; }
81
82
83/* Gutter
84 ========================================================================== */
85
86/*
87 * Default
88 */
89
90/* Horizontal */
91.uk-grid { margin-left: (-$grid-gutter-horizontal); }
92.uk-grid > * { padding-left: $grid-gutter-horizontal; }
93
94/* Vertical */
95.uk-grid + .uk-grid,
96.uk-grid > .uk-grid-margin,
97* + .uk-grid-margin { margin-top: $grid-gutter-vertical; }
98
99/* Desktop and bigger */
100@media (min-width: $breakpoint-large) {
101
102 /* Horizontal */
103 .uk-grid { margin-left: (-$grid-gutter-horizontal-l); }
104 .uk-grid > * { padding-left: $grid-gutter-horizontal-l; }
105
106 /* Vertical */
107 .uk-grid + .uk-grid,
108 .uk-grid > .uk-grid-margin,
109 * + .uk-grid-margin { margin-top: $grid-gutter-vertical-l; }
110
111}
112
113/*
114 * Small
115 */
116
117/* Horizontal */
118.uk-grid-small,
119.uk-grid-column-small { margin-left: (-$grid-small-gutter-horizontal); }
120.uk-grid-small > *,
121.uk-grid-column-small > * { padding-left: $grid-small-gutter-horizontal; }
122
123/* Vertical */
124.uk-grid + .uk-grid-small,
125.uk-grid + .uk-grid-row-small,
126.uk-grid-small > .uk-grid-margin,
127.uk-grid-row-small > .uk-grid-margin,
128* + .uk-grid-margin-small { margin-top: $grid-small-gutter-vertical; }
129
130/*
131 * Medium
132 */
133
134/* Horizontal */
135.uk-grid-medium,
136.uk-grid-column-medium { margin-left: (-$grid-medium-gutter-horizontal); }
137.uk-grid-medium > *,
138.uk-grid-column-medium > * { padding-left: $grid-medium-gutter-horizontal; }
139
140/* Vertical */
141.uk-grid + .uk-grid-medium,
142.uk-grid + .uk-grid-row-medium,
143.uk-grid-medium > .uk-grid-margin,
144.uk-grid-row-medium > .uk-grid-margin,
145* + .uk-grid-margin-medium { margin-top: $grid-medium-gutter-vertical; }
146
147/*
148 * Large
149 */
150
151/* Horizontal */
152.uk-grid-large,
153.uk-grid-column-large { margin-left: (-$grid-large-gutter-horizontal); }
154.uk-grid-large > *,
155.uk-grid-column-large > * { padding-left: $grid-large-gutter-horizontal; }
156
157/* Vertical */
158.uk-grid + .uk-grid-large,
159.uk-grid + .uk-grid-row-large,
160.uk-grid-large > .uk-grid-margin,
161.uk-grid-row-large > .uk-grid-margin,
162* + .uk-grid-margin-large { margin-top: $grid-large-gutter-vertical; }
163
164/* Desktop and bigger */
165@media (min-width: $breakpoint-large) {
166
167 /* Horizontal */
168 .uk-grid-large,
169 .uk-grid-column-large { margin-left: (-$grid-large-gutter-horizontal-l); }
170 .uk-grid-large > *,
171 .uk-grid-column-large > * { padding-left: $grid-large-gutter-horizontal-l; }
172
173 /* Vertical */
174 .uk-grid + .uk-grid-large,
175 .uk-grid + .uk-grid-row-large,
176 .uk-grid-large > .uk-grid-margin,
177 .uk-grid-row-large > .uk-grid-margin,
178 * + .uk-grid-margin-large { margin-top: $grid-large-gutter-vertical-l; }
179
180}
181
182/*
183 * Collapse
184 */
185
186/* Horizontal */
187.uk-grid-collapse,
188.uk-grid-column-collapse { margin-left: 0; }
189.uk-grid-collapse > *,
190.uk-grid-column-collapse > * { padding-left: 0; }
191
192/* Vertical */
193.uk-grid + .uk-grid-collapse,
194.uk-grid + .uk-grid-row-collapse,
195.uk-grid-collapse > .uk-grid-margin,
196.uk-grid-row-collapse > .uk-grid-margin { margin-top: 0; }
197
198
199/* Divider
200 ========================================================================== */
201
202.uk-grid-divider > * { position: relative; }
203
204.uk-grid-divider > :not(.uk-first-column)::before {
205 content: "";
206 position: absolute;
207 top: 0;
208 bottom: 0;
209 border-left: $grid-divider-border-width solid $grid-divider-border;
210}
211
212/* Vertical */
213.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
214 content: "";
215 position: absolute;
216 left: 0;
217 right: 0;
218 border-top: $grid-divider-border-width solid $grid-divider-border;
219}
220
221/*
222 * Default
223 */
224
225/* Horizontal */
226.uk-grid-divider { margin-left: -($grid-gutter-horizontal * 2); }
227.uk-grid-divider > * { padding-left: ($grid-gutter-horizontal * 2); }
228
229.uk-grid-divider > :not(.uk-first-column)::before { left: $grid-gutter-horizontal; }
230
231/* Vertical */
232.uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-gutter-vertical * 2); }
233
234.uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
235 top: (-$grid-gutter-vertical);
236 left: ($grid-gutter-horizontal * 2);
237}
238
239/* Desktop and bigger */
240@media (min-width: $breakpoint-large) {
241
242 /* Horizontal */
243 .uk-grid-divider { margin-left: -($grid-gutter-horizontal-l * 2); }
244 .uk-grid-divider > * { padding-left: ($grid-gutter-horizontal-l * 2); }
245
246 .uk-grid-divider > :not(.uk-first-column)::before { left: $grid-gutter-horizontal-l; }
247
248 /* Vertical */
249 .uk-grid-divider.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-gutter-vertical-l * 2); }
250
251 .uk-grid-divider.uk-grid-stack > .uk-grid-margin::before {
252 top: (-$grid-gutter-vertical-l);
253 left: ($grid-gutter-horizontal-l * 2);
254 }
255
256}
257
258/*
259 * Small
260 */
261
262/* Horizontal */
263.uk-grid-divider.uk-grid-small,
264.uk-grid-divider.uk-grid-column-small { margin-left: -($grid-small-gutter-horizontal * 2); }
265.uk-grid-divider.uk-grid-small > *,
266.uk-grid-divider.uk-grid-column-small > * { padding-left: ($grid-small-gutter-horizontal * 2); }
267
268.uk-grid-divider.uk-grid-small > :not(.uk-first-column)::before,
269.uk-grid-divider.uk-grid-column-small > :not(.uk-first-column)::before { left: $grid-small-gutter-horizontal; }
270
271/* Vertical */
272.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin,
273.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-small-gutter-vertical * 2); }
274
275.uk-grid-divider.uk-grid-small.uk-grid-stack > .uk-grid-margin::before {
276 top: (-$grid-small-gutter-vertical);
277 left: ($grid-small-gutter-horizontal * 2);
278}
279
280.uk-grid-divider.uk-grid-row-small.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-small-gutter-vertical); }
281.uk-grid-divider.uk-grid-column-small.uk-grid-stack > .uk-grid-margin::before { left: ($grid-small-gutter-horizontal * 2); }
282
283/*
284 * Medium
285 */
286
287/* Horizontal */
288.uk-grid-divider.uk-grid-medium,
289.uk-grid-divider.uk-grid-column-medium { margin-left: -($grid-medium-gutter-horizontal * 2); }
290.uk-grid-divider.uk-grid-medium > *,
291.uk-grid-divider.uk-grid-column-medium > * { padding-left: ($grid-medium-gutter-horizontal * 2); }
292
293.uk-grid-divider.uk-grid-medium > :not(.uk-first-column)::before,
294.uk-grid-divider.uk-grid-column-medium > :not(.uk-first-column)::before { left: $grid-medium-gutter-horizontal; }
295
296/* Vertical */
297.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin,
298.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-medium-gutter-vertical * 2); }
299
300.uk-grid-divider.uk-grid-medium.uk-grid-stack > .uk-grid-margin::before {
301 top: (-$grid-medium-gutter-vertical);
302 left: ($grid-medium-gutter-horizontal * 2);
303}
304
305.uk-grid-divider.uk-grid-row-medium.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-medium-gutter-vertical); }
306.uk-grid-divider.uk-grid-column-medium.uk-grid-stack > .uk-grid-margin::before { left: ($grid-medium-gutter-horizontal * 2); }
307
308/*
309 * Large
310 */
311
312/* Horizontal */
313.uk-grid-divider.uk-grid-large,
314.uk-grid-divider.uk-grid-column-large { margin-left: -($grid-large-gutter-horizontal * 2); }
315.uk-grid-divider.uk-grid-large > *,
316.uk-grid-divider.uk-grid-column-large > * { padding-left: ($grid-large-gutter-horizontal * 2); }
317
318.uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before,
319.uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: $grid-large-gutter-horizontal; }
320
321/* Vertical */
322.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
323.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-large-gutter-vertical * 2); }
324
325.uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
326 top: (-$grid-large-gutter-vertical);
327 left: ($grid-large-gutter-horizontal * 2);
328}
329
330.uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-large-gutter-vertical); }
331.uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: ($grid-large-gutter-horizontal * 2); }
332
333/* Desktop and bigger */
334@media (min-width: $breakpoint-large) {
335
336 /* Horizontal */
337 .uk-grid-divider.uk-grid-large,
338 .uk-grid-divider.uk-grid-column-large { margin-left: -($grid-large-gutter-horizontal-l * 2); }
339 .uk-grid-divider.uk-grid-large > *,
340 .uk-grid-divider.uk-grid-column-large > * { padding-left: ($grid-large-gutter-horizontal-l * 2); }
341
342 .uk-grid-divider.uk-grid-large > :not(.uk-first-column)::before,
343 .uk-grid-divider.uk-grid-column-large > :not(.uk-first-column)::before { left: $grid-large-gutter-horizontal-l; }
344
345 /* Vertical */
346 .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin,
347 .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin { margin-top: ($grid-large-gutter-vertical-l * 2); }
348
349 .uk-grid-divider.uk-grid-large.uk-grid-stack > .uk-grid-margin::before {
350 top: (-$grid-large-gutter-vertical-l);
351 left: ($grid-large-gutter-horizontal-l * 2);
352 }
353
354 .uk-grid-divider.uk-grid-row-large.uk-grid-stack > .uk-grid-margin::before { top: (-$grid-large-gutter-vertical-l); }
355 .uk-grid-divider.uk-grid-column-large.uk-grid-stack > .uk-grid-margin::before { left: ($grid-large-gutter-horizontal-l * 2); }
356
357}
358
359
360/* Match child of a grid cell
361 ========================================================================== */
362
363/*
364 * Behave like a block element
365 * 1. Wrap into the next line
366 * 2. Take the full width, at least 100%. Only if no class from the Width component is set.
367 * 3. Expand width even if larger than 100%, e.g. because of negative margin (Needed for nested grids)
368 */
369
370.uk-grid-match > *,
371.uk-grid-item-match {
372 display: flex;
373 /* 1 */
374 flex-wrap: wrap;
375}
376
377.uk-grid-match > * > :not([class*='uk-width']),
378.uk-grid-item-match > :not([class*='uk-width']) {
379 /* 2 */
380 box-sizing: border-box;
381 width: 100%;
382 /* 3 */
383 flex: auto;
384}
385
386
387// Hooks
388// ========================================================================
389
390@if(mixin-exists(hook-grid-misc)) {@include hook-grid-misc();}
391
392// @mixin hook-grid-misc(){}
393
394
395// Inverse
396// ========================================================================
397
398$inverse-grid-divider-border: $inverse-global-border !default;
399
400