A new analysis by a seasoned frontend developer has laid bare the unavoidable bad parts of CSS, sparking fresh debate about the language's core design. The piece argues that certain fundamental issues with cascading style sheets are not fixable through new features or polyfills. Developers must instead accept these limitations or seek alternative approaches.

The Core Complaints

The article zeroes in on several long-standing pain points. The global namespace for selectors remains a major source of conflicts, even with modern tools like CSS Modules. Inheritance rules, particularly with the all property and shorthand properties, often produce unexpected results. Specificity wars continue to plague large projects, with developers resorting to !important as a crutch. The box model, while improved with box-sizing, still trips up newcomers because of its default content-box behavior.

Another key grievance is the lack of built-in scoping for styles. While Shadow DOM and @scope exist, they are not universally applied or understood. The reliance on preprocessors like Sass and Less to add variables, nesting and mixins is itself a testament to CSS's shortcomings. Every new CSS feature, from custom properties to container queries, adds power but also complexity and edge cases.

Why This Matters

For frontend developers, these issues translate directly to slower development cycles and harder maintenance. Teams spend hours debugging specificity chains or hunting down unintended style leakage. Frameworks like Tailwind CSS have gained massive adoption precisely because they sidestep many of these problems by using utility classes and a functional approach. The rise of CSS-in-JS solutions also reflects a desire to escape the global namespace and inherit conflicts.

Beyond developer frustration, the practical impact affects end users indirectly. Bloated stylesheets, slower page rendering and inconsistent designs can harm user experience. Companies lose money when users abandon poorly styled sites. The web standards body, the CSS Working Group, has acknowledged many of these issues but progress is slow because backward compatibility is sacrosanct.

Industry Responses

The developer community has responded with a mix of resignation and innovation. Preprocessors remain popular but are now being challenged by native CSS features like custom properties and nesting (soon standard). Tools like PostCSS and Lightning CSS further patch gaps. On the structural side, component libraries and design systems enforce discipline by limiting global CSS usage.

Some experts argue that the industry should stop treating CSS as a standalone language and instead design workflows that accept its flaws. For instance, using a strict methodology like BEM or ITCSS can manage specificity. Others push for more radical shifts, such as adopting Web Components consistently to achieve style encapsulation by default.

Ultimately, the article serves as a necessary reality check. CSS is not going away, and its bad parts are not going to be magically fixed. The path forward is not waiting for a perfect CSS spec but rather building smarter practices around the tools that exist today.