Skip to content

Commit edc0fe3

Browse files
authored
cascade layers : use only simple selectors (#387)
* cascade layers : use only simpel selectors * update test results
1 parent 4f20fe5 commit edc0fe3

18 files changed

+235
-231
lines changed

plugin-packs/postcss-preset-env/test/layers-basic.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
order: 5;
3939

4040
@layer D {
41-
is-layer: C.D;
41+
is-layer: C_D;
4242
order: 5.1;
4343
}
4444
}

plugin-packs/postcss-preset-env/test/layers-basic.expect.css

+87-87
Large diffs are not rendered by default.

plugin-packs/postcss-preset-env/test/layers-basic.preserve.true.expect.css

+96-96
Large diffs are not rendered by default.

plugins/postcss-cascade-layers/CHANGELOG.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
# Changes to PostCSS Cascade Layers
22

3+
### Unreleased
4+
5+
- Use only simple `:not(#\#)` selectors to adjust specificity.
6+
37
### 1.0.1 (May 17, 2022)
48

5-
- Process CSS after most other plugins to ensure correct analysis and transformation of sugary CSS.
6-
- Fix selector order with `:before` and other pseudo elements.
9+
- Process CSS after most other plugins to ensure correct analysis and transformation of sugary CSS.
10+
- Fix selector order with `:before` and other pseudo elements.
711

812
### 1.0.0 (May 12, 2022)
913

plugins/postcss-cascade-layers/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ for `@layer A, B, C`:
4646
| layer | specificity adjustment | selector |
4747
| ------ | ----------- | --- |
4848
| `A` | 0 | N/A |
49-
| `B` | 3 | `:not(#/##/##/#)` |
50-
| `C` | 6 | `:not(#/##/##/##/##/##/#)` |
49+
| `B` | 3 | `:not(#/#):not(#/#):not(#/#)` |
50+
| `C` | 6 | `:not(#/#):not(#/#):not(#/#):not(#/#):not(#/#):not(#/#)` |
5151

5252
This approach lets more important (later) layers always override less important (earlier) layers.<br>
5353
And layers have enough room internally so that each selector works and overrides as expected.

plugins/postcss-cascade-layers/docs/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ for `@layer A, B, C`:
3737
| layer | specificity adjustment | selector |
3838
| ------ | ----------- | --- |
3939
| `A` | 0 | N/A |
40-
| `B` | 3 | `:not(#/##/##/#)` |
41-
| `C` | 6 | `:not(#/##/##/##/##/##/#)` |
40+
| `B` | 3 | `:not(#/#):not(#/#):not(#/#)` |
41+
| `C` | 6 | `:not(#/#):not(#/#):not(#/#):not(#/#):not(#/#):not(#/#)` |
4242

4343
This approach lets more important (later) layers always override less important (earlier) layers.<br>
4444
And layers have enough room internally so that each selector works and overrides as expected.

plugins/postcss-cascade-layers/src/adjust-selector-specificity.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ function generateNot(specificity: number) {
2020

2121
let list = '';
2222
for (let i = 0; i < specificity; i++) {
23-
list += '#\\#'; // something short but still very uncommon
23+
list += ':not(#\\#)'; // something short but still very uncommon
2424
}
2525

26-
return `:not(${list})`;
26+
return list;
2727
}

plugins/postcss-cascade-layers/test/anon-layer.expect.css

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ target:not(#\#) {
77
color: orange;
88
}
99

10-
target:not(#\##\#) {
10+
target:not(#\#):not(#\#) {
1111
color: yellow;
1212
}
1313

14-
target:not(#\##\##\#) {
14+
target:not(#\#):not(#\#):not(#\#) {
1515
color: green;
1616
}
1717

18-
target:not(#\##\##\##\#) {
18+
target:not(#\#):not(#\#):not(#\#):not(#\#) {
1919
color: purple;
2020
}

plugins/postcss-cascade-layers/test/atrules.expect.css

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
system: extends three;
1616
}
1717

18-
#target:not(#\##\##\##\##\##\##\##\#) {
18+
#target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
1919
animation: anim 1s paused;
2020
}
2121

2222
@keyframes anim {
2323
from { background-color: green; }
2424
}
2525

26-
#target:not(#\##\##\##\##\##\##\##\#)::before {
26+
#target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before {
2727
content: counter(dont-care, custom-counter-style);
2828
}
2929

plugins/postcss-cascade-layers/test/basic.expect.css

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
color: red;
44
}
55

6-
#foo #bar target:not(#\##\##\#)::before {
6+
#foo #bar target:not(#\#):not(#\#):not(#\#)::before {
77
color: green;
88
}
99

10-
target:not(#\##\##\##\##\##\#) {
10+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
1111
color: purple;
1212
}
1313

14-
target:not(#\##\##\##\##\##\#):before {
14+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):before {
1515
color: pink;
1616
}

plugins/postcss-cascade-layers/test/important.expect.css

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
background-color: blue;
1616
}
1717

