@@ -71,6 +71,8 @@ function extractElementSelector(selector) {
7171export default function resolveDefaultsAtRules ( { tailwindConfig } ) {
7272 return ( root ) => {
7373 let variableNodeMap = new Map ( )
74+
75+ /** @type {Set<import('postcss').AtRule> } */
7476 let universals = new Set ( )
7577
7678 root . walkAtRules ( 'defaults' , ( rule ) => {
@@ -90,31 +92,50 @@ export default function resolveDefaultsAtRules({ tailwindConfig }) {
9092 } )
9193
9294 for ( let universal of universals ) {
93- let selectors = new Set ( )
95+ /** @type {Map<string, Set<string>> } */
96+ let selectorGroups = new Map ( )
9497
9598 let rules = variableNodeMap . get ( universal . params ) ?? [ ]
9699
97100 for ( let rule of rules ) {
98101 for ( let selector of extractElementSelector ( rule . selector ) ) {
102+ // If selector contains a vendor prefix after a pseudo element or class,
103+ // we consider them separately because merging the declarations into
104+ // a single rule will cause browsers that do not understand the
105+ // vendor prefix to throw out the whole rule
106+ let selectorGroupName =
107+ selector . includes ( ':-' ) || selector . includes ( '::-' ) ? selector : '__DEFAULT__'
108+
109+ let selectors = selectorGroups . get ( selectorGroupName ) ?? new Set ( )
110+ selectorGroups . set ( selectorGroupName , selectors )
111+
99112 selectors . add ( selector )
100113 }
101114 }
102115
103- if ( selectors . size === 0 ) {
116+ if ( selectorGroups . size === 0 ) {
104117 universal . remove ( )
105118 continue
106119 }
107120
108- let universalRule = postcss . rule ( )
109-
110121 if ( flagEnabled ( tailwindConfig , 'optimizeUniversalDefaults' ) ) {
111- universalRule . selectors = [ ...selectors ]
122+ for ( let [ , selectors ] of selectorGroups ) {
123+ let universalRule = postcss . rule ( )
124+
125+ universalRule . selectors = [ ...selectors ]
126+
127+ universalRule . append ( universal . nodes . map ( ( node ) => node . clone ( ) ) )
128+ universal . before ( universalRule )
129+ }
112130 } else {
131+ let universalRule = postcss . rule ( )
132+
113133 universalRule . selectors = [ '*' , '::before' , '::after' ]
134+
135+ universalRule . append ( universal . nodes )
136+ universal . before ( universalRule )
114137 }
115138
116- universalRule . append ( universal . nodes )
117- universal . before ( universalRule )
118139 universal . remove ( )
119140 }
120141 }
0 commit comments