css / csso

CSS minifier with structural optimizations
https://css.github.io/csso/csso.html
MIT License
3.75k stars 188 forks source link

calc() causes incorrect re-ordering #385

Open ThomasBrierley opened 6 years ago

ThomasBrierley commented 6 years ago

CSSO appears to treat properties with calc() in the value as separate:

/* input */
div {
    width: 0;
    width: calc(100px);
}
/* output */
div {
    width: 0;
    width: calc(100px)
}

Unfortunately this causes more than missed optimisation opportunities:

/* input */
div, .foo {
    height: 0;
    width: 0;
}
div {
    height: 0;
    width: calc(100px);
}
/* output */
div {
    width: calc(100px)
}
.foo, div {
    height: 0;
    width: 0
}

(The width property above relies on order-based precedence and so the output is not equivalent.)

Environment