From 8a99a3266335c19b1ce415c858e2160a170329fa Mon Sep 17 00:00:00 2001 From: romainmenke Date: Mon, 16 May 2022 23:17:20 +0200 Subject: [PATCH] fix selector ordering with pseudo elements --- packages/selector-specificity/test/test.mjs | 5 ++ plugins/postcss-cascade-layers/.tape.mjs | 6 -- plugins/postcss-cascade-layers/CHANGELOG.md | 5 ++ .../src/compound-selector-order.ts | 11 ++-- plugins/postcss-cascade-layers/src/index.ts | 2 +- .../test/basic.color.expect.css | 12 ---- plugins/postcss-cascade-layers/test/basic.css | 4 ++ .../test/basic.expect.css | 4 ++ plugins/postcss-is-pseudo-class/CHANGELOG.md | 4 ++ .../compound-selector-order.ts | 13 +++-- .../postcss-is-pseudo-class/test/basic.css | 12 +++- .../test/basic.does-not-exist.expect.css | 44 +++++++++++++-- .../test/basic.expect.css | 44 +++++++++++++-- .../test/basic.oncomplex.warning.expect.css | 44 +++++++++++++-- .../test/basic.preserve.expect.css | 56 ++++++++++++++++--- plugins/postcss-nesting/CHANGELOG.md | 4 ++ .../compound-selector-order.js | 7 ++- plugins/postcss-nesting/test/basic.css | 6 ++ plugins/postcss-nesting/test/basic.expect.css | 4 ++ .../basic.no-is-pseudo-selector.expect.css | 4 ++ .../CHANGELOG.md | 4 ++ .../src/compound-selector-order.js | 13 +++-- .../test/basic.css | 3 +- .../test/basic.expect.css | 8 ++- .../test/basic.preserve-false.expect.css | 5 +- .../basic.sub-features-area-href.expect.css | 10 +++- 26 files changed, 259 insertions(+), 75 deletions(-) delete mode 100644 plugins/postcss-cascade-layers/test/basic.color.expect.css diff --git a/packages/selector-specificity/test/test.mjs b/packages/selector-specificity/test/test.mjs index 28ba56d1a..5f19d01fb 100644 --- a/packages/selector-specificity/test/test.mjs +++ b/packages/selector-specificity/test/test.mjs @@ -7,6 +7,11 @@ function calculate(selector) { return selectorSpecificity(selectorAST); } +assert.deepEqual(calculate(':before'), { a: 0, b: 0, c: 1 }); +assert.deepEqual(calculate('::before'), { a: 0, b: 0, c: 1 }); + +assert.deepEqual(calculate(':focus'), { a: 0, b: 1, c: 0 }); + assert.deepEqual(calculate(':is(a + a, b + b + b)'), { a: 0, b: 0, c: 3 }); assert.deepEqual(calculate(':is(.a + .a, .b + .b + .b)'), { a: 0, b: 3, c: 0 }); assert.deepEqual(calculate(':is(#a + #a, #b + #b + #b)'), { a: 3, b: 0, c: 0 }); diff --git a/plugins/postcss-cascade-layers/.tape.mjs b/plugins/postcss-cascade-layers/.tape.mjs index e411dab53..93055f3ab 100644 --- a/plugins/postcss-cascade-layers/.tape.mjs +++ b/plugins/postcss-cascade-layers/.tape.mjs @@ -6,12 +6,6 @@ postcssTape(plugin)({ basic: { message: "supports basic usage", }, - 'basic:color': { - message: "supports { color: '' }", - options: { - color: 'purple' - } - }, atrules: { message: "supports @keyframes usage", }, diff --git a/plugins/postcss-cascade-layers/CHANGELOG.md b/plugins/postcss-cascade-layers/CHANGELOG.md index ae31948f4..e30e3e3f1 100644 --- a/plugins/postcss-cascade-layers/CHANGELOG.md +++ b/plugins/postcss-cascade-layers/CHANGELOG.md @@ -1,5 +1,10 @@ # Changes to PostCSS Cascade Layers +### Unreleased + + - Process CSS after most other plugins to ensure correct analysis and transformation of sugary CSS. + - Fix selector order with `:before` and other pseudo elements. + ### 1.0.0 (May 12, 2022) - Initial version diff --git a/plugins/postcss-cascade-layers/src/compound-selector-order.ts b/plugins/postcss-cascade-layers/src/compound-selector-order.ts index de8ba5744..829442828 100644 --- a/plugins/postcss-cascade-layers/src/compound-selector-order.ts +++ b/plugins/postcss-cascade-layers/src/compound-selector-order.ts @@ -47,18 +47,18 @@ export function sortCompoundSelector(node) { node.nodes.sort((a, b) => { if (a.type === 'selector' && b.type === 'selector' && a.nodes.length && b.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } if (a.type === 'selector' && a.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b, b.type); } if (b.type === 'selector' && b.nodes.length) { - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b, b.type); }); } @@ -67,9 +67,6 @@ function selectorTypeOrder(selector, type) { return selectorTypeOrderIndex.pseudoElement; } - if (type === 'pseudo' && selector && selector.indexOf('::') === 0) { - return selectorTypeOrderIndex.pseudoElement; - } return selectorTypeOrderIndex[type]; } diff --git a/plugins/postcss-cascade-layers/src/index.ts b/plugins/postcss-cascade-layers/src/index.ts index cb8fc2178..842bff14a 100644 --- a/plugins/postcss-cascade-layers/src/index.ts +++ b/plugins/postcss-cascade-layers/src/index.ts @@ -22,7 +22,7 @@ const creator: PluginCreator = (opts?: pluginOptions) => { return { postcssPlugin: 'postcss-cascade-layers', - Once(root: Container, { result }: { result: Result }) { + OnceExit(root: Container, { result }: { result: Result }) { // Warnings if (options.onRevertLayerKeyword) { diff --git a/plugins/postcss-cascade-layers/test/basic.color.expect.css b/plugins/postcss-cascade-layers/test/basic.color.expect.css deleted file mode 100644 index 2f7e5f132..000000000 --- a/plugins/postcss-cascade-layers/test/basic.color.expect.css +++ /dev/null @@ -1,12 +0,0 @@ - - #target { - color: red; - } - -#foo #bar target:not(#\##\##\#)::before { - color: green; - } - -target:not(#\##\##\##\##\##\#) { - color: purple; -} diff --git a/plugins/postcss-cascade-layers/test/basic.css b/plugins/postcss-cascade-layers/test/basic.css index 3aa2811c0..2da33b62a 100644 --- a/plugins/postcss-cascade-layers/test/basic.css +++ b/plugins/postcss-cascade-layers/test/basic.css @@ -13,3 +13,7 @@ target { color: purple; } + +target:before { + color: pink; +} diff --git a/plugins/postcss-cascade-layers/test/basic.expect.css b/plugins/postcss-cascade-layers/test/basic.expect.css index 2f7e5f132..f803d2821 100644 --- a/plugins/postcss-cascade-layers/test/basic.expect.css +++ b/plugins/postcss-cascade-layers/test/basic.expect.css @@ -10,3 +10,7 @@ target:not(#\##\##\##\##\##\#) { color: purple; } + +target:not(#\##\##\##\##\##\#):before { + color: pink; +} diff --git a/plugins/postcss-is-pseudo-class/CHANGELOG.md b/plugins/postcss-is-pseudo-class/CHANGELOG.md index 4dc7c8ea4..78c911808 100644 --- a/plugins/postcss-is-pseudo-class/CHANGELOG.md +++ b/plugins/postcss-is-pseudo-class/CHANGELOG.md @@ -1,5 +1,9 @@ # Changes to PostCSS Is Pseudo Class +### Unreleased + + - Fix selector order with `:before` and other pseudo elements. + ### 2.0.3 (May 11, 2022) - Use `@csstools/selector-specificity` for specificity calculations. diff --git a/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts b/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts index b41a7ac83..74ae1cd38 100644 --- a/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts +++ b/plugins/postcss-is-pseudo-class/src/split-selectors/compound-selector-order.ts @@ -47,25 +47,26 @@ export function sortCompoundSelector(node) { node.nodes.sort((a, b) => { if (a.type === 'selector' && b.type === 'selector' && a.nodes.length && b.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } if (a.type === 'selector' && a.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b, b.type); } if (b.type === 'selector' && b.nodes.length) { - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b, b.type); }); } function selectorTypeOrder(selector, type) { - if (type === 'pseudo' && selector && selector.indexOf('::') === 0) { - return selectorTypeOrderIndex['pseudoElement']; + if (parser.isPseudoElement(selector)) { + return selectorTypeOrderIndex.pseudoElement; } + return selectorTypeOrderIndex[type]; } diff --git a/plugins/postcss-is-pseudo-class/test/basic.css b/plugins/postcss-is-pseudo-class/test/basic.css index d4be95327..751168071 100644 --- a/plugins/postcss-is-pseudo-class/test/basic.css +++ b/plugins/postcss-is-pseudo-class/test/basic.css @@ -102,10 +102,18 @@ foo[baz=":is(.some, .other)"], .ok { order: 26; } -:is(.bar, .foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi)) { +:is(a, button):is(:hover:before, :focus) { order: 27; } -:is(::after, .foo):is(:hover, :focus) { +:is(a, button):is(:hover, :focus):before { order: 28; } + +:is(.bar, .foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi)) { + order: 29; +} + +:is(::after, .foo):is(:hover, :focus) { + order: 30; +} diff --git a/plugins/postcss-is-pseudo-class/test/basic.does-not-exist.expect.css b/plugins/postcss-is-pseudo-class/test/basic.does-not-exist.expect.css index 53095c137..5468d5d89 100644 --- a/plugins/postcss-is-pseudo-class/test/basic.does-not-exist.expect.css +++ b/plugins/postcss-is-pseudo-class/test/basic.does-not-exist.expect.css @@ -326,26 +326,58 @@ button:focus::before { order: 26; } -.bar:not(.something-random) { +a:hover:before { order: 27; } -.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { +a:focus:not(something-random) { order: 27; } -:not(.something-random):hover::after { +button:hover:before { + order: 27; +} + +button:focus:not(something-random) { + order: 27; +} + +a:hover:before { order: 28; } -:not(.something-random):focus::after { +a:focus:before { order: 28; } -.foo:hover { +button:hover:before { order: 28; } -.foo:focus { +button:focus:before { order: 28; } + +.bar:not(.something-random) { + order: 29; +} + +.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { + order: 29; +} + +:not(.something-random):hover::after { + order: 30; +} + +:not(.something-random):focus::after { + order: 30; +} + +.foo:hover { + order: 30; +} + +.foo:focus { + order: 30; +} diff --git a/plugins/postcss-is-pseudo-class/test/basic.expect.css b/plugins/postcss-is-pseudo-class/test/basic.expect.css index 2defc67b3..bcc948a24 100644 --- a/plugins/postcss-is-pseudo-class/test/basic.expect.css +++ b/plugins/postcss-is-pseudo-class/test/basic.expect.css @@ -326,26 +326,58 @@ button:focus::before { order: 26; } -.bar:not(.does-not-exist) { +a:hover:before { order: 27; } -.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { +a:focus:not(does-not-exist) { order: 27; } -:not(.does-not-exist):hover::after { +button:hover:before { + order: 27; +} + +button:focus:not(does-not-exist) { + order: 27; +} + +a:hover:before { order: 28; } -:not(.does-not-exist):focus::after { +a:focus:before { order: 28; } -.foo:hover { +button:hover:before { order: 28; } -.foo:focus { +button:focus:before { order: 28; } + +.bar:not(.does-not-exist) { + order: 29; +} + +.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { + order: 29; +} + +:not(.does-not-exist):hover::after { + order: 30; +} + +:not(.does-not-exist):focus::after { + order: 30; +} + +.foo:hover { + order: 30; +} + +.foo:focus { + order: 30; +} diff --git a/plugins/postcss-is-pseudo-class/test/basic.oncomplex.warning.expect.css b/plugins/postcss-is-pseudo-class/test/basic.oncomplex.warning.expect.css index 2defc67b3..bcc948a24 100644 --- a/plugins/postcss-is-pseudo-class/test/basic.oncomplex.warning.expect.css +++ b/plugins/postcss-is-pseudo-class/test/basic.oncomplex.warning.expect.css @@ -326,26 +326,58 @@ button:focus::before { order: 26; } -.bar:not(.does-not-exist) { +a:hover:before { order: 27; } -.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { +a:focus:not(does-not-exist) { order: 27; } -:not(.does-not-exist):hover::after { +button:hover:before { + order: 27; +} + +button:focus:not(does-not-exist) { + order: 27; +} + +a:hover:before { order: 28; } -:not(.does-not-exist):focus::after { +a:focus:before { order: 28; } -.foo:hover { +button:hover:before { order: 28; } -.foo:focus { +button:focus:before { order: 28; } + +.bar:not(.does-not-exist) { + order: 29; +} + +.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { + order: 29; +} + +:not(.does-not-exist):hover::after { + order: 30; +} + +:not(.does-not-exist):focus::after { + order: 30; +} + +.foo:hover { + order: 30; +} + +.foo:focus { + order: 30; +} diff --git a/plugins/postcss-is-pseudo-class/test/basic.preserve.expect.css b/plugins/postcss-is-pseudo-class/test/basic.preserve.expect.css index 61108578b..4e411f892 100644 --- a/plugins/postcss-is-pseudo-class/test/basic.preserve.expect.css +++ b/plugins/postcss-is-pseudo-class/test/basic.preserve.expect.css @@ -398,34 +398,74 @@ button:focus::before { order: 26; } -.bar:not(.does-not-exist) { +a:hover:before { order: 27; } -.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { +a:focus:not(does-not-exist) { order: 27; } -:is(.bar, .foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi)) { +button:hover:before { order: 27; } -:not(.does-not-exist):hover::after { +button:focus:not(does-not-exist) { + order: 27; +} + +:is(a, button):is(:hover:before, :focus) { + order: 27; +} + +a:hover:before { order: 28; } -:not(.does-not-exist):focus::after { +a:focus:before { order: 28; } -.foo:hover { +button:hover:before { order: 28; } -.foo:focus { +button:focus:before { order: 28; } -:is(::after, .foo):is(:hover, :focus) { +:is(a, button):is(:hover, :focus):before { order: 28; } + +.bar:not(.does-not-exist) { + order: 29; +} + +.foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi) { + order: 29; +} + +:is(.bar, .foo:lang(ae, ar, arc, bcc, bqi, ckb, dv, fa, glk, he, ku, mzn, nqo, pnb, ps, sd, ug, ur, yi)) { + order: 29; +} + +:not(.does-not-exist):hover::after { + order: 30; +} + +:not(.does-not-exist):focus::after { + order: 30; +} + +.foo:hover { + order: 30; +} + +.foo:focus { + order: 30; +} + +:is(::after, .foo):is(:hover, :focus) { + order: 30; +} diff --git a/plugins/postcss-nesting/CHANGELOG.md b/plugins/postcss-nesting/CHANGELOG.md index a14b773c4..066506bff 100644 --- a/plugins/postcss-nesting/CHANGELOG.md +++ b/plugins/postcss-nesting/CHANGELOG.md @@ -1,5 +1,9 @@ # Changes to PostCSS Nesting +### Unreleased + + - Fix selector order with `:before` and other pseudo elements. + ### 10.1.5 (May 11, 2022) - Use `@csstools/selector-specificity` for specificity calculations. diff --git a/plugins/postcss-nesting/src/lib/merge-selectors/compound-selector-order.js b/plugins/postcss-nesting/src/lib/merge-selectors/compound-selector-order.js index 0bdd90b74..7c4b9d7f8 100644 --- a/plugins/postcss-nesting/src/lib/merge-selectors/compound-selector-order.js +++ b/plugins/postcss-nesting/src/lib/merge-selectors/compound-selector-order.js @@ -57,14 +57,15 @@ export function sortCompoundSelector(node) { // `h1.foo` node.nodes.sort((a, b) => { - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b, b.type); }); } function selectorTypeOrder(selector, type) { - if (type === 'pseudo' && selector && selector.indexOf('::') === 0) { - return selectorTypeOrderIndex['pseudoElement']; + if (parser.isPseudoElement(selector)) { + return selectorTypeOrderIndex.pseudoElement; } + return selectorTypeOrderIndex[type]; } diff --git a/plugins/postcss-nesting/test/basic.css b/plugins/postcss-nesting/test/basic.css index 51e81d415..a545bc9c8 100644 --- a/plugins/postcss-nesting/test/basic.css +++ b/plugins/postcss-nesting/test/basic.css @@ -149,3 +149,9 @@ a { order: 71; } } + +.pseudo-element { + @nest :before& { + order: 72; + } +} diff --git a/plugins/postcss-nesting/test/basic.expect.css b/plugins/postcss-nesting/test/basic.expect.css index e154803d3..33d49b310 100644 --- a/plugins/postcss-nesting/test/basic.expect.css +++ b/plugins/postcss-nesting/test/basic.expect.css @@ -156,3 +156,7 @@ a b[a="a&b"] { .pseudo-element::before { order: 71 } + +.pseudo-element:before { + order: 72 +} diff --git a/plugins/postcss-nesting/test/basic.no-is-pseudo-selector.expect.css b/plugins/postcss-nesting/test/basic.no-is-pseudo-selector.expect.css index b1cf328ba..bab872216 100644 --- a/plugins/postcss-nesting/test/basic.no-is-pseudo-selector.expect.css +++ b/plugins/postcss-nesting/test/basic.no-is-pseudo-selector.expect.css @@ -156,3 +156,7 @@ a b[a="a&b"] { .pseudo-element::before { order: 71 } + +.pseudo-element:before { + order: 72 +} diff --git a/plugins/postcss-pseudo-class-any-link/CHANGELOG.md b/plugins/postcss-pseudo-class-any-link/CHANGELOG.md index 7aa8dce6d..414a80de8 100644 --- a/plugins/postcss-pseudo-class-any-link/CHANGELOG.md +++ b/plugins/postcss-pseudo-class-any-link/CHANGELOG.md @@ -1,5 +1,9 @@ # Changes to PostCSS Pseudo Class Any Link +### Unreleased + + - Fix selector order with `:before` and other pseudo elements. + ### 7.1.3 (May 6, 2022) - Improve handling of `` fallbacks for IE and Edge. diff --git a/plugins/postcss-pseudo-class-any-link/src/compound-selector-order.js b/plugins/postcss-pseudo-class-any-link/src/compound-selector-order.js index b41a7ac83..74ae1cd38 100644 --- a/plugins/postcss-pseudo-class-any-link/src/compound-selector-order.js +++ b/plugins/postcss-pseudo-class-any-link/src/compound-selector-order.js @@ -47,25 +47,26 @@ export function sortCompoundSelector(node) { node.nodes.sort((a, b) => { if (a.type === 'selector' && b.type === 'selector' && a.nodes.length && b.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } if (a.type === 'selector' && a.nodes.length) { - return selectorTypeOrder(a.nodes[0].value, a.nodes[0].type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a.nodes[0], a.nodes[0].type) - selectorTypeOrder(b, b.type); } if (b.type === 'selector' && b.nodes.length) { - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.nodes[0].value, b.nodes[0].type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b.nodes[0], b.nodes[0].type); } - return selectorTypeOrder(a.value, a.type) - selectorTypeOrder(b.value, b.type); + return selectorTypeOrder(a, a.type) - selectorTypeOrder(b, b.type); }); } function selectorTypeOrder(selector, type) { - if (type === 'pseudo' && selector && selector.indexOf('::') === 0) { - return selectorTypeOrderIndex['pseudoElement']; + if (parser.isPseudoElement(selector)) { + return selectorTypeOrderIndex.pseudoElement; } + return selectorTypeOrderIndex[type]; } diff --git a/plugins/postcss-pseudo-class-any-link/test/basic.css b/plugins/postcss-pseudo-class-any-link/test/basic.css index 037502612..498435a8d 100644 --- a/plugins/postcss-pseudo-class-any-link/test/basic.css +++ b/plugins/postcss-pseudo-class-any-link/test/basic.css @@ -27,7 +27,8 @@ ul a:any-link > span { order: 7; } -::before:any-link { +::before:any-link, +:before:any-link { order: 8; } diff --git a/plugins/postcss-pseudo-class-any-link/test/basic.expect.css b/plugins/postcss-pseudo-class-any-link/test/basic.expect.css index bef77bdf2..53e539010 100644 --- a/plugins/postcss-pseudo-class-any-link/test/basic.expect.css +++ b/plugins/postcss-pseudo-class-any-link/test/basic.expect.css @@ -54,11 +54,15 @@ ul a:any-link > span { order: 7; } -:link::before, :visited::before { +:link::before, +:visited::before, +:link:before, +:visited:before { order: 8; } -::before:any-link { +::before:any-link, +:before:any-link { order: 8; } diff --git a/plugins/postcss-pseudo-class-any-link/test/basic.preserve-false.expect.css b/plugins/postcss-pseudo-class-any-link/test/basic.preserve-false.expect.css index 895beed7b..e8b62cd59 100644 --- a/plugins/postcss-pseudo-class-any-link/test/basic.preserve-false.expect.css +++ b/plugins/postcss-pseudo-class-any-link/test/basic.preserve-false.expect.css @@ -29,7 +29,10 @@ ul a:visited > span { order: 7; } -:link::before, :visited::before { +:link::before, +:visited::before, +:link:before, +:visited:before { order: 8; } diff --git a/plugins/postcss-pseudo-class-any-link/test/basic.sub-features-area-href.expect.css b/plugins/postcss-pseudo-class-any-link/test/basic.sub-features-area-href.expect.css index 757d788da..569682072 100644 --- a/plugins/postcss-pseudo-class-any-link/test/basic.sub-features-area-href.expect.css +++ b/plugins/postcss-pseudo-class-any-link/test/basic.sub-features-area-href.expect.css @@ -55,11 +55,17 @@ ul a:any-link > span { order: 7; } -:link::before, :visited::before, area[href]::before { +:link::before, +:visited::before, +area[href]::before, +:link:before, +:visited:before, +area[href]:before { order: 8; } -::before:any-link { +::before:any-link, +:before:any-link { order: 8; }