Imagine asking AI to build a set of product cards. The first version includes images, prices, and purchase buttons, arranged in three columns on desktop and one on mobile. Then the designer asks for a new brand color. The same card must also fit into a sidebar, while preserving keyboard focus and sold-out states.

The second change exposes the questions. Which blue means “brand,” and which means “information”? Should the card respond to the viewport or its container? When AI changes a button, does it also alter interaction states elsewhere?

I will use this hypothetical case throughout the article to ask: as AI reduces some of the cost of writing styles, what costs of modification, verification, and collaboration can frameworks still reduce? The history of CSS helps identify the responsibilities tools actually carry—and gives predictions about their future something concrete to be tested against.

CSS began with a question of who gets control

Håkon Wium Lie proposed CSS in 1994, with Bert Bos joining the effort afterward. CSS1 became a W3C Recommendation in 1996, followed by CSS2 in 1998. One of its central ideas was the cascade: authors, users, and browsers needed a way to reconcile their presentation requirements. W3C history

That origin matters today. A stylesheet can express an author's intentions, but the result still depends on available space, fonts, and user settings. Declaring a layout does not give the author exclusive control over every pixel.

Early browsers also implemented standards inconsistently. Writing valid CSS and obtaining acceptable results across browsers were separate achievements. Tools became valuable partly because they preserved compatibility knowledge: recurring differences could be handled through shared practices instead of being rediscovered on every project.

Then pages had to accommodate more screen sizes. Ethan Marcotte's 2010 account of responsive web design brought fluid grids, flexible images, and media queries together into a working method. Designers had to describe how layouts changed with conditions, making breakpoints and layout rules another shared asset to maintain. Original article, publication-date retrospective

CSS has therefore long involved two difficulties: how browsers interpret rules, and how people organize them. Progress on the first does not automatically solve the second.

Tools grew because teams needed shared decisions

As sites grew, repetition, naming, and the reach of a change became pressing concerns. Sass processes variables, mixins, modules, and calculations into CSS at build time, allowing teams to centralize brand settings and reusable rules. It adds compilation while also providing a way to organize source code. Sass guide

Bootstrap took shared decisions into the interface itself. It began as an internal style guide at Twitter and was released publicly in 2011; later versions incorporated responsive design, Flexbox, and custom properties. Adopting this kind of framework means adopting components and defaults, reducing the number of decisions each page has to make about buttons, forms, and grids. Bootstrap history

Another line of work focused on ownership. BEM uses block, element, and modifier naming conventions to express structure and variants. CSS Modules makes class and animation names local by default, with imports establishing dependencies. One relies on shared discipline; the other uses build tooling to help prevent name collisions. Both still leave teams to decide what belongs in a component and what should be shared.

Component development also brought CSS-in-JS. In styled-components, for example, styles can live near components and change with props. But this category does not have a single execution model. vanilla-extract describes styles in TypeScript and emits static CSS at build time. Authoring interfaces, generated output, and execution timing should be evaluated separately.

Utility-first approaches move composition into markup. With Tailwind, developers combine small classes, state variants, and design scales where those choices are used. Repeated combinations still need organization, and higher-level components may still carry the semantics.

A timeline shows how these responsibilities expanded. This is a map of overlapping approaches; tools from the same period can be used together.

Period and milestoneMain problemContinuing responsibility
1994–1998: CSS proposal, CSS1 and CSS2Separating presentation from content; reconciling competing style requirementsBrowser interpretation and the cascade
2000s: compatibility practices and preprocessingRepeated declarations, settings, and rule organizationShared source code and build processes
2010–2011: responsive design and Bootstrap's releaseMultiple screen sizes and consistent interface defaultsBreakpoints, components, and team conventions
2010s: naming, modules, and component approaches coexistGlobal effects, dependencies, and dynamic variantsStyle ownership and change boundaries
2020s: native capabilities expand; generation tools arriveApplying rules across more situationsSelection, constraints, and verification

The lesson for AI is that typing speed accounts for only part of a tool's value. Frameworks also preserve decisions so the next maintainer does not have to reason from scratch.

Three paper layouts—a single-column page, a card grid, and nested frames—sit together beside a ruler and reusable stencils.
Different tools preserve decisions at different levels. Layout, shared settings, and component boundaries can coexist; they are not successive stages of elimination.

Native CSS takes on more work; tools reassess their role

Flexbox distributes space along one dimension, while Grid describes rows and columns directly. As browsers take on more layout work, teams can reconsider how much grid abstraction they need.

Custom properties also change the division of work. Sass variables are processed during compilation; CSS custom properties remain in the output and can take different values according to the element and cascade. For a brand or theme switch, that distinction matters more than the shared word “variable.” The two can cooperate, but they cannot simply be substituted character for character. Sass's explanation

Native nesting reduces repeated selectors, but does not establish naming isolation. @layer can order cascade layers, but teams must still assign style sources to them. Origin, importance, layers, specificity, and order all matter; “the last rule always wins” is not an adequate model.

