stylelint-plugin-grid 1.0.1 → 1.0.3
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/README.md +30 -22
- package/dist/_internal/grid-placement-analysis.d.ts +20 -0
- package/dist/_internal/grid-placement-analysis.d.ts.map +1 -0
- package/dist/_internal/grid-placement-analysis.js +59 -0
- package/dist/_internal/grid-placement-analysis.js.map +1 -0
- package/dist/_internal/grid-template-analysis.d.ts +2 -0
- package/dist/_internal/grid-template-analysis.d.ts.map +1 -1
- package/dist/_internal/grid-template-analysis.js +4 -0
- package/dist/_internal/grid-template-analysis.js.map +1 -1
- package/dist/_internal/rules-registry.d.ts.map +1 -1
- package/dist/_internal/rules-registry.js +16 -0
- package/dist/_internal/rules-registry.js.map +1 -1
- package/dist/plugin.cjs +893 -285
- package/dist/plugin.cjs.map +4 -4
- package/dist/rules/no-conflicting-placement.d.ts +8 -0
- package/dist/rules/no-conflicting-placement.d.ts.map +1 -0
- package/dist/rules/no-conflicting-placement.js +70 -0
- package/dist/rules/no-conflicting-placement.js.map +1 -0
- package/dist/rules/no-ineffective-container-properties.d.ts +8 -0
- package/dist/rules/no-ineffective-container-properties.d.ts.map +1 -0
- package/dist/rules/no-ineffective-container-properties.js +97 -0
- package/dist/rules/no-ineffective-container-properties.js.map +1 -0
- package/dist/rules/no-invalid-repeat-count.d.ts +8 -0
- package/dist/rules/no-invalid-repeat-count.d.ts.map +1 -0
- package/dist/rules/no-invalid-repeat-count.js +75 -0
- package/dist/rules/no-invalid-repeat-count.js.map +1 -0
- package/dist/rules/no-invalid-span.d.ts +8 -0
- package/dist/rules/no-invalid-span.d.ts.map +1 -0
- package/dist/rules/no-invalid-span.js +49 -0
- package/dist/rules/no-invalid-span.js.map +1 -0
- package/dist/rules/no-reversed-placement-lines.d.ts +8 -0
- package/dist/rules/no-reversed-placement-lines.d.ts.map +1 -0
- package/dist/rules/no-reversed-placement-lines.js +129 -0
- package/dist/rules/no-reversed-placement-lines.js.map +1 -0
- package/dist/rules/no-zero-grid-lines.d.ts +8 -0
- package/dist/rules/no-zero-grid-lines.d.ts.map +1 -0
- package/dist/rules/no-zero-grid-lines.js +48 -0
- package/dist/rules/no-zero-grid-lines.js.map +1 -0
- package/dist/rules/prefer-minmax-zero-fr.d.ts +8 -0
- package/dist/rules/prefer-minmax-zero-fr.d.ts.map +1 -0
- package/dist/rules/prefer-minmax-zero-fr.js +56 -0
- package/dist/rules/prefer-minmax-zero-fr.js.map +1 -0
- package/dist/rules/require-explicit-tracks-with-areas.d.ts +12 -0
- package/dist/rules/require-explicit-tracks-with-areas.d.ts.map +1 -0
- package/dist/rules/require-explicit-tracks-with-areas.js +65 -0
- package/dist/rules/require-explicit-tracks-with-areas.js.map +1 -0
- package/docs/rules/configs/grid-all.md +23 -15
- package/docs/rules/configs/grid-recommended.md +16 -10
- package/docs/rules/configs/index.md +23 -15
- package/docs/rules/consistent-area-naming.md +5 -5
- package/docs/rules/getting-started.md +8 -8
- package/docs/rules/no-conflicting-placement.md +59 -0
- package/docs/rules/no-dense-auto-flow.md +8 -8
- package/docs/rules/no-ineffective-container-properties.md +63 -0
- package/docs/rules/no-invalid-areas.md +11 -11
- package/docs/rules/no-invalid-auto-repeat.md +8 -8
- package/docs/rules/no-invalid-minmax.md +8 -8
- package/docs/rules/no-invalid-repeat-count.md +56 -0
- package/docs/rules/no-invalid-span.md +55 -0
- package/docs/rules/no-mismatched-template-rows.md +8 -8
- package/docs/rules/no-overlapping-areas.md +4 -4
- package/docs/rules/no-reversed-placement-lines.md +56 -0
- package/docs/rules/no-unknown-areas.md +4 -4
- package/docs/rules/no-unused-areas.md +5 -5
- package/docs/rules/no-zero-grid-lines.md +53 -0
- package/docs/rules/prefer-gap-properties.md +10 -10
- package/docs/rules/prefer-minmax-zero-fr.md +49 -0
- package/docs/rules/require-explicit-rows-with-column-flow.md +10 -10
- package/docs/rules/require-explicit-tracks-with-areas.md +80 -0
- package/docs/rules/validate-area-shapes.md +10 -10
- package/docs/rules/validate-track-counts.md +10 -10
- package/package.json +15 -7
|
@@ -12,13 +12,13 @@ length, or a percentage instead.
|
|
|
12
12
|
|
|
13
13
|
```css
|
|
14
14
|
.layout {
|
|
15
|
-
|
|
15
|
+
grid-template-columns: minmax(1fr, 20rem) 2fr;
|
|
16
16
|
}
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
```css
|
|
20
20
|
.layout {
|
|
21
|
-
|
|
21
|
+
grid-auto-rows: minmax(0.5fr, auto);
|
|
22
22
|
}
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -26,13 +26,13 @@ length, or a percentage instead.
|
|
|
26
26
|
|
|
27
27
|
```css
|
|
28
28
|
.layout {
|
|
29
|
-
|
|
29
|
+
grid-template-columns: minmax(0, 1fr) minmax(12rem, 20rem);
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
```css
|
|
34
34
|
.layout {
|
|
35
|
-
|
|
35
|
+
grid-auto-rows: minmax(10rem, auto);
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -40,10 +40,10 @@ length, or a percentage instead.
|
|
|
40
40
|
|
|
41
41
|
```js
|
|
42
42
|
export default {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
plugins: ["stylelint-plugin-grid"],
|
|
44
|
+
rules: {
|
|
45
|
+
"grid/no-invalid-minmax": true,
|
|
46
|
+
},
|
|
47
47
|
};
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# no-invalid-repeat-count
|
|
2
|
+
|
|
3
|
+
Disallow invalid fixed repeat counts in CSS Grid track templates.
|
|
4
|
+
|
|
5
|
+
The first argument to a fixed `repeat()` must be a positive integer. Counts such
|
|
6
|
+
as `0`, negative numbers, and decimals make the track template invalid. This
|
|
7
|
+
rule leaves `auto-fit`, `auto-fill`, and dynamic values to the rules that own
|
|
8
|
+
those cases.
|
|
9
|
+
|
|
10
|
+
## Incorrect
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
.layout {
|
|
14
|
+
grid-template-columns: repeat(0, 1fr);
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
.layout {
|
|
20
|
+
grid-template-rows: repeat(2.5, auto);
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Correct
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
.layout {
|
|
28
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```css
|
|
33
|
+
.layout {
|
|
34
|
+
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Stylelint Config
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
export default {
|
|
42
|
+
plugins: ["stylelint-plugin-grid"],
|
|
43
|
+
rules: {
|
|
44
|
+
"grid/no-invalid-repeat-count": true,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Related Rules
|
|
50
|
+
|
|
51
|
+
- [`no-invalid-auto-repeat`](./no-invalid-auto-repeat.md) checks track sizes
|
|
52
|
+
inside `repeat(auto-fit, ...)` and `repeat(auto-fill, ...)`.
|
|
53
|
+
- [`validate-track-counts`](./validate-track-counts.md) compares expanded track
|
|
54
|
+
counts with named area templates.
|
|
55
|
+
- [`grid-recommended`](./configs/grid-recommended.md) enables this rule by
|
|
56
|
+
default.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# no-invalid-span
|
|
2
|
+
|
|
3
|
+
Disallow non-positive `span` counts in CSS Grid placement declarations.
|
|
4
|
+
|
|
5
|
+
Grid spans must move across at least one track. Values such as `span 0` and
|
|
6
|
+
`span -1` cannot place an item usefully and usually make the declaration
|
|
7
|
+
invalid or ignored.
|
|
8
|
+
|
|
9
|
+
## Incorrect
|
|
10
|
+
|
|
11
|
+
```css
|
|
12
|
+
.item {
|
|
13
|
+
grid-column: span 0 / span 2;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```css
|
|
18
|
+
.item {
|
|
19
|
+
grid-row-start: span -1;
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Correct
|
|
24
|
+
|
|
25
|
+
```css
|
|
26
|
+
.item {
|
|
27
|
+
grid-column: span 2 / sidebar-end;
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```css
|
|
32
|
+
.item {
|
|
33
|
+
grid-row-start: span var(--rows);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Stylelint Config
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
export default {
|
|
41
|
+
plugins: ["stylelint-plugin-grid"],
|
|
42
|
+
rules: {
|
|
43
|
+
"grid/no-invalid-span": true,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Related Rules
|
|
49
|
+
|
|
50
|
+
- [`no-zero-grid-lines`](./no-zero-grid-lines.md) rejects line `0` in placement
|
|
51
|
+
values.
|
|
52
|
+
- [`no-reversed-placement-lines`](./no-reversed-placement-lines.md) checks
|
|
53
|
+
numeric placement ranges.
|
|
54
|
+
- [`grid-recommended`](./configs/grid-recommended.md) enables this rule by
|
|
55
|
+
default.
|
|
@@ -7,10 +7,10 @@ count when both declarations appear in the same block.
|
|
|
7
7
|
|
|
8
8
|
```css
|
|
9
9
|
.layout {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
grid-template-areas:
|
|
11
|
+
"header"
|
|
12
|
+
"main";
|
|
13
|
+
grid-template-rows: auto;
|
|
14
14
|
}
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -18,10 +18,10 @@ count when both declarations appear in the same block.
|
|
|
18
18
|
|
|
19
19
|
```css
|
|
20
20
|
.layout {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
grid-template-areas:
|
|
22
|
+
"header"
|
|
23
|
+
"main";
|
|
24
|
+
grid-template-rows: auto 1fr;
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -11,11 +11,11 @@ usually indicate layout collisions in your codebase.
|
|
|
11
11
|
|
|
12
12
|
```css
|
|
13
13
|
.header {
|
|
14
|
-
|
|
14
|
+
grid-area: header;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
.mobileHeader {
|
|
18
|
-
|
|
18
|
+
grid-area: header;
|
|
19
19
|
}
|
|
20
20
|
```
|
|
21
21
|
|
|
@@ -23,11 +23,11 @@ usually indicate layout collisions in your codebase.
|
|
|
23
23
|
|
|
24
24
|
```css
|
|
25
25
|
.header {
|
|
26
|
-
|
|
26
|
+
grid-area: header;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
.sidebar {
|
|
30
|
-
|
|
30
|
+
grid-area: sidebar;
|
|
31
31
|
}
|
|
32
32
|
```
|
|
33
33
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# no-reversed-placement-lines
|
|
2
|
+
|
|
3
|
+
Disallow reversed or zero-width numeric CSS Grid placement line ranges.
|
|
4
|
+
|
|
5
|
+
Numeric line ranges such as `grid-column: 4 / 2` and `grid-row: 3 / 3` do not
|
|
6
|
+
describe a forward span across tracks. This rule only compares plain numeric
|
|
7
|
+
line pairs in the same block and ignores named lines, spans, mixed signs, and
|
|
8
|
+
dynamic values.
|
|
9
|
+
|
|
10
|
+
## Incorrect
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
.item {
|
|
14
|
+
grid-column: 4 / 2;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```css
|
|
19
|
+
.item {
|
|
20
|
+
grid-row-start: 7;
|
|
21
|
+
grid-row-end: 6;
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Correct
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
.item {
|
|
29
|
+
grid-column: 2 / 4;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```css
|
|
34
|
+
.item {
|
|
35
|
+
grid-row: span 2 / 5;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Stylelint Config
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
export default {
|
|
43
|
+
plugins: ["stylelint-plugin-grid"],
|
|
44
|
+
rules: {
|
|
45
|
+
"grid/no-reversed-placement-lines": true,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Related Rules
|
|
51
|
+
|
|
52
|
+
- [`no-invalid-span`](./no-invalid-span.md) rejects non-positive span counts.
|
|
53
|
+
- [`no-zero-grid-lines`](./no-zero-grid-lines.md) rejects line `0` in placement
|
|
54
|
+
values.
|
|
55
|
+
- [`grid-recommended`](./configs/grid-recommended.md) enables this rule by
|
|
56
|
+
default.
|
|
@@ -7,11 +7,11 @@ declared by `grid-template-areas` in the same stylesheet.
|
|
|
7
7
|
|
|
8
8
|
```css
|
|
9
9
|
.layout {
|
|
10
|
-
|
|
10
|
+
grid-template-areas: "header main";
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
.sidebar {
|
|
14
|
-
|
|
14
|
+
grid-area: sidebr;
|
|
15
15
|
}
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -19,11 +19,11 @@ declared by `grid-template-areas` in the same stylesheet.
|
|
|
19
19
|
|
|
20
20
|
```css
|
|
21
21
|
.layout {
|
|
22
|
-
|
|
22
|
+
grid-template-areas: "header main";
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.header {
|
|
26
|
-
|
|
26
|
+
grid-area: header;
|
|
27
27
|
}
|
|
28
28
|
```
|
|
29
29
|
|
|
@@ -11,11 +11,11 @@ templates and items live in separate files.
|
|
|
11
11
|
|
|
12
12
|
```css
|
|
13
13
|
.layout {
|
|
14
|
-
|
|
14
|
+
grid-template-areas: "header main";
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
.main {
|
|
18
|
-
|
|
18
|
+
grid-area: main;
|
|
19
19
|
}
|
|
20
20
|
```
|
|
21
21
|
|
|
@@ -31,14 +31,14 @@ templates and items live in separate files.
|
|
|
31
31
|
|
|
32
32
|
```css
|
|
33
33
|
.layout {
|
|
34
|
-
|
|
34
|
+
grid-template-areas: "header main";
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
.header {
|
|
38
|
-
|
|
38
|
+
grid-area: header;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.main {
|
|
42
|
-
|
|
42
|
+
grid-area: main;
|
|
43
43
|
}
|
|
44
44
|
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# no-zero-grid-lines
|
|
2
|
+
|
|
3
|
+
Disallow line `0` in CSS Grid placement declarations.
|
|
4
|
+
|
|
5
|
+
CSS Grid line numbering starts at `1` from the start edge and `-1` from the end
|
|
6
|
+
edge. Line `0` does not exist, so placement values using `0` are invalid.
|
|
7
|
+
|
|
8
|
+
## Incorrect
|
|
9
|
+
|
|
10
|
+
```css
|
|
11
|
+
.item {
|
|
12
|
+
grid-column: 0 / 2;
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```css
|
|
17
|
+
.item {
|
|
18
|
+
grid-row-end: 0;
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Correct
|
|
23
|
+
|
|
24
|
+
```css
|
|
25
|
+
.item {
|
|
26
|
+
grid-column: 1 / -1;
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```css
|
|
31
|
+
.item {
|
|
32
|
+
grid-row: var(--row-start) / var(--row-end);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Stylelint Config
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
export default {
|
|
40
|
+
plugins: ["stylelint-plugin-grid"],
|
|
41
|
+
rules: {
|
|
42
|
+
"grid/no-zero-grid-lines": true,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Related Rules
|
|
48
|
+
|
|
49
|
+
- [`no-invalid-span`](./no-invalid-span.md) rejects non-positive span counts.
|
|
50
|
+
- [`no-reversed-placement-lines`](./no-reversed-placement-lines.md) checks
|
|
51
|
+
numeric placement ranges.
|
|
52
|
+
- [`grid-recommended`](./configs/grid-recommended.md) enables this rule by
|
|
53
|
+
default.
|
|
@@ -8,9 +8,9 @@ This rule is autofixable.
|
|
|
8
8
|
|
|
9
9
|
```css
|
|
10
10
|
.layout {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
display: grid;
|
|
12
|
+
grid-gap: 1rem;
|
|
13
|
+
grid-column-gap: 2rem;
|
|
14
14
|
}
|
|
15
15
|
```
|
|
16
16
|
|
|
@@ -18,9 +18,9 @@ This rule is autofixable.
|
|
|
18
18
|
|
|
19
19
|
```css
|
|
20
20
|
.layout {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
display: grid;
|
|
22
|
+
gap: 1rem;
|
|
23
|
+
column-gap: 2rem;
|
|
24
24
|
}
|
|
25
25
|
```
|
|
26
26
|
|
|
@@ -28,10 +28,10 @@ This rule is autofixable.
|
|
|
28
28
|
|
|
29
29
|
```js
|
|
30
30
|
export default {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
plugins: ["stylelint-plugin-grid"],
|
|
32
|
+
rules: {
|
|
33
|
+
"grid/prefer-gap-properties": true,
|
|
34
|
+
},
|
|
35
35
|
};
|
|
36
36
|
```
|
|
37
37
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# prefer-minmax-zero-fr
|
|
2
|
+
|
|
3
|
+
Prefer `minmax(0, <flex>)` for bare flexible CSS Grid column tracks.
|
|
4
|
+
|
|
5
|
+
Bare `fr` column tracks use an automatic minimum size, so long content can
|
|
6
|
+
force columns wider than intended. Wrapping the flexible track in `minmax(0, …)`
|
|
7
|
+
keeps the column flexible while allowing content to shrink or overflow according
|
|
8
|
+
to the rest of the layout rules.
|
|
9
|
+
|
|
10
|
+
## Incorrect
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
.layout {
|
|
14
|
+
grid-template-columns: 1fr 2fr;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Correct
|
|
19
|
+
|
|
20
|
+
```css
|
|
21
|
+
.layout {
|
|
22
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```css
|
|
27
|
+
.layout {
|
|
28
|
+
grid-template-columns: repeat(2, 1fr);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Stylelint Config
|
|
33
|
+
|
|
34
|
+
```js
|
|
35
|
+
export default {
|
|
36
|
+
plugins: ["stylelint-plugin-grid"],
|
|
37
|
+
rules: {
|
|
38
|
+
"grid/prefer-minmax-zero-fr": true,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Related Rules
|
|
44
|
+
|
|
45
|
+
- [`no-invalid-minmax`](./no-invalid-minmax.md) rejects flexible minimums inside
|
|
46
|
+
`minmax()`.
|
|
47
|
+
- [`no-invalid-auto-repeat`](./no-invalid-auto-repeat.md) checks auto-repeat
|
|
48
|
+
track sizes.
|
|
49
|
+
- [`grid-all`](./configs/grid-all.md) enables this optional rule.
|
|
@@ -15,8 +15,8 @@ cascade layers.
|
|
|
15
15
|
|
|
16
16
|
```css
|
|
17
17
|
.cards {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
grid-auto-flow: column;
|
|
19
|
+
grid-template-columns: repeat(3, 1fr);
|
|
20
20
|
}
|
|
21
21
|
```
|
|
22
22
|
|
|
@@ -24,15 +24,15 @@ cascade layers.
|
|
|
24
24
|
|
|
25
25
|
```css
|
|
26
26
|
.cards {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
grid-auto-flow: column;
|
|
28
|
+
grid-auto-rows: minmax(10rem, auto);
|
|
29
29
|
}
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
```css
|
|
33
33
|
.cards {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
grid-auto-flow: column;
|
|
35
|
+
grid-template-rows: repeat(3, minmax(0, 1fr));
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -40,10 +40,10 @@ cascade layers.
|
|
|
40
40
|
|
|
41
41
|
```js
|
|
42
42
|
export default {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
plugins: ["stylelint-plugin-grid"],
|
|
44
|
+
rules: {
|
|
45
|
+
"grid/require-explicit-rows-with-column-flow": true,
|
|
46
|
+
},
|
|
47
47
|
};
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# require-explicit-tracks-with-areas
|
|
2
|
+
|
|
3
|
+
Require explicit track sizing alongside CSS Grid named area templates.
|
|
4
|
+
|
|
5
|
+
Named area templates are easiest to maintain when their columns, and optionally
|
|
6
|
+
their rows, are sized in the same block. By default this rule requires
|
|
7
|
+
`grid-template-columns` and leaves rows optional because auto-sized rows are
|
|
8
|
+
common.
|
|
9
|
+
|
|
10
|
+
## Incorrect
|
|
11
|
+
|
|
12
|
+
```css
|
|
13
|
+
.layout {
|
|
14
|
+
grid-template-areas: "nav main";
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
With `{ rows: true }`:
|
|
19
|
+
|
|
20
|
+
```css
|
|
21
|
+
.layout {
|
|
22
|
+
grid-template-areas: "main";
|
|
23
|
+
grid-template-columns: minmax(0, 1fr);
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Correct
|
|
28
|
+
|
|
29
|
+
```css
|
|
30
|
+
.layout {
|
|
31
|
+
grid-template-areas: "nav main";
|
|
32
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
With `{ rows: true }`:
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
.layout {
|
|
40
|
+
grid-template-areas: "main";
|
|
41
|
+
grid-template-columns: minmax(0, 1fr);
|
|
42
|
+
grid-template-rows: auto;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Options
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
export default {
|
|
50
|
+
plugins: ["stylelint-plugin-grid"],
|
|
51
|
+
rules: {
|
|
52
|
+
"grid/require-explicit-tracks-with-areas": [
|
|
53
|
+
true,
|
|
54
|
+
{
|
|
55
|
+
columns: true,
|
|
56
|
+
rows: false,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Stylelint Config
|
|
64
|
+
|
|
65
|
+
```js
|
|
66
|
+
export default {
|
|
67
|
+
plugins: ["stylelint-plugin-grid"],
|
|
68
|
+
rules: {
|
|
69
|
+
"grid/require-explicit-tracks-with-areas": true,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Related Rules
|
|
75
|
+
|
|
76
|
+
- [`no-mismatched-template-rows`](./no-mismatched-template-rows.md) compares
|
|
77
|
+
named area rows with `grid-template-rows`.
|
|
78
|
+
- [`validate-track-counts`](./validate-track-counts.md) compares named area
|
|
79
|
+
columns and rows with explicit track counts.
|
|
80
|
+
- [`grid-all`](./configs/grid-all.md) enables this optional rule.
|
|
@@ -9,9 +9,9 @@ authored template declaration instead of leaving it to browser behavior.
|
|
|
9
9
|
|
|
10
10
|
```css
|
|
11
11
|
.layout {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
grid-template-areas:
|
|
13
|
+
"main side"
|
|
14
|
+
"main main";
|
|
15
15
|
}
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -19,9 +19,9 @@ authored template declaration instead of leaving it to browser behavior.
|
|
|
19
19
|
|
|
20
20
|
```css
|
|
21
21
|
.layout {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
grid-template-areas:
|
|
23
|
+
"main side"
|
|
24
|
+
"main side";
|
|
25
25
|
}
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -29,10 +29,10 @@ authored template declaration instead of leaving it to browser behavior.
|
|
|
29
29
|
|
|
30
30
|
```js
|
|
31
31
|
export default {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
plugins: ["stylelint-plugin-grid"],
|
|
33
|
+
rules: {
|
|
34
|
+
"grid/validate-area-shapes": true,
|
|
35
|
+
},
|
|
36
36
|
};
|
|
37
37
|
```
|
|
38
38
|
|
|
@@ -7,11 +7,11 @@ match the dimensions of `grid-template-areas`.
|
|
|
7
7
|
|
|
8
8
|
```css
|
|
9
9
|
.layout {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
grid-template-areas:
|
|
11
|
+
"nav main"
|
|
12
|
+
"nav footer";
|
|
13
|
+
grid-template-columns: 12rem;
|
|
14
|
+
grid-template-rows: auto auto auto;
|
|
15
15
|
}
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -19,11 +19,11 @@ match the dimensions of `grid-template-areas`.
|
|
|
19
19
|
|
|
20
20
|
```css
|
|
21
21
|
.layout {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
grid-template-areas:
|
|
23
|
+
"nav main"
|
|
24
|
+
"nav footer";
|
|
25
|
+
grid-template-columns: 12rem 1fr;
|
|
26
|
+
grid-template-rows: auto auto;
|
|
27
27
|
}
|
|
28
28
|
```
|
|
29
29
|
|