<story><title>Incomplete List of Mistakes in the Design of CSS</title><url>https://wiki.csswg.org/ideas/mistakes</url></story><parent_chain></parent_chain><comment><author>inopinatus</author><text>This is a somewhat superficial list that omits discussing the fundamental idea behind CSS, viz. the semantic model; from which everything else is, directly or otherwise, a consequence.&lt;p&gt;Two decades ago I was overjoyed to discover that Scheme was finally going to have a useful application beyond illustrating SICP and writing koans to amuse myself, because DSSSL was on the cusp of evolving into the last document styling language anyone would ever need.&lt;p&gt;Unfortunately following an incident with a broken Lisp machine, a liquid lunch, and an unlicensed particle accelerator, I became trapped in a parallel universe where the HTML ERB anointed CSS by mistake during a drunken night out in Oslo.&lt;p&gt;The primordial concept of CSS (best revealed by H.W.Lie&amp;#x27;s thesis IMO[1]) was to create a rich and versatile and (crucially) &lt;i&gt;non-Turing-complete&lt;/i&gt; set of structural selectors in lieu of DSSSL&amp;#x27;s recursive expressions, and to allow styles to overlay one another (the &amp;quot;cascade&amp;quot;); two design choices that only by the application of gallons of irony can explain why most web pages are composed of a bunch of nested DIV elements with hashed IDs and overloaded semantic class attributes, and everyone compiles their assets into a static file.&lt;p&gt;[1] &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www.wiumlie.no&amp;#x2F;2006&amp;#x2F;phd&amp;#x2F;css.pdf&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;www.wiumlie.no&amp;#x2F;2006&amp;#x2F;phd&amp;#x2F;css.pdf&lt;/a&gt;</text></comment>
<story><title>Incomplete List of Mistakes in the Design of CSS</title><url>https://wiki.csswg.org/ideas/mistakes</url></story><parent_chain></parent_chain><comment><author>FrontAid</author><text>Many good points in there. One that I run into on a regular base and that can&amp;#x27;t be fixed right now:&lt;p&gt;&amp;gt; Selectors have terrible future-proofing. We should have split on top-level commas, and only ignored unknown&amp;#x2F;invalid segments, not the entire thing.&lt;p&gt;That forces you to duplicate declarations for backward-compatibility. For example, you can&amp;#x27;t combine those two selectors:&lt;p&gt;&lt;pre&gt;&lt;code&gt;    &amp;#x2F;* works *&amp;#x2F;
    :user-invalid {}
    :-moz-ui-invalid {}

    &amp;#x2F;* breaks *&amp;#x2F;
    :user-invalid, :-moz-ui-invalid {}
&lt;/code&gt;&lt;/pre&gt;
Somewhat related to the link: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jensimmons&amp;#x2F;cssremedy&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;jensimmons&amp;#x2F;cssremedy&lt;/a&gt; tries to &amp;quot;fix&amp;quot; some of those issues.</text></comment>