For our card, container size queries are particularly relevant. A card can change arrangement according to its container's width, allowing the main column and sidebar to behave differently in the same desktop viewport. The browser provides the expressive capability; the point at which the layout should change remains a design decision.

There is evidence of practical experience with these features. In the State of CSS 2026 All Features chart and export, 3,198 of 3,822 respondents to the :has() item reported having used it, displayed as 83.7%. For CSS Nesting, it was 2,695 of 3,820, displayed as 70.6%. Each denominator belongs to its own feature item, and the percentages follow the official display precision. They measure neither website coverage nor continuing use in production projects.

Modern CSS is not one version upgraded as a package. Modules evolve independently, and specification status must be distinguished from browser adoption. CSS Snapshot 2026 explicitly separates specification stability from implementation prevalence. Native @mixin should still be read as an experimental draft; my introduction to reusable rules covers it separately. It is not a ready-made guarantee for migrating away from Sass.

Frameworks also use native capabilities. Tailwind v4 adopts CSS-first configuration, native custom properties, and cascade layers, with built-in container query support. Browser improvements can reduce the work a tool must patch over while enabling a richer composition interface.

The survey's present: tools coexist, and AI has not taken over everything

State of CSS 2026 asks which CSS frameworks respondents use. 3,697 people answered. The chart below shows counts for selected options. Multiple answers were allowed, so the rows overlap and cannot be added into a market-share breakdown. Tools survey

CSS framework choices

State of CSS 2026 · Respondents 3,697

Tailwind CSS has the most respondents among the selected options; these choices can overlap.

Respondents
  • Tailwind CSS1,854
  • None1,042
  • Bootstrap982
  • shadcn/ui802
  • In-house / company framework705
View framework data
CSS framework choices · Respondents
OptionRespondents
Tailwind CSS1,854
None1,042
Bootstrap982
shadcn/ui802
In-house / company framework705

Multiple answers, selected options only. Bars show people, not mutually exclusive market shares.

Source

These choices operate at different levels. shadcn/ui and Tailwind can be used together, while “None” does not necessarily mean “no tools at all.” Survey categories help collect answers; architectural analysis still needs to distinguish style generation, interactive components, and code distribution.

The same survey's CSS AI Code Generation item asks what proportion of a respondent's CSS is AI-generated. Among 3,732 respondents, the officially displayed median is about 13%. 980 people answered 0%, or approximately 26.3% of those answering the item. This median describes individuals' reported proportions; it cannot estimate the share of all CSS worldwide produced by AI.

Share of CSS generated by AI

State of CSS 2026 · Respondents 3,732

Responses cluster at lower generation shares. Each row labels a self-reported share; bars count respondents.

Respondents
  • 0%980
  • 12.5%941
  • 25%562
  • 37.5%206
  • 50%322
  • 62.5%157
  • 75%312
  • 87.5%188
  • 100%64
View AI generation data
Share of CSS generated by AI · Respondents
AI-generated shareRespondents
0%980
12.5%941
25%562
37.5%206
50%322
62.5%157
75%312
87.5%188
100%64

Each row is a reported generation share; bar length is the number selecting it. The official median is about 13%, following the source’s display precision.

Source

This gives predictions a more precise starting point. AI has entered some workflows, but the survey does not establish that it performs most CSS work. Comments about generation quality are not controlled experiments and cannot establish that models are generally capable or incapable.

Likewise, the organizers' commentary connecting the absence of frameworks with LLMs is an interpretation. These data do not rule out project type, team preference, or improvements in native CSS. They cannot independently prove that AI caused a change in framework use. I use them to frame hypotheses, then examine the engineering conditions those hypotheses require.

The second change tests whether rules can be recognized

Return to the product card. This hypothetical first version only defines its border and padding:

.site-product-card {
  border: 1px solid #45687d;
  padding: 1.5rem;
}

Asked to “change the brand color,” this code does not reveal the border's role. Even if AI can search the entire project, it must decide whether identical color values elsewhere should change too. Equal values do not guarantee equal intent.

Suppose the requirement is now explicit: “Only featured products use a brand-colored border; other cards retain a neutral border.” We can state the shared rules and variant. The following replaces the first snippet. It assumes the card is inside .site-product-slot, featured cards have data-featured, and the brand attribute belongs to an ancestor:

:root {
  --border-neutral: #777777;
  --accent-brand: #45687d;
  --space-card: 1.5rem;
}
 
[data-brand="forest"] {
  --accent-brand: #406b57;
}
 
.site-product-slot {
  container: product / inline-size;
}
 
.site-product-card {
  display: grid;
  gap: 1rem;
  padding: var(--space-card);
  border: 1px solid var(--border-neutral);
}
 
.site-product-card[data-featured] {
  border-color: var(--accent-brand);
}
 
@container product (width >= 30rem) {
  .site-product-card {
    grid-template-columns: minmax(0, 1fr) 2fr;
  }
}

