@penskemediacorp/larva-css 1.6.0-alpha.0 → 1.6.0

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +206 -19
  3. package/__tests__/fixtures/expected.js +29 -0
  4. package/__tests__/lib/generators.test.js +11 -0
  5. package/build/css/algorithms.common.async.css +4 -36
  6. package/build/css/algorithms.common.inline.css +21 -274
  7. package/build/css/generic.common.inline.css +4 -63
  8. package/build/css/js.common.async.css +3 -0
  9. package/build/css/js.common.inline.css +6 -9
  10. package/build/css/utilities.common.async.css +8 -48
  11. package/build/css/utilities.common.inline.css +27 -466
  12. package/gulpfile.js +110 -82
  13. package/lib/generators.js +93 -0
  14. package/package.json +14 -6
  15. package/src/01-generic/elements.common.inline.scss +37 -1
  16. package/src/01-generic/forms.common.inline.scss +10 -0
  17. package/src/01-generic/side-skins.common.inline.scss +10 -0
  18. package/src/01-generic/typography.common.inline.scss +23 -13
  19. package/src/02-algorithms/a-buy-now/a-buy-now.common.inline.scss +112 -0
  20. package/src/02-algorithms/a-carousel-grid/a-carousel-grid.common.inline.scss +66 -0
  21. package/src/02-algorithms/a-children-border/a-children-border.common.inline.scss +43 -0
  22. package/src/02-algorithms/a-children-link-color/a-children-link-color.common.inline.scss +15 -0
  23. package/src/02-algorithms/a-children-link-decoration/a-children-link-decoration.common.inline.scss +13 -0
  24. package/src/02-algorithms/a-counter/a-counter.common.inline.scss +26 -0
  25. package/src/02-algorithms/a-crop/README.md +17 -13
  26. package/src/02-algorithms/a-crop/a-crop.common.inline.scss +97 -12
  27. package/src/02-algorithms/a-crop/a-crop.html +2 -2
  28. package/src/02-algorithms/a-floated/a-floated.common.inline.scss +32 -0
  29. package/src/02-algorithms/a-font/a-font.common.inline.scss +3 -0
  30. package/src/02-algorithms/a-glue/a-glue.common.inline.scss +63 -6
  31. package/src/02-algorithms/a-glue/a-glue.html +3 -3
  32. package/src/02-algorithms/a-grid/README.md +141 -14
  33. package/src/02-algorithms/a-grid/a-grid.common.inline.scss +53 -5
  34. package/src/02-algorithms/a-grid/a-grid.html +4 -4
  35. package/src/02-algorithms/a-hidden/a-hidden.common.inline.scss +43 -0
  36. package/src/02-algorithms/a-hover-dropup/a-hover-dropup.common.async.scss +7 -7
  37. package/src/02-algorithms/a-hover-dropup/a-hover-dropup.html +3 -3
  38. package/src/02-algorithms/a-hover-effect/a-hover-effect.common.async.scss +25 -0
  39. package/src/02-algorithms/a-hover-effect/a-hover-effect.html +16 -0
  40. package/src/02-algorithms/a-icon/a-icon.common.async.scss +28 -3
  41. package/src/02-algorithms/a-icon/a-icon.common.inline.scss +51 -73
  42. package/src/02-algorithms/a-screen-reader-only/a-screen-reader-only.common.inline.scss +30 -0
  43. package/src/02-algorithms/a-scrollable-grid/a-scrollable-grid.common.inline.scss +52 -0
  44. package/src/02-algorithms/a-show-on-hover/a-show-on-hover.common.inline.scss +16 -0
  45. package/src/02-algorithms/a-space-children/a-space-children.common.inline.scss +88 -17
  46. package/src/02-algorithms/a-truncate-ellipsis/a-truncate-ellipsis.common.async.scss +71 -0
  47. package/src/02-algorithms/a-unstyle-button/a-unstyle-button.common.inline.scss +2 -3
  48. package/src/02-algorithms/a-unstyle-link/a-unstyle-link.common.inline.scss +7 -0
  49. package/src/02-algorithms/a-unstyle-list/a-unstyle-list.common.inline.scss +1 -1
  50. package/src/02-algorithms/a-wrapper/a-wrapper.common.inline.scss +14 -2
  51. package/src/03-utilities/u-background-color.common.async.scss +15 -0
  52. package/src/03-utilities/u-background-color.common.inline.scss +37 -0
  53. package/src/03-utilities/u-border-color.common.async.scss +36 -8
  54. package/src/03-utilities/u-border-radius.common.async.scss +27 -0
  55. package/src/03-utilities/u-border.common.inline.scss +210 -5
  56. package/src/03-utilities/u-box-alignment.common.inline.scss +64 -4
  57. package/src/03-utilities/u-box-shadow.common.async.scss +34 -3
  58. package/src/03-utilities/u-color.common.async.scss +19 -16
  59. package/src/03-utilities/u-color.common.inline.scss +39 -0
  60. package/src/03-utilities/u-cursor.common.async.scss +1 -1
  61. package/src/03-utilities/u-display.common.inline.scss +83 -4
  62. package/src/03-utilities/u-filter.common.async.scss +5 -0
  63. package/src/03-utilities/u-flex.common.inline.scss +128 -9
  64. package/src/03-utilities/u-font-family.common.inline.scss +41 -16
  65. package/src/03-utilities/u-font-size.common.inline.scss +58 -5
  66. package/src/03-utilities/u-font-style.common.inline.scss +9 -0
  67. package/src/03-utilities/u-font-weight.common.inline.scss +50 -12
  68. package/src/03-utilities/u-height.common.inline.scss +41 -5
  69. package/src/03-utilities/u-letter-spacing.common.inline.scss +11 -0
  70. package/src/03-utilities/u-line-height.common.inline.scss +49 -13
  71. package/src/03-utilities/u-list-style.common.async.scss +3 -0
  72. package/src/03-utilities/u-margin.common.inline.scss +182 -47
  73. package/src/03-utilities/u-max-width.common.inline.scss +25 -0
  74. package/src/03-utilities/u-opacity.common.inline.scss +3 -0
  75. package/src/03-utilities/u-order.common.inline.scss +23 -2
  76. package/src/03-utilities/u-overflow.common.inline.scss +14 -2
  77. package/src/03-utilities/u-padding.common.inline.scss +157 -52
  78. package/src/03-utilities/u-position.common.inline.scss +3 -0
  79. package/src/03-utilities/u-text-align.common.inline.scss +27 -4
  80. package/src/03-utilities/u-text-decoration.common.inline.scss +11 -0
  81. package/src/03-utilities/u-text-transform.common.inline.scss +14 -2
  82. package/src/03-utilities/u-transform.common.inline.scss +5 -0
  83. package/src/03-utilities/u-vertical-align.common.inline.scss +7 -0
  84. package/src/03-utilities/u-whitespace.common.inline.scss +1 -1
  85. package/src/03-utilities/u-width.common.inline.scss +194 -10
  86. package/src/04-js/README.md +5 -0
  87. package/src/04-js/js-Collapsible.common.inline.scss +15 -0
  88. package/src/04-js/js-ExpandableSearch.common.async.scss +33 -0
  89. package/src/04-js/js-Flickity.common.async.scss +91 -0
  90. package/src/04-js/js-Header.common.inline.scss +73 -0
  91. package/src/04-js/js-MegaMenu.common.inline.scss +50 -0
  92. package/src/04-js/js-MobileHeightToggle.common.inline.scss +7 -5
  93. package/src/04-js/js-PopOver.common.async.scss +13 -0
  94. package/src/04-js/js-Tooltip.common.inline.scss +17 -0
  95. package/src/04-js/js-VideoShowcase.common.inline.scss +33 -0
  96. package/src/04-js/partials/expandable-search.scss +202 -0
  97. package/src/04-js/partials/flickity.scss +149 -0
  98. package/src/_generated/_a-font.scss +1027 -0
  99. package/src/larva-ui/prism.scss +127 -0
  100. package/src/setup.scss +7 -0
  101. package/stylelint.config.js +10 -11
  102. package/holding/a-truncate-children/README.md +0 -3
  103. package/holding/a-truncate-children/a-truncate-children.browser-test.js +0 -104
  104. package/holding/a-truncate-children/a-truncate-children.css +0 -4
  105. package/holding/a-truncate-children/a-truncate-children.html +0 -15
  106. package/holding/a-truncate-children/a-truncate-children.scss +0 -5
  107. package/src/01-generic/config.common.inline.scss +0 -22
  108. package/src/02-algorithms/a-glue/index.js +0 -1
  109. package/src/02-algorithms/a-icon/a-icon.html +0 -20
  110. package/src/02-algorithms/a-unstyle-link/a-unstyle-link.common.async.scss +0 -5
  111. package/src/03-utilities/u-background.common.async.scss +0 -25
