@penskemediacorp/larva-css 1.7.0-alpha.0 → 1.7.2
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.
- package/LICENSE +21 -0
- package/README.md +206 -19
- package/__tests__/fixtures/expected.js +29 -0
- package/__tests__/lib/generators.test.js +11 -0
- package/build/css/algorithms.common.async.css +4 -36
- package/build/css/algorithms.common.inline.css +21 -274
- package/build/css/generic.common.inline.css +4 -67
- package/build/css/js.common.async.css +3 -0
- package/build/css/js.common.inline.css +6 -9
- package/build/css/utilities.common.async.css +8 -55
- package/build/css/utilities.common.inline.css +29 -473
- package/gulpfile.js +110 -82
- package/lib/generators.js +93 -0
- package/package.json +14 -6
- package/src/01-generic/elements.common.inline.scss +33 -1
- package/src/01-generic/forms.common.inline.scss +10 -0
- package/src/01-generic/side-skins.common.inline.scss +10 -0
- package/src/01-generic/typography.common.inline.scss +23 -13
- package/src/02-algorithms/a-buy-now/a-buy-now.common.inline.scss +112 -0
- package/src/02-algorithms/a-carousel-grid/a-carousel-grid.common.inline.scss +66 -0
- package/src/02-algorithms/a-children-border/a-children-border.common.inline.scss +43 -0
- package/src/02-algorithms/a-children-link-color/a-children-link-color.common.inline.scss +15 -0
- package/src/02-algorithms/a-children-link-decoration/a-children-link-decoration.common.inline.scss +13 -0
- package/src/02-algorithms/a-counter/a-counter.common.inline.scss +26 -0
- package/src/02-algorithms/a-crop/README.md +17 -13
- package/src/02-algorithms/a-crop/a-crop.common.inline.scss +96 -12
- package/src/02-algorithms/a-crop/a-crop.html +2 -2
- package/src/02-algorithms/a-floated/a-floated.common.inline.scss +32 -0
- package/src/02-algorithms/a-font/a-font.common.inline.scss +3 -0
- package/src/02-algorithms/a-glue/a-glue.common.inline.scss +63 -6
- package/src/02-algorithms/a-glue/a-glue.html +3 -3
- package/src/02-algorithms/a-grid/README.md +141 -14
- package/src/02-algorithms/a-grid/a-grid.common.inline.scss +53 -5
- package/src/02-algorithms/a-grid/a-grid.html +4 -4
- package/src/02-algorithms/a-hidden/a-hidden.common.inline.scss +43 -0
- package/src/02-algorithms/a-hover-dropup/a-hover-dropup.common.async.scss +7 -7
- package/src/02-algorithms/a-hover-dropup/a-hover-dropup.html +3 -3
- package/src/02-algorithms/a-hover-effect/a-hover-effect.common.async.scss +25 -0
- package/src/02-algorithms/a-hover-effect/a-hover-effect.html +16 -0
- package/src/02-algorithms/a-icon/a-icon.common.async.scss +28 -3
- package/src/02-algorithms/a-icon/a-icon.common.inline.scss +51 -73
- package/src/02-algorithms/a-screen-reader-only/a-screen-reader-only.common.inline.scss +30 -0
- package/src/02-algorithms/a-scrollable-grid/a-scrollable-grid.common.inline.scss +52 -0
- package/src/02-algorithms/a-show-on-hover/a-show-on-hover.common.inline.scss +16 -0
- package/src/02-algorithms/a-space-children/a-space-children.common.inline.scss +88 -17
- package/src/02-algorithms/a-truncate-ellipsis/a-truncate-ellipsis.common.async.scss +71 -0
- package/src/02-algorithms/a-unstyle-button/a-unstyle-button.common.inline.scss +2 -3
- package/src/02-algorithms/a-unstyle-link/a-unstyle-link.common.inline.scss +7 -0
- package/src/02-algorithms/a-unstyle-list/a-unstyle-list.common.inline.scss +1 -1
- package/src/02-algorithms/a-wrapper/a-wrapper.common.inline.scss +14 -2
- package/src/03-utilities/u-background-color.common.async.scss +15 -0
- package/src/03-utilities/u-background-color.common.inline.scss +37 -0
- package/src/03-utilities/u-border-color.common.async.scss +36 -8
- package/src/03-utilities/u-border-radius.common.async.scss +26 -2
- package/src/03-utilities/u-border.common.inline.scss +215 -4
- package/src/03-utilities/u-box-alignment.common.inline.scss +64 -4
- package/src/03-utilities/u-box-shadow.common.async.scss +34 -3
- package/src/03-utilities/u-color.common.async.scss +19 -21
- package/src/03-utilities/u-color.common.inline.scss +39 -0
- package/src/03-utilities/u-cursor.common.async.scss +1 -1
- package/src/03-utilities/u-display.common.inline.scss +87 -4
- package/src/03-utilities/u-filter.common.async.scss +5 -0
- package/src/03-utilities/u-flex.common.inline.scss +151 -9
- package/src/03-utilities/u-font-family.common.inline.scss +41 -17
- package/src/03-utilities/u-font-size.common.inline.scss +58 -5
- package/src/03-utilities/u-font-style.common.inline.scss +9 -0
- package/src/03-utilities/u-font-weight.common.inline.scss +50 -12
- package/src/03-utilities/u-height.common.inline.scss +38 -8
- package/src/03-utilities/u-left.common.inline.scss +7 -0
- package/src/03-utilities/u-letter-spacing.common.inline.scss +11 -0
- package/src/03-utilities/u-line-height.common.inline.scss +49 -13
- package/src/03-utilities/u-list-style.common.async.scss +3 -0
- package/src/03-utilities/u-margin.common.inline.scss +182 -47
- package/src/03-utilities/u-max-width.common.inline.scss +25 -0
- package/src/03-utilities/u-opacity.common.inline.scss +3 -0
- package/src/03-utilities/u-order.common.inline.scss +29 -2
- package/src/03-utilities/u-overflow.common.inline.scss +14 -2
- package/src/03-utilities/u-padding.common.inline.scss +157 -52
- package/src/03-utilities/u-position.common.inline.scss +11 -0
- package/src/03-utilities/u-text-align.common.inline.scss +27 -4
- package/src/03-utilities/u-text-decoration.common.inline.scss +11 -0
- package/src/03-utilities/u-text-transform.common.inline.scss +14 -2
- package/src/03-utilities/u-top.common.inline.scss +7 -0
- package/src/03-utilities/u-transform.common.inline.scss +12 -0
- package/src/03-utilities/u-vertical-align.common.inline.scss +7 -0
- package/src/03-utilities/u-whitespace.common.inline.scss +1 -1
- package/src/03-utilities/u-width.common.inline.scss +198 -12
- package/src/04-js/README.md +5 -0
- package/src/04-js/js-Collapsible.common.inline.scss +15 -0
- package/src/04-js/js-ExpandableSearch.common.async.scss +33 -0
- package/src/04-js/js-Flickity.common.async.scss +91 -0
- package/src/04-js/js-Header.common.inline.scss +73 -0
- package/src/04-js/js-MegaMenu.common.inline.scss +50 -0
- package/src/04-js/js-MobileHeightToggle.common.inline.scss +7 -5
- package/src/04-js/js-PopOver.common.async.scss +13 -0
- package/src/04-js/js-Tooltip.common.inline.scss +17 -0
- package/src/04-js/js-VideoShowcase.common.inline.scss +33 -0
- package/src/04-js/partials/expandable-search.scss +202 -0
- package/src/04-js/partials/flickity.scss +149 -0
- package/src/_generated/_a-font.scss +1027 -0
- package/src/larva-ui/prism.scss +127 -0
- package/src/setup.scss +7 -0
- package/stylelint.config.js +10 -11
- package/holding/a-truncate-children/README.md +0 -3
- package/holding/a-truncate-children/a-truncate-children.browser-test.js +0 -104
- package/holding/a-truncate-children/a-truncate-children.css +0 -4
- package/holding/a-truncate-children/a-truncate-children.html +0 -15
- package/holding/a-truncate-children/a-truncate-children.scss +0 -5
- package/src/01-generic/config.common.inline.scss +0 -24
- package/src/02-algorithms/a-glue/index.js +0 -1
- package/src/02-algorithms/a-icon/a-icon.html +0 -20
- package/src/02-algorithms/a-unstyle-link/a-unstyle-link.common.async.scss +0 -5
- package/src/03-utilities/u-background.common.async.scss +0 -25
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.lrv-a-counter {
|
|
2
|
+
counter-reset: a-counter;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.lrv-a-counter-increment {
|
|
6
|
+
counter-increment: a-counter;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.lrv-a-counter-before::before {
|
|
10
|
+
content: counter( a-counter );
|
|
11
|
+
display: var( --a-counter__display, inline-block);
|
|
12
|
+
padding: var( --a-counter__padding, initial );
|
|
13
|
+
background-color: var( --a-counter__background-color, initial );
|
|
14
|
+
color: var( --a-counter__color, inherit );
|
|
15
|
+
border-top-right-radius: var( --a-counter__border-top-right-radius, inherit );
|
|
16
|
+
font-family: var( --a-counter__font-family, inherit );
|
|
17
|
+
font-size: var( --a-counter__font-size, inherit ); // stylelint-disable-line property-blacklist
|
|
18
|
+
line-height: var( --a-counter__line-height, 0.7 );
|
|
19
|
+
font-weight: var( --a-counter__font-weight, inherit ); // stylelint-disable-line property-blacklist
|
|
20
|
+
z-index: 1;
|
|
21
|
+
position: var( --a-counter__position, initial );
|
|
22
|
+
left: var( --a-counter__left, auto );
|
|
23
|
+
top: var( --a-counter__top, auto );
|
|
24
|
+
right: var( --a-counter__right, auto );
|
|
25
|
+
bottom: var( --a-counter__bottom, auto );
|
|
26
|
+
}
|
|
@@ -1,31 +1,35 @@
|
|
|
1
|
-
#
|
|
1
|
+
# a-crop
|
|
2
2
|
|
|
3
3
|
The cropping algorithm applies an aspect ratio to a element containing an image, and will crop the contained image to the aspect ratio. It uses background-size: cover, padding, and absolute positioning to do this.
|
|
4
4
|
|
|
5
|
-
The classes output by the generator are `.
|
|
5
|
+
The classes output by the generator are `.a-crop-WIDTHxHEIGHT`, so a 16x9 cropped image would use the class `.a-crop-16x9`.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Available Classes
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
.pmc-a-crop-2x3
|
|
13
|
-
.pmc-a-crop-4x3
|
|
14
|
-
.pmc-a-crop-16x9
|
|
15
|
-
.pmc-a-crop-3x4
|
|
16
|
-
```
|
|
9
|
+
Reference the Sass list in a-crop.common.inline.scss to see a list of a-crop classes provided by Larva CSS.
|
|
10
|
+
|
|
11
|
+
## Algorithm Source
|
|
17
12
|
|
|
18
13
|
The source for the cropping algorithm is:
|
|
14
|
+
|
|
19
15
|
```
|
|
20
|
-
.
|
|
16
|
+
.lrv-a-crop-16x9 {
|
|
21
17
|
position: relative;
|
|
22
18
|
padding-bottom: calc( ( 9 / 16 ) * 100%);
|
|
23
19
|
}
|
|
24
20
|
|
|
25
|
-
.
|
|
21
|
+
.lrv-a-crop-16x9 img {
|
|
26
22
|
position: absolute;
|
|
27
23
|
width: 100%;
|
|
28
24
|
height: 100%;
|
|
29
25
|
object-fit: cover;
|
|
30
26
|
}
|
|
31
27
|
```
|
|
28
|
+
|
|
29
|
+
## Extendable?
|
|
30
|
+
|
|
31
|
+
**Do no extend `a-crop`**. Create a separate algorithm, or use utilities for properties like the following:
|
|
32
|
+
|
|
33
|
+
* object-fit - change the scaling behavior of the image e.g. `u-object-fit-contain`.
|
|
34
|
+
* object-position - change the alignment of a cropped image, e.g. align it to the top rather than center.
|
|
35
|
+
* background-color – update the background color that may appear while an image is loading.
|
|
@@ -1,12 +1,96 @@
|
|
|
1
|
-
@import '
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
)
|
|
12
|
-
)
|
|
1
|
+
@import 'setup';
|
|
2
|
+
|
|
3
|
+
$aspect-ratios: (
|
|
4
|
+
'1x1': (1, 1),
|
|
5
|
+
'2x1': (2, 1),
|
|
6
|
+
'2x3': (2, 3),
|
|
7
|
+
'3x2': (3, 2),
|
|
8
|
+
'4x3': (4, 3),
|
|
9
|
+
'16x9': (16, 9),
|
|
10
|
+
'5x1': (5, 1),
|
|
11
|
+
'5x2': (5, 2),
|
|
12
|
+
'3x4': (3, 4)
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
@include a-crop( $aspect-ratios, $NAMESPACE: 'lrv-' );
|
|
16
|
+
|
|
17
|
+
.lrv-a-crop-contain img { // Required for a-crop
|
|
18
|
+
object-fit: contain;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.lrv-a-crop-1x1\@mobile-max {
|
|
22
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
23
|
+
|
|
24
|
+
position: relative;
|
|
25
|
+
padding-bottom: 100%;
|
|
26
|
+
|
|
27
|
+
img {
|
|
28
|
+
position: absolute;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 100%;
|
|
31
|
+
object-fit: cover;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.lrv-a-crop-3x2\@desktop-xl {
|
|
38
|
+
@include pmc-breakpoint( desktop-xl ) {
|
|
39
|
+
|
|
40
|
+
position: relative;
|
|
41
|
+
padding-bottom: calc( ( 2 / 3 ) * 100% );
|
|
42
|
+
|
|
43
|
+
img {
|
|
44
|
+
position: absolute;
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
47
|
+
object-fit: cover;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.lrv-a-crop-1x1\@tablet {
|
|
53
|
+
@include pmc-breakpoint( tablet ) {
|
|
54
|
+
|
|
55
|
+
position: relative;
|
|
56
|
+
padding-bottom: 100%;
|
|
57
|
+
|
|
58
|
+
img {
|
|
59
|
+
position: absolute;
|
|
60
|
+
width: 100%;
|
|
61
|
+
height: 100%;
|
|
62
|
+
object-fit: cover;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.lrv-a-crop-1x1\@desktop-xl-max {
|
|
69
|
+
@include pmc-breakpoint( desktop-xl-max ) {
|
|
70
|
+
|
|
71
|
+
position: relative;
|
|
72
|
+
padding-bottom: 100%;
|
|
73
|
+
|
|
74
|
+
img {
|
|
75
|
+
position: absolute;
|
|
76
|
+
width: 100%;
|
|
77
|
+
height: 100%;
|
|
78
|
+
object-fit: cover;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.lrv-a-crop-3x2\@mobile-max {
|
|
84
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
85
|
+
|
|
86
|
+
position: relative;
|
|
87
|
+
padding-bottom: calc( ( 2 / 3 ) * 100% );
|
|
88
|
+
|
|
89
|
+
img {
|
|
90
|
+
position: absolute;
|
|
91
|
+
width: 100%;
|
|
92
|
+
height: 100%;
|
|
93
|
+
object-fit: cover;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
|
|
12
|
-
<div class="
|
|
12
|
+
<div class="lrv-a-crop-16x9" style="width: 600px;">
|
|
13
13
|
<img src="https://pmcdeadline2.files.wordpress.com/2019/07/jonathan-majors.jpg" alt="">
|
|
14
14
|
</div>
|
|
15
15
|
<hr>
|
|
16
|
-
<div class="
|
|
16
|
+
<div class="lrv-a-crop-3x4" style="width: 400px;">
|
|
17
17
|
<img src="https://pmcdeadline2.files.wordpress.com/2019/07/jonathan-majors.jpg" alt="">
|
|
18
18
|
</div>
|
|
19
19
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
@import '@penskemediacorp/larva-scss/dist/tools';
|
|
2
|
+
|
|
3
|
+
.lrv-a-floated-parent::before,
|
|
4
|
+
.lrv-a-floated-parent::after {
|
|
5
|
+
content: '';
|
|
6
|
+
display: table;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.lrv-a-floated-parent::after {
|
|
10
|
+
clear: both;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.lrv-a-floated-parent {
|
|
14
|
+
zoom: 1;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.lrv-a-floated-left {
|
|
18
|
+
float: left;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.lrv-a-floated-left\@tablet {
|
|
22
|
+
|
|
23
|
+
@include pmc-breakpoint( tablet ) {
|
|
24
|
+
float: left;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.lrv-a-floated-right\@tablet {
|
|
29
|
+
@include pmc-breakpoint(tablet) {
|
|
30
|
+
float: right;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
left: var( --a-glue-left, initial );
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
.
|
|
13
|
+
.lrv-a-glue-parent {
|
|
14
14
|
position: relative;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
.
|
|
17
|
+
.lrv-a-glue {
|
|
18
18
|
// Fallback is top left for everything.
|
|
19
19
|
top: 0;
|
|
20
20
|
left: 0;
|
|
@@ -22,18 +22,75 @@
|
|
|
22
22
|
@include _a-glue-base;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
26
|
+
.lrv-a-glue\@mobile-max {
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
|
|
30
|
+
@include _a-glue-base;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.lrv-a-glue\@tablet {
|
|
35
|
+
@include pmc-breakpoint( tablet ) {
|
|
36
|
+
// TODO: incorporate these fallback values into mixin
|
|
37
|
+
top: 0;
|
|
38
|
+
left: 0;
|
|
39
|
+
|
|
40
|
+
@include _a-glue-base;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.lrv-a-glue--l-0 {
|
|
26
45
|
--a-glue-left: 0;
|
|
27
46
|
}
|
|
28
47
|
|
|
29
|
-
.
|
|
48
|
+
.lrv-a-glue--r-0 {
|
|
30
49
|
--a-glue-right: 0;
|
|
31
50
|
}
|
|
32
51
|
|
|
33
|
-
.
|
|
52
|
+
.lrv-a-glue--t-0 {
|
|
34
53
|
--a-glue-top: 0;
|
|
35
54
|
}
|
|
36
55
|
|
|
37
|
-
.
|
|
56
|
+
.lrv-a-glue--b-0 {
|
|
38
57
|
--a-glue-bottom: 0;
|
|
39
58
|
}
|
|
59
|
+
|
|
60
|
+
.lrv-a-glue--t-50p {
|
|
61
|
+
--a-glue-top: 50%;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.lrv-a-glue--t-100p {
|
|
65
|
+
--a-glue-top: 100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.lrv-a-glue--l-50p {
|
|
69
|
+
--a-glue-left: 50%;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.lrv-a-glue--r-50p {
|
|
73
|
+
--a-glue-right: 50%;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.lrv-a-glue--b-n1 {
|
|
77
|
+
--a-glue-bottom: -1rem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.lrv-a-glue-parent\@mobile-max {
|
|
81
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
82
|
+
position: relative;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.lrv-a-glue-parent\@tablet {
|
|
87
|
+
@include pmc-breakpoint( tablet ) {
|
|
88
|
+
position: relative;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.lrv-a-glue--b-unset\@mobile-max {
|
|
93
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
94
|
+
bottom: unset;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
7
|
<title>Document</title>
|
|
8
|
-
<link rel="stylesheet" href="
|
|
8
|
+
<link rel="stylesheet" href="../../../build/css/algorithms.common.inline.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
|
-
<div class="a-glue-parent" style="display: inline-block;">
|
|
11
|
+
<div class="lrv-a-glue-parent" style="display: inline-block;">
|
|
12
12
|
<img src="http://placehold.it/300x300" alt="">
|
|
13
|
-
<p class="a-glue a-glue--t-0 a-glue--r-0">Glued Element</p>
|
|
13
|
+
<p class="lrv-a-glue lrv-a-glue--t-0 lrv-a-glue--r-0">Glued Element</p>
|
|
14
14
|
</div>
|
|
15
15
|
</body>
|
|
16
16
|
</html>
|
|
@@ -1,20 +1,147 @@
|
|
|
1
|
-
#
|
|
1
|
+
# a-grid
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
e.g. desktop-xl grids are at the very end, breakpoint-less grids at
|
|
5
|
-
the top.
|
|
3
|
+
This utility generator is for creating simple grids. It uses a CSS Grid with a custom property to update the grid columns, and provides a flexbox fallback for older browsers. It supports flexible values for number of columns in the grid, grid items spanning multiple columns, and breakpoints for both.
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
a specific number of columns. By default, grid items will each span
|
|
9
|
-
a single column. Apply a trailing comma to the list of spans.
|
|
5
|
+
## Available Classes
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
class to initiate a single column grid, then additional utility classes to
|
|
13
|
-
adjust the grid e.g.
|
|
7
|
+
Reference the `$grids` list in packages/larva-css/src/02-algorithms/a-grid/a-grid.common.inline.scss to see which grids are available from Larva CSS.
|
|
14
8
|
|
|
15
|
-
|
|
9
|
+
## Algorithm Source
|
|
16
10
|
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
Here is an example of the algorithm accommodating a two column grid that changes to four columns at desktop:
|
|
12
|
+
```
|
|
13
|
+
.lrv-a-grid {
|
|
14
|
+
--cols: 1;
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
display: grid;
|
|
17
|
+
grid-gap: 1.25rem;
|
|
18
|
+
grid-template-columns: repeat( var( --cols ), minmax( 0, 1fr ) );
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.lrv-a-cols2 {
|
|
22
|
+
--cols: 2;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media( min-width: $screen-desktop ) {
|
|
26
|
+
|
|
27
|
+
.lrv-a-cols4\@desktop {
|
|
28
|
+
--cols: 4;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Use in a project:
|
|
35
|
+
|
|
36
|
+
To add new grids in a project, create a-grid.{chunk}.inline.scss and add the following:
|
|
37
|
+
|
|
38
|
+
```langauge-scss
|
|
39
|
+
$grids: (
|
|
40
|
+
(
|
|
41
|
+
columns: 4,
|
|
42
|
+
spans: ( 2, 3, ),
|
|
43
|
+
breakpoint: tablet,
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
@include a-grid( $grids );
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This will output something like:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
@media min-width( ${TABLET} ) {
|
|
54
|
+
|
|
55
|
+
.a-cols4\@tablet {
|
|
56
|
+
--cols: 4;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.a-span\@tablet {
|
|
60
|
+
grid-column: span 2;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.a-span3\@tablet {
|
|
64
|
+
grid-column: span 3;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`.lrv-a-cols4@tablet` must be applied along with `.lrv-a-grid` to set up the main part of the grid.
|
|
70
|
+
|
|
71
|
+
A few important things to note:
|
|
72
|
+
|
|
73
|
+
* In the mixin, **grids must be in order of media queries to maintain the cascade**, e.g. desktop-xl grids are at the very end, breakpoint-less grids at the top.
|
|
74
|
+
* By default, grid items will each span
|
|
75
|
+
a single column.
|
|
76
|
+
* Apply a trailing comma to the list of spans, and in general, use trailing commas in Sass lists.
|
|
77
|
+
* It is best practice to apply `lrv-a-grid-item` to child elements of an `a-grid` for both readability and a few edge cases, but note that some code-bases have not done this.
|
|
78
|
+
|
|
79
|
+
## Examples
|
|
80
|
+
|
|
81
|
+
If mobile is two columns:
|
|
82
|
+
+----+----+
|
|
83
|
+
| | |
|
|
84
|
+
| | |
|
|
85
|
+
+---------+
|
|
86
|
+
| | |
|
|
87
|
+
| | |
|
|
88
|
+
+----+----+
|
|
89
|
+
|
|
90
|
+
And desktop is four columns:
|
|
91
|
+
+------+------+------+------+
|
|
92
|
+
| | | | |
|
|
93
|
+
| | | | |
|
|
94
|
+
+------+------+------+------+
|
|
95
|
+
|
|
96
|
+
The markup would be:
|
|
97
|
+
|
|
98
|
+
```language-html
|
|
99
|
+
<div class="lrv-a-grid lrv-a-cols2 lrv-a-cols4@desktop">
|
|
100
|
+
<div class="lrv-a-grid-item"></div>
|
|
101
|
+
<div class="lrv-a-grid-item"></div>
|
|
102
|
+
<div class="lrv-a-grid-item"></div>
|
|
103
|
+
<div class="lrv-a-grid-item"></div>
|
|
104
|
+
</div>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
If mobile is one column:
|
|
108
|
+
+--------+
|
|
109
|
+
|////////|
|
|
110
|
+
|////////|
|
|
111
|
+
+--------+
|
|
112
|
+
| |
|
|
113
|
+
+--------+
|
|
114
|
+
| |
|
|
115
|
+
+--------+
|
|
116
|
+
|
|
117
|
+
And desktop is a four column grid, with the first element spanning two columns:
|
|
118
|
+
+------+------+------+------+
|
|
119
|
+
|/////////////| | |
|
|
120
|
+
|/////////////| | |
|
|
121
|
+
+------+------+------+------+
|
|
122
|
+
|
|
123
|
+
```language-html
|
|
124
|
+
<div class="lrv-a-grid lrv-a-cols4@desktop">
|
|
125
|
+
<div class="lrv-a-grid-item lrv-a-span2@desktop"></div>
|
|
126
|
+
<div class="lrv-a-grid-item"></div>
|
|
127
|
+
<div class="lrv-a-grid-item"></div>
|
|
128
|
+
</div>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Extendable?
|
|
132
|
+
|
|
133
|
+
**Do not extend `a-grid`**. Use utilities or create a separate algorithm.
|
|
134
|
+
|
|
135
|
+
The class name `a-grid` should _only_ be used for declarations that apply to this basic, equal column CSS grid, and that **does not include grid-gap**. Any adjustments in `grid-gap` or specific grid configurations beyond equal columns should be done with `u-grid` utilities.
|
|
136
|
+
|
|
137
|
+
For example, to apply a larger grid-gap to an `a-grid`, you could add this to `03-utilities/u-grid.{chunk}.inline.scss`:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
.u-grid-gap-2\@desktop {
|
|
141
|
+
@include pmc-breakpoint( desktop ) {
|
|
142
|
+
grid-gap: $spacer-2;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
And apply `u-grid-gap-2@desktop` to the same element as `lrv-a-grid`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
@import '
|
|
1
|
+
@import 'setup';
|
|
2
2
|
|
|
3
|
-
.
|
|
3
|
+
.lrv-a-grid {
|
|
4
4
|
display: flex;
|
|
5
5
|
flex-wrap: wrap;
|
|
6
6
|
align-items: start;
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
.
|
|
18
|
-
// Remove flex
|
|
17
|
+
.lrv-a-grid-item {
|
|
18
|
+
// Remove flex characteristics to honor flex-basis value.
|
|
19
19
|
flex: none;
|
|
20
20
|
padding: 0.625rem;
|
|
21
21
|
|
|
@@ -30,6 +30,11 @@ $grids: (
|
|
|
30
30
|
),
|
|
31
31
|
(
|
|
32
32
|
columns: 3,
|
|
33
|
+
spans: ( 2 ),
|
|
34
|
+
),
|
|
35
|
+
(
|
|
36
|
+
columns: 2,
|
|
37
|
+
breakpoint: tablet,
|
|
33
38
|
),
|
|
34
39
|
(
|
|
35
40
|
columns: 3,
|
|
@@ -41,6 +46,49 @@ $grids: (
|
|
|
41
46
|
spans: ( 2, 3, ),
|
|
42
47
|
breakpoint: tablet,
|
|
43
48
|
),
|
|
49
|
+
(
|
|
50
|
+
columns: 3,
|
|
51
|
+
breakpoint: desktop,
|
|
52
|
+
),
|
|
53
|
+
(
|
|
54
|
+
columns: 2,
|
|
55
|
+
breakpoint: desktop,
|
|
56
|
+
),
|
|
57
|
+
(
|
|
58
|
+
columns: 2,
|
|
59
|
+
breakpoint: desktop-xl,
|
|
60
|
+
),
|
|
61
|
+
(
|
|
62
|
+
columns: 4,
|
|
63
|
+
spans: ( 2 ),
|
|
64
|
+
breakpoint: desktop,
|
|
65
|
+
),
|
|
66
|
+
(
|
|
67
|
+
columns: 4,
|
|
68
|
+
spans: ( 3 ),
|
|
69
|
+
breakpoint: desktop,
|
|
70
|
+
),
|
|
71
|
+
(
|
|
72
|
+
columns: 4,
|
|
73
|
+
spans: ( 3 ),
|
|
74
|
+
breakpoint: desktop-xl,
|
|
75
|
+
),
|
|
76
|
+
(
|
|
77
|
+
columns: 5,
|
|
78
|
+
breakpoint: desktop,
|
|
79
|
+
),
|
|
44
80
|
);
|
|
45
81
|
|
|
46
|
-
@include
|
|
82
|
+
@include a-grid( $grids, $NAMESPACE: 'lrv-' );
|
|
83
|
+
|
|
84
|
+
.lrv-a-grid-first-child-span-all\@mobile-max {
|
|
85
|
+
|
|
86
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
87
|
+
|
|
88
|
+
& > *:first-child {
|
|
89
|
+
@supports ( display: grid ) {
|
|
90
|
+
grid-column: 1 / -1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -4,18 +4,18 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
|
-
<link rel="stylesheet" href="
|
|
7
|
+
<link rel="stylesheet" href="../../../build/css/algorithms.common.inline.css">
|
|
8
8
|
<title>Document</title>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
|
-
<div class="
|
|
11
|
+
<div class="lrv-a-grid lrv-a-cols2">
|
|
12
12
|
<div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Totam omnis qui minima aperiam aspernatur distinctio nam neque nostrum nesciunt laborum? Ad dicta quam possimus voluptates velit perferendis vel sed itaque!</div>
|
|
13
13
|
<div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Totam omnis qui minima aperiam aspernatur distinctio nam neque nostrum nesciunt laborum? Ad dicta quam possimus voluptates velit perferendis vel sed itaque!</div>
|
|
14
14
|
</div>
|
|
15
15
|
<hr>
|
|
16
|
-
<div class="
|
|
16
|
+
<div class="lrv-a-grid lrv-a-cols3">
|
|
17
17
|
<div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Totam omnis qui minima aperiam aspernatur distinctio nam neque nostrum nesciunt laborum? Ad dicta quam possimus voluptates velit perferendis vel sed itaque!</div>
|
|
18
|
-
<div class="
|
|
18
|
+
<div class="lrv-a-grid-item lrv-a-span2">Lorem ipsum dolor sit amet consectetur adipisicing elit. Totam omnis qui minima aperiam aspernatur distinctio nam neque nostrum nesciunt laborum? Ad dicta quam possimus voluptates velit perferendis vel sed itaque!</div>
|
|
19
19
|
</div>
|
|
20
20
|
</body>
|
|
21
21
|
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@import 'setup';
|
|
2
|
+
|
|
3
|
+
@mixin _a-hidden {
|
|
4
|
+
// stylelint-disable declaration-no-important
|
|
5
|
+
display: none !important;
|
|
6
|
+
// stylelint-enable declaration-no-important
|
|
7
|
+
height: 0;
|
|
8
|
+
width: 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.lrv-a-hidden {
|
|
12
|
+
@include _a-hidden;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.lrv-a-hidden\@mobile-max {
|
|
16
|
+
@include pmc-breakpoint( mobile-max ) {
|
|
17
|
+
@include _a-hidden;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.lrv-a-hidden\@desktop-max {
|
|
22
|
+
@include pmc-breakpoint( desktop-max ) {
|
|
23
|
+
@include _a-hidden;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.lrv-a-hidden\@desktop-xl-max {
|
|
28
|
+
@include pmc-breakpoint( desktop-xl-max ) {
|
|
29
|
+
@include _a-hidden;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.lrv-a-hidden\@tablet {
|
|
34
|
+
@include pmc-breakpoint( tablet ) {
|
|
35
|
+
@include _a-hidden;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.lrv-a-hidden\@desktop {
|
|
40
|
+
@include pmc-breakpoint( desktop ) {
|
|
41
|
+
@include _a-hidden;
|
|
42
|
+
}
|
|
43
|
+
}
|