Framework Comparison

A CSS framework is a set of decisions made for you: naming, specificity, theming, and browser support. The frameworks below embody genuinely different philosophies. Compare them on mechanism, not popularity — and learn raw CSS first, because every framework resolves down to it.

The landscape

Four philosophies

FrameworkMechanismBest fitLink
Bootstrap Prebuilt components + utilities Admins, dashboards, fast MVPs getbootstrap.com
Tailwind CSS Utility-first: thousands of single-purpose classes Custom design systems with strict tokens tailwindcss.com
Bulma Component classes, CSS-only (no JS) Simple marketing and documentation sites bulma.io
Foundation Enterprise component suite Teams with mature, legacy component patterns get.foundation

The real differences

  • Where styles live: Bootstrap and Bulma put them in component classes; Tailwind puts them in the markup as utility stacks. The first keeps templates clean and stylesheets coupled; the second keeps styles local and templates verbose.
  • Customization model: Bootstrap themes through Sass variables and CSS custom properties; Tailwind themes through a configuration file that generates classes; Bulma themes through Sass variables only.
  • JavaScript: Bulma ships none; Bootstrap ships optional behaviors (modals, dropdowns); Tailwind ships none but its ecosystem often pairs with component libraries that do.

Selection criteria

Five questions before adopting

  1. Delivery speed: how fast can a new developer ship a page that looks consistent?
  2. Customization: can the brand be expressed without fighting the defaults?
  3. Payload: what ships to the browser, and can unused styles be removed?
  4. Documentation: can the team self-serve answers?
  5. Exit cost: if the framework is removed in three years, how much markup changes?

The framework and JavaScript pairing

  • React ecosystems pair with Tailwind or component kits built for React.
  • Vue ecosystems pair with Tailwind or Vue-native component kits.
  • Svelte pairs naturally with utility-first or minimal hand-written CSS.
  • Static sites (this site included) can use plain layered CSS with a small utility layer.

Raw CSS first is not a slogan

Modern CSS covers most of what frameworks existed to provide: grid and flexbox ended the float-layout era, custom properties replaced theming plugins, nesting replaced preprocessors for many teams, and cascade layers solved the specificity wars. A framework now buys component speed, not capability. Learn the language first, then adopt a framework for its component velocity, keeping your own design tokens in your own stylesheet so migration stays possible.

/* Keep tokens framework-independent: this file survives any framework decision */
:root {
  --color-action: oklch(0.55 0.2 262);
  --space-3: 1rem;
  --radius: 0.5rem;
}

Practice: evaluate one

The task

Pick the framework you are most likely to use professionally and rebuild the card component from this track in it, side by side with your layered-CSS version.

The checklist

  • Produce the same rendered result both ways and note where they diverge.
  • Count the bytes that actually ship in each version (dev tools → Network).
  • Write a one-paragraph recommendation with the five selection criteria as its outline.