@@ -0,0 +1,15 @@
1
+ @import 'setup';
2
+
3
+ .lrv-a-children-link-color-black {
4
+ & > a {
5
+ color: map-get( $TOKENS-MAP, color-black );
6
+ color: var( --color-black );
7
+ }
8
+ }
9
+
10
+ .lrv-a-children-link-color-brand-primary\:hover {
11
+ & > a:hover {
12
+ color: map-get( $TOKENS-MAP, color-brand-primary );
13
+ color: var( --color-brand-primary );
14
+ }
15
+ }
@@ -0,0 +1,13 @@
1
+ @import 'setup';
2
+
3
+ .lrv-a-children-link-decoration-underline {
4
+ & > a {
5
+ text-decoration: underline;
6
+ }
7
+ }
8
+
9
+ .lrv-a-children-link-decoration-underline\:hover {
10
+ & > a:hover {
11
+ text-decoration: underline;
12
+ }
13
+ }
@@ -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
- # Crop
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 `.pmc-a-crop-WIDTHxHEIGHT`, so a 16x9 cropped image would use the class `.pmc-a-crop-16x9`.
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
- The available aspect ratios output from this package are:
7
+ ## Available Classes
8
8
 
9
- ```
10
- .pmc-a-crop-1x1
11
- .pmc-a-crop-2x1
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
- .pmc-a-crop-16x9 {
16
+ .lrv-a-crop-16x9 {
21
17
  position: relative;
22
18
  padding-bottom: calc( ( 9 / 16 ) * 100%);
23
19
  }
24
20
 
25
- .pmc-a-crop-16x9 img {
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,97 @@
1
- @import '@penskemediacorp/larva-scss/dist/generators';
2
-
3
- @include pmc-a-crop(
4
- (
5
- '1x1': (1, 1),
6
- '2x1': (2, 2),
7
- '2x3': (3, 2),
8
- '4x3': (4, 3),
9
- '16x9': (16, 9),
10
- '3x4': (3, 4)
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-1x1\@tablet {
38
+ @include pmc-breakpoint( tablet ) {
39
+
40
+ position: relative;
41
+ padding-bottom: 100%;
42
+
43
+ img {
44
+ position: absolute;
45
+ width: 100%;
46
+ height: 100%;
47
+ object-fit: cover;
48
+ }
49
+
50
+ }
51
+ }
52
+
53
+ .lrv-a-crop-1x1\@desktop-xl-max {
54
+ @include pmc-breakpoint( desktop-xl-max ) {
55
+
56
+ position: relative;
57
+ padding-bottom: 100%;
58
+
59
+ img {
60
+ position: absolute;
61
+ width: 100%;
62
+ height: 100%;
63
+ object-fit: cover;
64
+ }
65
+ }
66
+ }
67
+
68
+ .lrv-a-crop-3x2\@desktop-xl {
69
+ @include pmc-breakpoint( desktop-xl ) {
70
+
71
+ position: relative;
72
+ padding-bottom: calc( ( 2 / 3 ) * 100% );
73
+
74
+ img {
75
+ position: absolute;
76
+ width: 100%;
77
+ height: 100%;
78
+ object-fit: cover;
79
+ }
80
+ }
81
+ }
82
+
83
+
84
+ .lrv-a-crop-3x2\@mobile-max {
85
+ @include pmc-breakpoint( mobile-max ) {
86
+
87
+ position: relative;
88
+ padding-bottom: calc( ( 2 / 3 ) * 100% );
89
+
90
+ img {
91
+ position: absolute;
92
+ width: 100%;
93
+ height: 100%;
94
+ object-fit: cover;
95
+ }
96
+ }
97
+ }
@@ -9,11 +9,11 @@
9
9
  </head>
10
10
  <body>
11
11
 
12
- <div class="pmc-a-crop-16x9" style="width: 600px;">
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="pmc-a-crop-3x4" style="width: 400px;">
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
+ }
@@ -0,0 +1,3 @@
1
+ @import 'setup';
2
+
3
+ @import '../../_generated/a-font';
@@ -10,11 +10,11 @@
10
10
  left: var( --a-glue-left, initial );
11
11
  }
12
12
 
13
- .pmc-a-glue-parent {
13
+ .lrv-a-glue-parent {
14
14
  position: relative;
15
15
  }
16
16
 
17
- .pmc-a-glue {
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
- .pmc-a-glue--l-0 {
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
- .pmc-a-glue--r-0 {
48
+ .lrv-a-glue--r-0 {
30
49
  --a-glue-right: 0;
31
50
  }
32
51
 
33
- .pmc-a-glue--t-0 {
52
+ .lrv-a-glue--t-0 {
34
53
  --a-glue-top: 0;
35
54
  }
36
55
 
37
- .pmc-a-glue--b-0 {
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="./a-glue.common.inline.css">
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
- # Grid
1
+ # a-grid
2
2
 
3
- Grids must be in order of media queries to maintain the cascade,
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
- The `spans` entry will output a class to instruct a grid item to span
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
- To apply a grid to an element, i.e. an element's children, add the `pmc-a-grid`
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
- `<section class="pmc-a-grid pmc-a-cols2 pmc-a-cols4@desktop">`
9
+ ## Algorithm Source
16
10
 
17
- Similarly, each grid item should have the class `pmc-a-grid-item`. Span utilities
18
- can be added in a similar fashion:
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
- `<div class="pmc-a-grid-item pmc-a-span2@tablet">`.
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 '@penskemediacorp/larva-scss/dist/generators';
1
+ @import 'setup';
2
2
 
3
- .pmc-a-grid {
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
- .pmc-a-grid-item {
18
- // Remove flex charactaristics to honor flex-basis value.
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 pmc-a-grid( $grids );
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="./a-grid.critical.css">
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="pmc-a-grid pmc-a-cols2">
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="pmc-a-grid pmc-a-cols3">
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="pmc-a-grid-item pmc-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>
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
+ }