The card is assumed to have two direct children: an image area and a content area. 30rem is a condition chosen for this example. The query targets the outer container; narrow containers retain one column. This only demonstrates borders, spacing, and arrangement. Existing components remain responsible for button focus and sold-out behavior.

A component-based product interface can expose a narrower API. This is a hypothetical component API, not part of an existing package:

<ProductCard
  product={product}
  emphasis="featured"
  availability="sold-out"
/>

Those names are useful only if the implementation actually maps emphasis to styles and availability to copy and behavior. Types can restrict accepted values; they cannot prove that the sold-out button, keyboard interaction, and visual result are correct. Giving an arbitrary value a name reduces ambiguity only when that name expresses a stable shared decision.

Native CSS, utility classes, and component libraries can all carry these rules. AI needs more than syntax documentation: it needs to know which components exist, which combinations are valid, and how to check that a change stayed within its intended scope.

I therefore separate the costs. Writing may become cheaper; understanding existing rules still requires context; modification can affect shared sources; verification must cover themes, sizes, and states; maintenance includes upgrades and exceptions. This is an analytical framework, not a measured breakdown of time. If faster generation means slower review, teams still need to count the whole process.

A green swatch connects to branded cards in wide and narrow containers; a separate neutral gray card has no connection.
A conceptual view of change boundaries: brand roles determine shared styling, while containers determine layout conditions. Both need recognizable rules. This is not a rendering of the preceding code.

Three changes I will watch in 2026–2029

Shorter syntax alone may become a weaker reason to adopt a tool

If AI can reliably generate and modify native CSS, the typing time saved by additional syntax may no longer justify its learning and build costs. Sites with straightforward behavior and distinctive designs would have more reason to evaluate a smaller set of dependencies.

Yet utility-first tools also provide local composition, design scales, and team conventions. Established tools may make it easier for AI to follow existing examples. My prediction concerns the argument of “fewer characters to type”; it does not establish that Tailwind or any other framework must decline.

The signal to watch is whether teams can meet the same requirements and subsequent changes with fewer dependencies, equal quality, and less manual correction. If native approaches still demand more context and regression work, the prediction should be narrowed. A higher survey ranking for “None” is insufficient on its own.

Design constraints and verification may become more valuable

If generating ten card variants becomes easy, teams need to decide which ones are worth keeping. Tokens, valid variants, component-state examples, and regression checks can turn “what this should look like” and “what counts as correct” into reusable evidence.

This value is not exclusive to large frameworks. A small team may need clear CSS, a few components, and a checking process; a multi-brand product may need a fuller design system. In either case, rules must reflect actual needs and have someone maintaining them.

I would watch whether new interface work produces fewer design deviations and regressions, and whether review time falls. If rules multiply while exceptions become harder, or maintaining tests costs more than they save, heavy constraints may not pay off. AI may also help with verification, making lighter approaches sufficient.

Frameworks will pay more attention to how agents find and use them

shadcn MCP already provides an interface for browsing, searching, and installing registry components, including private sources. This demonstrates an effort to make context accessible; it does not guarantee that an agent will select or modify components correctly.

I expect tool authors to invest more in version-specific documentation, accessible source code, composition examples, and executable checks. Evaluation will include whether an agent can find the right version, recognize its limits, and integrate the result into an existing project.

Major ecosystems may benefit from default integrations, but better retrieval could also free smaller tools from dependence on a model's prior knowledge. Watch whether integration reduces API misuse, unnecessary component reimplementation, and manual rework. If general code understanding becomes sufficient, the advantage of a dedicated interface could shrink.

Choose the responsibilities you need to preserve

For engineers, understanding the cascade, sizing, and layout still helps locate the underlying rule when generated output goes wrong. For framework authors, the opportunity is to explain which changes their tools make easier and how the outcome can be verified.

Tool or practiceResponsibility worth preservingWhat to examine in a project
Native CSS and naming conventionsDirect expression of layout, themes, and shared rulesCan effects be traced? Are native capabilities sufficient?
Sass / build-time styling toolsModules, computation, and output managementDoes compilation still serve a purpose? What do upgrades cost?
CSS Modules / CSS-in-JSOrganization of names, dependencies, and component variantsEvaluate output, execution costs, and dynamic needs for the specific solution
Utility-first toolsLocal composition and shared design scalesAre changes consistent? Are arbitrary values and repeated combinations controlled?
Component libraries / design systemsBehavior, valid states, and design constraintsCan keyboard interaction, themes, sizes, upgrades, and exceptions be verified?

Existing projects also carry migration costs. Even when a new approach needs less code, test its benefit on a real change before replacing stable shared practices.

Back at the card, I want the second change to answer three questions clearly: where the brand color changes, who decides the sidebar layout, and how sold-out and focus states are checked. As long as those responsibilities must be preserved, communicated, and verified, tools have work to do. The useful competition is over who makes a change easier to understand—and easier to demonstrate that it meets the requirement.