18-
.foo:not(#\##\#) {
18+
.foo:not(#\#):not(#\#) {
1919
color: pink !important;
2020
}
2121

2222
.foo {
2323
background-color: pink;
2424
}
2525

26-
.bar:not(#\##\#) {
26+
.bar:not(#\#):not(#\#) {
2727
color: green !important;
2828
}
2929

@@ -35,14 +35,14 @@
3535
color: orange !important;
3636
}
3737

38-
.foo:not(#\##\#) {
38+
.foo:not(#\#):not(#\#) {
3939
background-color: orange;
4040
}
4141

4242
.bar {
4343
color: purple !important;
4444
}
4545

46-
.bar:not(#\##\#) {
46+
.bar:not(#\#):not(#\#) {
4747
background-color: green;
4848
}

plugins/postcss-cascade-layers/test/nested-complex.expect.css

+7-7
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616
}
1717

1818
@media screen {
19-
target:not(#\##\##\##\##\##\##\#) {
19+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
2020
layered: no;
2121
order: 3;
2222
}
2323
}
2424

2525
@media screen {
26-
target:not(#\##\##\##\##\#) {
26+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
2727
order: 6;
2828
}
2929

3030
@media screen {
31-
target:not(#\##\##\##\##\#) {
31+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
3232
order: 7;
3333
}
3434
}
@@ -37,12 +37,12 @@
3737
@media screen {
3838

3939
@media screen {
40-
target:not(#\##\##\#) {
40+
target:not(#\#):not(#\#):not(#\#) {
4141
order: 8;
4242
}
4343

4444
@media screen {
45-
target:not(#\##\##\#) {
45+
target:not(#\#):not(#\#):not(#\#) {
4646
order: 9;
4747
}
4848
}
@@ -54,15 +54,15 @@
5454
@media screen {
5555

5656
@media screen {
57-
target:not(#\##\#) {
57+
target:not(#\#):not(#\#) {
5858
order: 10;
5959
}
6060
}
6161
}
6262
}
6363

6464
@media screen {
65-
target:not(#\##\##\##\##\##\##\#) {
65+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
6666
layered: no;
6767
order: 5;
6868
}

plugins/postcss-cascade-layers/test/nested.expect.css

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,31 +28,31 @@ i:not(#\#) {
2828
color: red;
2929
}
3030

31-
target:not(#\##\##\#) {
31+
target:not(#\#):not(#\#):not(#\#) {
3232
color: yellow;
3333
}
3434

35-
target:not(#\##\##\##\##\##\#) {
35+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
3636
color: yellow;
3737
}
3838

3939
@media (prefers-color-scheme: dark) {
40-
h1:not(#\##\##\##\##\##\##\#) {
40+
h1:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
4141
color: red;
4242
background: black;
4343
}
4444
}
4545

4646
@media (prefers-color-scheme: dark) {
47-
target:not(#\##\##\##\##\##\#) {
47+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
4848
color: lime;
4949
}
5050
}
5151

52-
target:not(#\##\##\##\##\##\##\##\#) {
52+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
5353
color: yellow;
5454
}
5555

56-
target:not(#\##\##\##\##\##\##\##\##\#) {
56+
target:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
5757
color: red;
5858
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
#foo:not(#\##\##\##\#) {
1+
#foo:not(#\#):not(#\#):not(#\#):not(#\#) {
22
bucket: 1;
33
}
44

55
#foo {
66
bucket: 2;
77
}
88

9-
#foo:not(#\##\#) {
9+
#foo:not(#\#):not(#\#) {
1010
bucket: 3;
1111
}

plugins/postcss-cascade-layers/test/specificity-buckets-b.expect.css

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
foo:not(#\##\##\##\##\##\##\##\#) {
1+
foo:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#) {
22
bucket: 1;
33
}
44

@@ -18,18 +18,18 @@ foo {
1818
bucket: 2;
1919
}
2020

21-
foo:not(#\##\##\##\#) {
21+
foo:not(#\#):not(#\#):not(#\#):not(#\#) {
2222
bucket: 3;
2323
}
2424

25-
#foo:not(#\##\##\##\#) {
25+
#foo:not(#\#):not(#\#):not(#\#):not(#\#) {
2626
bucket: 3;
2727
}
2828

29-
#foo #fooz:not(#\##\##\##\#) {
29+
#foo #fooz:not(#\#):not(#\#):not(#\#):not(#\#) {
3030
bucket: 3;
3131
}
3232

33-
#foo #fooz #foos:not(#\##\##\##\#) {
33+
#foo #fooz #foos:not(#\#):not(#\#):not(#\#):not(#\#) {
3434
bucket: 3;
3535
}

plugins/postcss-cascade-layers/test/unlayered-styles.expect.css

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ target:not(#\#) {
77
color: green;
88
}
99

10-
a:not(#\##\#) {
10+
a:not(#\#):not(#\#) {
1111
color: purple;
1212
}
1313

14-
target:not(#\##\#) {
14+
target:not(#\#):not(#\#) {
1515
color: green;
1616
}
1717

18-
span h1:not(#\##\#), span p:not(#\##\#) {
18+
span h1:not(#\#):not(#\#), span p:not(#\#):not(#\#) {
1919
color:red;
2020
}

plugins/postcss-cascade-layers/test/warnings.expect.css

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
}
1414
}
1515

16-
.foo:not(#\##\#) {
16+
.foo:not(#\#):not(#\#) {
1717
color: pink;
1818
}
1919

plugins/postcss-cascade-layers/test/warnings.with-postcss-import.expect.css

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
color: revert-layer;
77
}/* [postcss-cascade-layers]: handling different layer orders in conditional rules is unsupported by this plugin and will cause style differences between browser versions. */
88
@media (min-width: 10px) {
9-
.foo:not(#\##\#) {
9+
.foo:not(#\#):not(#\#) {
1010
color: red;
1111
}
1212
}
13-
.foo:not(#\##\##\#) {
13+
.foo:not(#\#):not(#\#):not(#\#) {
1414
color: pink;
1515
}
16-
.foo:not(#\##\#) {
16+
.foo:not(#\#):not(#\#) {
1717
color: red;
1818
}

0 commit comments

Comments
 (0)