- From: Xidorn Quan via GitHub <sysbot+gh@w3.org>
- Date: Thu, 05 Jul 2018 00:43:08 +0000
- To: public-css-archive@w3.org
upsuper has just created a new issue for https://github.com/w3c/csswg-drafts: == [css-nesting] Concern about combinatorial explosion == The most intuitive way to implement nesting rules is probably just expand them internally as their complete form, just like what preprocessors do nowadays. But this has a problem that it means the number of selectors to match can grow exponentially as the nesting get deeper. This is less a concern when it was handled by preprocessors, because authors would see the exponential result from the generated file. If they see a generated CSS sized hundreds of megabytes or even gigabytes, they know there is a problem. But with nesting rules, they can hand to browsers a CSS file with just a handful of kilobytes which can be expanded to millions of rules, that would be problematic. Consider something like ```css .a1, .a2 { &.b1, &.b2 { &.c1, &.c2 { &.d1, &.d2 { &.e1, &.e2 { &.f1, &.f2 { &.g1, &.g2 { &.h1, &.h2 { &.i1, &.i2 { &.j1, &.j2 { &.k1, &.k2 { &.l1, &.l2 { &.m1, &.m2 { &.n1, &.n2 { &.o1, &.o2 { &.p1, &.p2 { &.q1, &.q2 { &.r1, &.r2 { &.s1, &.s2 { &.t1, &.t2 { &.u1, &.u2 { &.v1, &.v2 { &.w1, &.w2 { &.x1, &.x2 { &.y1, &.y2 { &.z1, &.z2 { ``` It's only 300+ bytes, but can be expanded into 67M selectors. It's probably not good. Potential solutions includes: 1. restrict the maximum nesting levels (e.g. at most 3 levels are allowed) 2. allow only a single complex selector, rather than a list in nested rules Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2881 using your GitHub account
Received on Thursday, 5 July 2018 00:43:10 UTC