CSS Minify Tests
Correctness tests for CSS minification tools. Each test provides a CSS input and a single canonical minified output. A tool passes if its output matches exactly.
Summary
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
| v5.3.3 | v0.0.22 | v8.0.1 | v5.0.5 | v0.28.0 | v1.32.0 | v1.99.0 | |
| anchor | 2 / 5 | 0 / 5 | 2 / 5 | 2 / 5 | 1 / 5 | 0 / 5 | 1 / 5 |
| charset | 1 / 2 | 0 / 2 | 1 / 2 | 1 / 2 | 0 / 2 | 1 / 2 | 1 / 2 |
| colors | 21 / 59 | 51 / 59 | 29 / 59 | 23 / 59 | 28 / 59 | 35 / 59 | 19 / 59 |
| comments | 4 / 5 | 2 / 5 | 3 / 5 | 3 / 5 | 3 / 5 | 2 / 5 | 3 / 5 |
| container | 2 / 6 | 2 / 6 | 1 / 6 | 1 / 6 | 1 / 6 | 4 / 6 | 0 / 6 |
| counter-style | 1 / 3 | 2 / 3 | 1 / 3 | 3 / 3 | 0 / 3 | 1 / 3 | 0 / 3 |
| duplicates | 15 / 19 | 5 / 19 | 10 / 19 | 15 / 19 | 10 / 19 | 13 / 19 | 5 / 19 |
| empty-rules | 4 / 4 | 0 / 4 | 4 / 4 | 4 / 4 | 4 / 4 | 4 / 4 | 4 / 4 |
| escaping | 3 / 12 | 12 / 12 | 4 / 12 | 4 / 12 | 11 / 12 | 11 / 12 | 10 / 12 |
| font-face | 3 / 6 | 2 / 6 | 4 / 6 | 3 / 6 | 4 / 6 | 5 / 6 | 2 / 6 |
| gradients | 0 / 5 | 0 / 5 | 0 / 5 | 0 / 5 | 1 / 5 | 4 / 5 | 0 / 5 |
| import | 0 / 5 | 4 / 5 | 0 / 5 | 0 / 5 | 4 / 5 | 0 / 5 | 0 / 5 |
| keyframes | 0 / 2 | 0 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 0 / 2 |
| layer | 1 / 2 | 0 / 2 | 0 / 2 | 0 / 2 | 0 / 2 | 2 / 2 | 0 / 2 |
| media | 1 / 9 | 1 / 9 | 1 / 9 | 1 / 9 | 1 / 9 | 8 / 9 | 1 / 9 |
| merging | 7 / 10 | 3 / 10 | 9 / 10 | 6 / 10 | 5 / 10 | 9 / 10 | 4 / 10 |
| nesting | 0 / 19 | 8 / 19 | 8 / 19 | 0 / 19 | 10 / 19 | 4 / 19 | 5 / 19 |
| page | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 2 / 4 |
| property | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 0 / 2 | 2 / 2 | 2 / 2 |
| scope | 1 / 3 | 0 / 3 | 1 / 3 | 1 / 3 | 2 / 3 | 1 / 3 | 0 / 3 |
| selectors | 10 / 15 | 3 / 15 | 11 / 15 | 6 / 15 | 9 / 15 | 14 / 15 | 4 / 15 |
| selectors-advanced | 2 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 |
| shorthands | 29 / 74 | 8 / 74 | 22 / 74 | 21 / 74 | 19 / 74 | 54 / 74 | 3 / 74 |
| starting-style | 0 / 2 | 2 / 2 | 1 / 2 | 2 / 2 | 2 / 2 | 1 / 2 | 2 / 2 |
| supports | 3 / 5 | 1 / 5 | 3 / 5 | 3 / 5 | 1 / 5 | 3 / 5 | 1 / 5 |
| transforms | 0 / 11 | 0 / 11 | 7 / 11 | 0 / 11 | 8 / 11 | 11 / 11 | 0 / 11 |
| values | 16 / 70 | 18 / 70 | 57 / 70 | 19 / 70 | 34 / 70 | 55 / 70 | 31 / 70 |
| whitespace | 13 / 19 | 15 / 19 | 14 / 19 | 16 / 19 | 13 / 19 | 15 / 19 | 12 / 19 |
| zero-units | 9 / 11 | 11 / 11 | 9 / 11 | 10 / 11 | 9 / 11 | 11 / 11 | 8 / 11 |
| Total | 153 / 402 | 158 / 402 | 212 / 402 | 154 / 402 | 188 / 402 | 278 / 402 | 123 / 402 |
| Total (%) | 38.05% | 39.3% | 52.73% | 38.3% | 46.76% | 69.15% | 30.59% |
Historical Trends
Pass rate over time across 24 recorded runs.
anchor
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
position-area center center shortens to center
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
position-area drops default center axis
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
@position-try equivalent to flip-block tacticA Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Empty @position-try removalAn empty Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Unresolved position-try-fallbacks must be retained
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 2 / 5 | 0 / 5 | 2 / 5 | 2 / 5 | 1 / 5 | 0 / 5 | 1 / 5 |
charset
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@charset removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Duplicate @charset removalOnly the first @charset declaration is meaningful; subsequent @charset rules are dropped. Uses two non-UTF-8 charsets to avoid special-casing UTF-8 removal. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 1 / 2 | 0 / 2 | 1 / 2 | 1 / 2 | 0 / 2 | 1 / 2 | 1 / 2 |
colors
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Hex shortening
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Hex to named color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
rgb() to named color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
rgba() with alpha=1Fully opaque Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
rgb() to named color (non-trivial)
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Hex shortening (non-white)
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
RGBA to hex alpha notation
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
hsl() to named color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
rgba() zero alpha to short hex
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
HWB to shorter representation
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Named color to shorter hex
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
RGB to named color (olive)
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
HSL to named color (green)
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Uppercase hex to lowercase shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
Modern rgb() with alpha to 8-digit hex
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
Modern rgb() with alpha 1 to named colorThe modern space-separated Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
Modern hsl() with alpha to 8-digit hex
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
color-mix() with known colors flattened to named color
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
color-mix() default percentages flattened to named colorWhen Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0020
| |||||||
Details
Static relative color syntax resolves to plain color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0021
| |||||||
Details
rgb() none keyword resolves to 0 outside interpolation
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0022
| |||||||
Details
8-digit hex with non-repeating alpha must not shorten
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0023
| |||||||
Details
Named color shorter than any hex equivalent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0024
| |||||||
Details
color-mix with none channel uses the other color's valueIn interpolation contexts like Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0025
| |||||||
Details
currentColor must not be resolved
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0026
| |||||||
Details
oklch() numeric minification
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0027
| |||||||
Details
oklab() rounding: out-of-gamut colours stay in native space
In-gamut oklab colours may be minified to hex if the hex form is shorter. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0028
| |||||||
Details
color-mix identity resolves to the color itself
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0029
| |||||||
Details
color-mix in oklch resolved to oklch value
For a lot more detail on rounding, read Too Much Color. Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0030
| |||||||
Details
display-p3 color must not be converted to sRGB
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0031
| |||||||
Details
color-mix with var(): minify literal color argument
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0032
| |||||||
Details
color-mix with var(): minify hsl to named color
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0033
| |||||||
Details
color-mix: elide default oklab interpolation spacePer CSS Color 5, Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0034
| |||||||
Details
Named color to hex enables space elision
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0035
| ERR | ||||||
Details
Out-of-gamut display-p3 color must not be clamped
Additionally Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0036
| |||||||
Details
color-mix() with 100% first color eliminates to that color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0037
| |||||||
Details
color-mix() with 0% first color eliminates to the second color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0038
| |||||||
Details
Redundant 50% percentages removed from color-mix()
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0039
| |||||||
Details
Redundant "shorter hue" removed from color-mix()
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0040
| |||||||
Details
Inner colors minified inside color-mix()
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0041
| |||||||
Details
color-mix() with 0% second color eliminates to the first color
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0042
| |||||||
Details
color-mix() percentages below 100% produce semi-transparent result
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0043
| |||||||
Details
color-mix() with percentages summing over 100% must normalize
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0044
| |||||||
Details
color-mix() in oklch resolved to oklch() when out of sRGB gamut
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0045
| |||||||
Details
Fractional sRGB channels round to integers
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0046
| |||||||
Details
oklch/oklab excess precision rounds to 3 decimal placesoklch and oklab use a 0-1 lightness scale and small chroma/a/b ranges. dEOk JND
is 0.02, so 3dp (0.001) on L/C/a/b gives two orders of magnitude headroom.
Hue at 1dp (0.1 deg) contributes ~0.0003 dEOk - effectively zero. A minifier
can round e.g. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0047
| |||||||
Details
lch/lab excess precision rounds to 1 decimal placeCIE LCH and Lab use a 0-100 lightness scale, chroma up to ~150, and a/b axes
of roughly -128 to 128. dE00 JND is 2.0. At 0dp (integers) the worst-case
error is already sub-JND for L/C/a/b, but lch chroma at 0dp can hit ~0.5 dE00.
1dp gives two orders of magnitude headroom (worst-case ~0.05 dE00 for all
channels). A minifier can round e.g. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0048
| |||||||
Details
color(srgb-linear) excess precision rounds to 4 decimal placessRGB-linear channels are in the 0–1 range. Unlike other 0–1 colour spaces which use 3dp, srgb-linear needs 4dp because its linear transfer function amplifies rounding errors for near-black values at 3dp. Alpha is 0–1, so 3dp applies. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0049
| |||||||
Details
color(display-p3) excess precision rounds to 3 decimal placesDisplay P3 channels are in the 0–1 range. 3dp is well below the perceptual JND and provides sufficient headroom for chained colour operations. Alpha is 0–1, so 3dp applies there too. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0050
| |||||||
Details
color(a98-rgb) excess precision rounds to 3 decimal placesA98 RGB channels are in the 0–1 range. 3dp is well below the perceptual JND. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0051
| |||||||
Details
color(prophoto-rgb) excess precision rounds to 3 decimal placesProPhoto RGB channels are in the 0–1 range. 3dp is well below the perceptual JND. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0052
| |||||||
Details
color(rec2020) excess precision rounds to 3 decimal placesRec. 2020 channels are in the 0–1 range. 3dp is well below the perceptual JND. Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0053
| |||||||
Details
color(xyz-d65) excess precision rounds to 4 decimal placesXYZ D65 channels in CSS Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0054
| |||||||
Details
color(xyz-d50) excess precision rounds to 4 decimal placesXYZ D50 channels in CSS Both colours here are out-of-gamut for sRGB, so they stay in their native colour space. In-gamut colours may be minified to hex. For a lot more detail on this, read Too Much Color. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0055
| |||||||
Details
In-gamut oklab colour is minified to hex
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0056
| |||||||
Details
In-gamut display-p3 colour is minified to shortest sRGB form
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0057
| |||||||
Details
Named colors as quoted stringsWhen a quoted string contains a named color ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0058
| |||||||
Details
Hex colors as quoted stringsWhen a quoted string contains a long form hex value ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0059
| |||||||
Details
URL strings containing color namesWhen a URL path string contains a color name, it should not be minified to a hex value. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 21 / 59 | 51 / 59 | 29 / 59 | 23 / 59 | 28 / 59 | 35 / 59 | 19 / 59 |
container
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@container whitespace removalRemove whitespace inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Empty @container removalAn Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Container style query whitespace
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Convert min-width to range syntax in @container
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Convert max-width to range syntax in @container
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Named container with min-width to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 2 / 6 | 2 / 6 | 1 / 6 | 1 / 6 | 1 / 6 | 4 / 6 | 0 / 6 |
counter-style
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@counter-style whitespace removalBasic whitespace minification inside a Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Empty @counter-style removalAn empty Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Quoted symbols must preserve quotes
The whitespace between quotes can be removed for a very slight improvement in compression. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 1 / 3 | 2 / 3 | 1 / 3 | 3 / 3 | 0 / 3 | 1 / 3 | 0 / 3 |
duplicates
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Duplicate declaration removalWhen a property is declared twice in the same rule, the last value wins. The earlier duplicate should be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Duplicate rule removalWhen two adjacent rules share the same selector and the later one completely overrides the earlier, the earlier rule can be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Duplicate rule removal with intervening ruleWhen a later rule completely overrides an earlier rule with the same selector, the earlier rule should be removed even with other rules between them. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Duplicate selector removal within a ruleDuplicate selectors in a selector list should be deduplicated. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Duplicate properties with env() fallback must be preservedThe plain Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Duplicate declaration removal with !importantWhen a property is declared with Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Entirely identical rule removalWhen two rules have the same selector and identical declarations, the duplicate rule is fully redundant and should be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Vendor-prefixed duplicate can be dropped when targeting modern browsersWith a modern browserslist target, Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Duplicate complex selectors in a selector listDuplicate compound/complex selectors within a selector list should be deduplicated, including selectors beyond simple type selectors. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Duplicate rules with reordered selectorsTwo rules with the same selectors in different order and identical declarations are equivalent. Remove the duplicate by normalizing selector order. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Flat and nested equivalent rules should dedup
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
Partial duplicate rule absorbed by supersetWhen a later rule for the same selector contains all declarations of an earlier rule plus additional ones, the earlier rule is redundant and can be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
!important wins on custom propertiesWhen a custom property has both a normal and Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Duplicate shorthand property override
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
UNSAFE: border-top before border-block must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
UNSAFE: margin-left before margin-inline-start must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
UNSAFE: padding-top before padding-block-start must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
UNSAFE: inset-block-start before top must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
Duplicate custom property removalWhen a property is declared twice containing custom property values in the same rule, the last value wins. The earlier duplicate should be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 15 / 19 | 5 / 19 | 10 / 19 | 15 / 19 | 10 / 19 | 13 / 19 | 5 / 19 |
empty-rules
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Empty rule removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Empty rule with commentA rule containing only a comment has no declarations and should be removed. Comments are stripped during minification so the rule body becomes empty. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Empty @media ruleAn Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Empty nested ruleAn empty nested rule ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 4 / 4 | 0 / 4 | 4 / 4 | 4 / 4 | 4 / 4 | 4 / 4 | 4 / 4 |
escaping
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Escape sequence resolution in identifiers
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Escape sequence resolution in strings
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Multiple consecutive hex escapes in class selector
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Hex escape for hyphen-minus in element name
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Hex escape in attribute selector name
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Digit-start identifier must keep escape
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Newline escape in string must be preserved
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Escape of special character in class name
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Hex escape in ID selector
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Hex escape in compound selector class
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Hex escape in standard property name
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
Hex escape in custom property name
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 3 / 12 | 12 / 12 | 4 / 12 | 4 / 12 | 11 / 12 | 11 / 12 | 10 / 12 |
font-face
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@font-face whitespace removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
font-family quote removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
url() quote removal in @font-face srcQuotes inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
format() string to keyword conversionThe Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
font-family quotes required for generic family keywordsUnquoting Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
unicode-range wildcard compression
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 3 / 6 | 2 / 6 | 4 / 6 | 3 / 6 | 4 / 6 | 5 / 6 | 2 / 6 |
gradients
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Default gradient direction omission
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
180deg gradient direction omission
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Gradient direction keyword to angle
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Redundant gradient stop positions
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Default radial-gradient shape and position
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 5 | 0 / 5 | 0 / 5 | 0 / 5 | 1 / 5 | 4 / 5 | 0 / 5 |
import
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
url() to string form in @import
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
@import with media query
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Unquoted url() to string form in @import
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
@import with layer keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
@import with layer() and supports()
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 5 | 4 / 5 | 0 / 5 | 0 / 5 | 4 / 5 | 0 / 5 | 0 / 5 |
keyframes
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@keyframes
|
|||||||
0002
| |||||||
Details
Keyframes from/to keyword optimization
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 2 | 0 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 0 / 2 |
layer
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Duplicate @layer statement removalDuplicate Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Non-adjacent @layer blocks can mergeLayer ordering is determined by first appearance of the layer name, not by
physical position of rule blocks. Two Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 1 / 2 | 0 / 2 | 0 / 2 | 0 / 2 | 0 / 2 | 2 / 2 | 0 / 2 |
media
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@media whitespace removalStrip whitespace inside a basic Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Nested @media must not be mergedNested Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Remove redundant 'all and' in @media
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Adjacent identical @media mergeAdjacent @media blocks with the same query should be merged into one. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Convert min-width to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Convert max-width to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Convert min-height to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Convert max-height to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Combined min/max-width to range syntax
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 1 / 9 | 1 / 9 | 1 / 9 | 1 / 9 | 1 / 9 | 8 / 9 | 1 / 9 |
merging
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Merge adjacent rules with same selectorAdjacent rules sharing the same selector can be merged into one rule with combined declarations. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Merge adjacent rules with same declarationsAdjacent rules with identical declarations can merge their selectors into a comma-separated list. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Merge adjacent @media with same queryAdjacent @media rules with the same query can be merged into a single @media block. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Remove empty @media ruleAn @media rule with no content should be removed entirely. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Partial merge of shared declarationsWhen adjacent rules share some declarations, the common part can be factored out. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Overridden @keyframes removalWhen two @keyframes share the same name, only the last definition is kept. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Merging rules is unsafe with the all propertyMerging Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Non-adjacent @media merge is unsafe due to cascadeMerging two identical Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Merging rules is unsafe with all:initialMerging Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Merging rules is unsafe with all:revert-layerMerging Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 7 / 10 | 3 / 10 | 9 / 10 | 6 / 10 | 5 / 10 | 9 / 10 | 4 / 10 |
nesting
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Basic nesting whitespace removalA nested style rule inside a parent rule should be minified in place, preserving the nesting structure while removing whitespace. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Nested & selector with pseudo-class
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Nested & with compound class selector
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Nested child combinator with implicit &
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Multi-level nestingThree levels of nesting ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Nested @media inside a style ruleA conditional Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Redundant & removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| ERR | ||||||
Details
Doubled & selector
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
& in non-initial position
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Introduce nesting to shorten repeated parent selectorsThree flat rules sharing Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Introduce nesting for pseudo-class
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
Introduce nesting for child combinator
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
Flatten descendant nesting with empty parentWhen a parent rule has no declarations of its own, the nested child can be
flattened into a single descendant selector. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Flatten child combinator nesting with empty parent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
Flatten next-sibling combinator nesting with empty parent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
Flatten subsequent-sibling combinator nesting with empty parent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
Nested rules with mixed combinators stay nestedWhen a parent has no own declarations but multiple nested children, keeping the nesting is shorter than flattening because the parent selector only appears once instead of being repeated for each child rule. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
Flatten &:pseudo from empty parent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
Duplicate nested rules should dedup and flattenTwo identical Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 19 | 8 / 19 | 8 / 19 | 0 / 19 | 10 / 19 | 4 / 19 | 5 / 19 |
page
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@page whitespace removalBasic whitespace removal in a Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Named @page pseudo-class
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Empty @page removalAn empty Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
@page margin at-rules
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 3 / 4 | 2 / 4 |
property
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@property whitespace removalRemove whitespace inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
@property descriptor preservationAll three descriptors ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 2 / 2 | 2 / 2 | 2 / 2 | 2 / 2 | 0 / 2 | 2 / 2 | 2 / 2 |
scope
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@scope whitespace removalBasic whitespace removal in Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
@scope with proximity limit
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Empty @scope removalAn empty Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 1 / 3 | 0 / 3 | 1 / 3 | 1 / 3 | 2 / 3 | 1 / 3 | 0 / 3 |
selectors
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
nth-child
|
|||||||
0002
| |||||||
Details
nth-child redundant +0 removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| ERR | ERR | |||||
Details
nth-child positive sign removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
nth-child zero-step simplification
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
nth-child(2n) preserved
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
nth-child(1) to first-child
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
nth-last-child(1) to last-child
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
:nth-child(1n) shorthand
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
:nth-of-type(1) to :first-of-type
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
:nth-last-of-type(1) to :last-of-type
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Double-colon to single-colon pseudo-element
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
Universal selector preservationThe Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
Redundant universal selector before ID
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Attribute selector quote removalQuotes around attribute values can be removed when the value is a valid identifier. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
::view-transition-group must keep double colon
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 10 / 15 | 3 / 15 | 11 / 15 | 6 / 15 | 9 / 15 | 14 / 15 | 4 / 15 |
selectors-advanced
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
:is() decomposition with equal-specificity selectors
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
:is() must not decompose with mixed specificity
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
:has() whitespace removalWhitespace inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
:where() whitespace removalWhitespace inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
input:not(:invalid) to input:validOn form elements Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
:not(:dir(ltr)) to :dir(rtl)Every element has exactly one directionality -- Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Double :not() cancellation
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
input:not(:enabled) to input:disabledOn form-associated elements Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
input:not(:required) to input:optionalOn form-associated elements Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
a:not(:link) to a:visitedOn hyperlink elements ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
:is(:link, :visited) to :any-link
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
:is() scoped :not(:required) to :optionalWhen Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
h1-h6 selector list to :heading
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 2 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 | 3 / 13 |
shorthands
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Margin 4-to-1 collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Margin 4-to-2 collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Margin 4-to-3 collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
background:none to background:0 0
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Color shortening and space removal before hash
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Inset shorthand collapse + zero-unit strip
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Padding 4-value to 1-value collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Overflow longhand to shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Gap longhand to shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Flex longhand to shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Outline longhand to shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
Border-radius longhand to shorthandAll four Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
Margin longhand to shorthandIndividual Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Text-decoration longhand to shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
Padding longhand to shorthandFour padding longhand properties collapse to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
Border longhand to shorthandAll 12 border longhand properties collapse to a single Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
Padding 4-to-2 value collapseWhen top equals bottom and right equals left, padding collapses from 4 values to 2. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
Padding 4-to-3 value collapseWhen left equals right, the 4th value can be dropped. Top/bottom differ so 3 values remain. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
Border-radius 4-to-2 value collapseborder-radius follows the same top-right-bottom-left collapsing rules as margin/padding. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0020
| |||||||
Details
Border-radius slash syntax collapseBoth horizontal and vertical radii have identical values across all 4 corners, each side collapses to 1 value. The Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0021
| |||||||
Details
Inset 4-to-2 value collapseThe Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0022
| |||||||
Details
Margin 2-to-1 value collapseWhen both values in a 2-value margin are identical, collapse to a single value. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0023
| |||||||
Details
place-items longhand merge (same value)When align-items and justify-items are the same, they merge into a single-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0024
| |||||||
Details
place-content longhand merge (same value)When align-content and justify-content are the same, they merge into a single-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0025
| |||||||
Details
place-self longhand merge (same value)When align-self and justify-self are the same, they merge into a single-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0026
| |||||||
Details
Gap longhand merge (different values)When row-gap and column-gap differ, they merge into a 2-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0027
| |||||||
Details
Columns longhand mergecolumn-width and column-count merge into the Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0028
| |||||||
Details
list-style longhand mergelist-style-type, list-style-position, and list-style-image merge into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0029
| |||||||
Details
Background longhand merge with defaultsBackground longhands merge into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0030
| |||||||
Details
Font longhand mergefont-style, font-weight, font-size, line-height, and font-family merge into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0031
| |||||||
Details
Transition longhand mergetransition-property, transition-duration, transition-timing-function, and transition-delay merge into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0032
| |||||||
Details
Animation longhand mergeAll 8 animation longhands merge into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0033
| |||||||
Details
Border default width omission
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0034
| |||||||
Details
Background shorthand default omissionDefault background-position (0% 0%), background-repeat (repeat), and background-attachment (scroll) can be omitted from the Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0035
| |||||||
Details
Font shorthand default value omission
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0036
| |||||||
Details
Outline shorthand color optimizationColor values within shorthands like Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0037
| |||||||
Details
Margin with auto values collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0038
| |||||||
Details
border-color 4-to-1 value collapseborder-color follows the same top-right-bottom-left collapsing rules as margin/padding. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0039
| |||||||
Details
Gap 2-to-1 value collapseWhen row-gap and column-gap are the same in a 2-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0040
| |||||||
Details
Overflow 2-to-1 value collapseWhen overflow-x and overflow-y are the same in a 2-value Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0041
| |||||||
Details
border shorthand must not clobber border-image (reorder required)border-image is declared before border longhands. A minifier collapsing the
longhands to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0042
| |||||||
Details
border longhands then border-image (safe ordering)Border longhands come before border-image. Collapsing longhands to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0043
| |||||||
Details
border shorthand intentionally resets border-imageDeclaring border-image then Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0044
| |||||||
Details
border longhands with border-image longhands (collapse both)Both border and border-image expressed as longhands. Minifier should collapse
each group into its respective shorthand, with Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0045
| |||||||
Details
font shorthand must not clobber font-variant-ligatures (reorder required)font-variant-ligatures is declared before font longhands. A minifier collapsing
the longhands to Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0046
| |||||||
Details
font longhands before font-feature-settings (safe ordering)Font longhands come before font-feature-settings. Collapsing longhands to Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0047
| |||||||
Details
font shorthand intentionally resets font-variant-numericDeclaring font-variant-numeric then Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0048
| |||||||
Details
font longhands with font-kerning longhand (collapse, preserve order)Font longhands and font-kerning are both expressed as longhands. Minifier should
collapse the font longhands into Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0049
| |||||||
Details
mask shorthand must not clobber mask-border (reorder required)mask-border is declared before mask longhands. A minifier collapsing the
longhands to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0050
| |||||||
Details
mask longhands before mask-border (safe ordering)Mask longhands come before mask-border. Collapsing longhands to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0051
| |||||||
Details
mask shorthand intentionally resets mask-borderDeclaring mask-border then Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0052
| |||||||
Details
font shorthand must not clobber font-variation-settings (reorder required)font-variation-settings is declared before font longhands. A minifier collapsing
the longhands to Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0053
| |||||||
Details
Padding longhand merge unsafe with var()Merging padding-top/right/bottom/left into Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0054
| |||||||
Details
Longhand before shorthand is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0055
| |||||||
Details
Border longhand merge unsafe with var()Merging Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0056
| |||||||
Details
Shorthand plus !important override for mixed importanceWhen one longhand has Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0057
| |||||||
Details
Padding longhand merge unsafe even with var() fallbackA valid fallback does not make merging safe. The fallback only triggers when the
property is undefined. If the property is defined with an invalid value (e.g.
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0058
| |||||||
Details
Padding longhand merge unsafe when var() fallback is unresolvableWhen Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0059
| |||||||
Details
Border longhand merge unsafe even with var() fallbackA valid fallback does not make merging safe. The fallback only triggers when the property is undefined. If the property is defined with an invalid value, the fallback is ignored and the entire shorthand declaration fails at computed value time. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0060
| |||||||
Details
Border longhand merge unsafe when any var() fallback is unresolvableIf even one Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0061
| |||||||
Details
Padding longhand merge safe with @property constraintWhen each custom property has an Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0062
| |||||||
Details
Border longhand merge safe with @property constraintWhen each custom property has an Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0063
| |||||||
Details
top/right/bottom/left to inset shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0064
| |||||||
Details
Logical longhands to margin-inline shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0065
| |||||||
Details
position-try-order + fallbacks to position-try shorthand
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0066
| |||||||
Details
border-top before border is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0067
| |||||||
Details
border-block-start before border-block is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0068
| |||||||
Details
padding-inline-start before padding-inline is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0069
| |||||||
Details
margin-top before margin is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0070
| |||||||
Details
border-top-width before border-width is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0071
| |||||||
Details
border-top-color before border-top is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0072
| |||||||
Details
inset-block-start before inset-block is dead code
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0073
| |||||||
Details
Transition shorthand default duration removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0074
| |||||||
Details
Zero flex-basis can be omitted
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 29 / 74 | 8 / 74 | 22 / 74 | 21 / 74 | 19 / 74 | 54 / 74 | 3 / 74 |
starting-style
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@starting-style whitespace removalBasic whitespace removal in Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
@starting-style with discrete animation must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 2 | 2 / 2 | 1 / 2 | 2 / 2 | 2 / 2 | 1 / 2 | 2 / 2 |
supports
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
@supports condition whitespaceSpaces inside the Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Remove empty @supports ruleAn @supports rule with no content should be removed entirely, like empty style rules. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Elide @supports for universally supported property
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Elide @supports with multiple inner rules
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
@supports not with unsupported property must be preserved
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 3 / 5 | 1 / 5 | 3 / 5 | 3 / 5 | 1 / 5 | 3 / 5 | 1 / 5 |
transforms
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
translate3d to translate
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
translate to translateY
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
scale with equal axes
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
rotateZ to rotate
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
scale3d to scale
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
rotate3d to rotateY
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
scale(x, 1) to scaleX
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
translate3d(0,0,z) to translateZWhen X and Y are zero, Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
rotate3d(1,0,0,a) to rotateXRotation around the X axis only simplifies to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
scale() percentage to number
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
scale property percentage to numberThe individual Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 0 / 11 | 0 / 11 | 7 / 11 | 0 / 11 | 8 / 11 | 11 / 11 | 0 / 11 |
values
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
font-weight bold to 700
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
font-weight normal to 400
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
url() quote removalQuotes inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Trailing zero removal in dimensions
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Redundant positive sign removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Leading zero padding removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
URL whitespace trimming
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Quote normalization
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
Milliseconds to seconds conversion
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
Absolute unit conversion to px
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Smart separator preservation in calc()Spaces around Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
var() custom property preservation
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
Gradient function whitespaceWhitespace inside Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
Nested calc() flattening and reduction
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
Calc constant folding
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
Calc addition folding
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
Calc partial reductionComplex calc expressions with compatible units are partially reduced: px terms are combined while percentage terms are preserved. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
Trailing zero removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
Grid template areas whitespace minificationExtra whitespace inside grid-template-areas strings is collapsed, and consecutive dots ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0020
| |||||||
Details
Background position center to percentage
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0021
| |||||||
Details
Calc division with irrational result must keep calc
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0022
| |||||||
Details
Multi-keyword display to single keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0023
| |||||||
Details
cubic-bezier to linear keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0024
| |||||||
Details
cubic-bezier to ease keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0025
| |||||||
Details
Two-value background-repeat collapse
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0026
| |||||||
Details
Two-value background-repeat to repeat-x
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0027
| |||||||
Details
Turn to degrees conversion
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0028
| |||||||
Details
min-width: initial to autoThe initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0029
| |||||||
Details
Border shorthand canonical order
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0030
| |||||||
Details
flex-flow canonical order
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0031
| |||||||
Details
Unquote font-family nameQuotes around font-family names can be removed when the name is a valid CSS identifier sequence. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0032
| |||||||
Details
Deduplicate font-family listDuplicate font names in a font-family list can be removed. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0033
| |||||||
Details
Multi-keyword display: inline flow-root to inline-block
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0034
| |||||||
Details
steps(1, start) to step-start keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0035
| |||||||
Details
background-position keywords to numeric
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0036
| |||||||
Details
cubic-bezier to ease-in keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0037
| |||||||
Details
cubic-bezier to ease-out keyword
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0038
| |||||||
Details
Two-value background-repeat to repeat-y
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0039
| |||||||
Details
Calc multiply by 1 (identity)Multiplying a value by 1 has no effect. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0040
| |||||||
Details
Calc add zero same unit (identity)Adding zero of the same unit has no effect. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0041
| |||||||
Details
Calc double negation elimination
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0042
| |||||||
Details
Calc double inversion eliminationDividing by a reciprocal cancels out. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0043
| |||||||
Details
Calc sum flattening across nested calc()Nested additions inside calc() are flattened into a single addition. Two nested calc() sums are merged and all px terms are combined: Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0044
| |||||||
Details
Calc product flattening with multiple numbersWhen a multiplication chain contains multiple plain numbers, they are multiplied together first. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0045
| |||||||
Details
Calc distribute multiplication over sumMultiplication distributes over addition. Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0046
| |||||||
Details
Calc combine like percentage termsTerms with the same unit are combined by adding their values. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0047
| |||||||
Details
Calc division of pure numbers
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0048
| |||||||
Details
Calc self-subtraction resolves to zero
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0049
| |||||||
Details
Calc multiply by zero
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0050
| |||||||
Details
Calc constant pi resolution
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0051
| |||||||
Details
Calc constant e resolution
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0052
| |||||||
Details
Resolve min() with all-known comparable valuesWhen all arguments to min() are known comparable values, the function can be fully resolved. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0053
| |||||||
Details
Calc canonicalize compatible length unitsCompatible units convert to canonical units: Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0054
| |||||||
Details
Calc single term unwrap
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0055
| |||||||
Details
Calc division folding dimension by number
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0056
| |||||||
Details
Calc combine like terms preserving incompatible units
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0057
| |||||||
Details
Custom property values must not be color-minifiedCustom property values may be read by JavaScript via Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0058
| |||||||
Details
Empty custom property declaration must not be discarded
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0059
| |||||||
Details
Unrecognized properties must not be removedA rule with unrecognized property names is syntactically valid CSS. Minifiers must not discard it -- unknown properties may be meaningful to other tools or future CSS specifications. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0060
| |||||||
Details
url() quotes required when URL contains parenthesesRemoving quotes from Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0061
| |||||||
Details
Empty content string must not be removed
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0062
| |||||||
Details
clamp() with identical arguments resolves to single valueWhen min, preferred, and max are all the same known value, Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0063
| |||||||
Details
max() with known values resolves to largestWhen all arguments to Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0064
| |||||||
Details
opacity: initial to 1The initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0065
| |||||||
Details
display: initial must not shortenThe initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0066
| |||||||
Details
z-index: initial to autoThe initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0067
| |||||||
Details
margin: initial to 0The initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0068
| |||||||
Details
background-color: initial must not shortenThe initial value of Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0069
| |||||||
Details
calc() zero with different unit must not be dropped
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0070
| |||||||
Details
Custom property value can be minified with @property constraintWhen Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 16 / 70 | 18 / 70 | 57 / 70 | 19 / 70 | 34 / 70 | 55 / 70 | 31 / 70 |
whitespace
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Basic whitespace removalRemove newlines, indentation, and spaces around braces and colons. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Inter-rule whitespaceBlank lines between rules must be collapsed. No separator is needed between Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Tab characters and multi-line valuesValues split across lines with tab indentation must collapse correctly. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Selector list whitespaceSpaces around commas in selector lists ( Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Trailing semicolon removalThe semicolon after the last declaration in a rule can be dropped. Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Consecutive semicolon removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
@media not -- space before media type required
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
@media -- space around
|
|||||||
0009
| |||||||
Details
@supports not -- space before ( required
Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
@supports -- space after
|
|||||||
0011
| |||||||
Details
calc() space around + operator requiredSpaces around Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0012
| |||||||
Details
calc() spaces around * and / are removableUnlike Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0013
| |||||||
Details
transform -- no space needed between adjacent functionsIn Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0014
| |||||||
Details
background -- no space needed between ) and keywordIn Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0015
| |||||||
Details
font shorthand -- no space needed around /In Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0016
| |||||||
Details
Descendant combinator -- space is the selector itselfIn Source
Expected
ValidateOutputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0017
| |||||||
Details
Space before hash token is removable
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0018
| |||||||
Details
Space before !important removable
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0019
| |||||||
Details
Space preservation around + inside clamp()Spaces around Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 13 / 19 | 15 / 19 | 14 / 19 | 16 / 19 | 13 / 19 | 15 / 19 | 12 / 19 |
zero-units
| test | clean-css | csskit | cssnano | csso | esbuild | lightningcss | sass |
|---|---|---|---|---|---|---|---|
0001
| |||||||
Details
Strip unit on zero length
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0002
| |||||||
Details
Keep unit on zero time
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0003
| |||||||
Details
Keep unit on zero percent
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0004
| |||||||
Details
Zero-unit strip in padding
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0005
| |||||||
Details
Leading zero removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0006
| |||||||
Details
Trailing zero removal
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0007
| |||||||
Details
Drop unit from zero-length flex-basis
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0008
| |||||||
Details
Keep unit on zero angle
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0009
| |||||||
Details
0% in keyframes must keep the percent signIn keyframe selectors, Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0010
| |||||||
Details
0fr must keep unitUnitless zero is invalid for Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
0011
| |||||||
Details
Preserve unit on zero-percentage flex-basis
Source
Expected
Outputsclean-css
csskit
cssnano
csso
esbuild
lightningcss
sass
|
|||||||
| Subtotal | 9 / 11 | 11 / 11 | 9 / 11 | 10 / 11 | 9 / 11 | 11 / 11 | 8 / 11 |
comments
0001Details
Basic comment removal
Standard
/* ... */comments should be stripped entirely.Source
Expected
Outputs
clean-css ✓
csskit ✓
cssnano ✓
csso ✓
esbuild ✓
lightningcss ✓
sass ✓
0002Details
Inline comment removal
A comment embedded within a declaration value (
color: /* inline */ red) must be removed without breaking the surrounding value.Source
Expected
Outputs
clean-css ✓
csskit ✓
cssnano ✓
csso ✓
esbuild ✓
lightningcss ✓
sass ✓
0003Details
Important comment preservation
Comments starting with
/*!are license/legal markers and must be preserved. Stripping them can cause legal compliance issues.Source
Expected
Outputs
clean-css ✓
csskit ✗
cssnano ✓
csso ✗
esbuild ✓
lightningcss ✗
sass ✓
0004Details
Comment in custom property value must be preserved
--bar: a/**/btokenizes asident:aident:bwith no whitespace between them. Replacing the comment with a space producesa bwhich is a different token sequence. This matters for@container style()queries matching against custom property values.Source
Expected
Outputs
clean-css ✓
csskit ✗
cssnano ✗
csso ✓
esbuild ✗
lightningcss ✗
sass ✗
0005Details
Comment in @container style query custom property must be preserved
@container style(--bar: a/**/b)uses a comment as a zero-width token separator. Replacing it with a space or removing it entirely changes the token sequence the query matches against, breaking the correspondence with the declaration--bar: a/**/b.Source
Expected
Outputs
clean-css ✗
csskit ✗
cssnano ✗
csso ✗
esbuild ✗
lightningcss ✗
sass ✗