bootstrap, bulma, purecss, tachyons, and tailwindcss are all CSS frameworks designed to speed up frontend development, but they solve styling problems in different ways. bootstrap and bulma provide pre-built components and a grid system using semantic class names. purecss offers a minimal set of responsive modules without imposing a specific look. tachyons and tailwindcss use a utility-first approach, where small single-purpose classes are combined to build designs directly in the HTML. While bootstrap includes JavaScript for interactive components, the others are primarily CSS-only, requiring you to bring your own JavaScript for behavior.
bootstrap, bulma, purecss, tachyons, and tailwindcss all aim to reduce CSS writing, but they differ in how much control they give you and how they structure your markup. Let's compare how they handle layout, customization, and interactivity.
bootstrap uses a 12-column grid system with predefined breakpoints.
.row container..col-md-4 define width at specific screen sizes.<!-- bootstrap: 12-column grid -->
<div class="container">
<div class="row">
<div class="col-md-4">Column 1</div>
<div class="col-md-4">Column 2</div>
<div class="col-md-4">Column 3</div>
</div>
</div>
bulma uses a flexbox-based grid that is mobile-first by default.
.columns as the container and .column for items..is-one-third set the width.<!-- bulma: Flexbox grid -->
<div class="columns">
<div class="column is-one-third">Column 1</div>
<div class="column is-one-third">Column 2</div>
<div class="column is-one-third">Column 3</div>
</div>
purecss provides a responsive grid using percentage-based widths.
.pure-g for the row and .pure-u-1-3 for units.<!-- purecss: Unit-based grid -->
<div class="pure-g">
<div class="pure-u-1-3">Column 1</div>
<div class="pure-u-1-3">Column 2</div>
<div class="pure-u-1-3">Column 3</div>
</div>
tachyons uses functional classes for flexbox layouts.
.flex and .w-33 (width 33%) to create columns.<!-- tachyons: Functional flex -->
<div class="flex">
<div class="w-33">Column 1</div>
<div class="w-33">Column 2</div>
<div class="w-33">Column 3</div>
</div>
tailwindcss uses utility classes for flexbox or CSS grid.
.flex or .grid with .grid-cols-3..w-1/3 control sizing.<!-- tailwindcss: Utility grid -->
<div class="grid grid-cols-3">
<div class="w-full">Column 1</div>
<div class="w-full">Column 2</div>
<div class="w-full">Column 3</div>
</div>
bootstrap relies on Sass variables for theming.
$primary before compiling.<!-- bootstrap: Sass variables -->
$primary: #007bff;
$btn-border-radius: .25rem;
@import "bootstrap";
bulma uses Sass variables with a specific import order.
$primary before importing the framework.<!-- bulma: Sass variables -->
$primary: #00d1b2;
$family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI";
@import "bulma";
purecss is minimal and expects manual CSS overrides.
/* purecss: Manual overrides */
@import "purecss";
.button-custom { background: #007bff; color: white; }
tachyons is immutable and does not support theming.
/* tachyons: Immutable classes */
/* No config file. To change blue, you must edit .bg-blue in source */
.bg-blue { background-color: #0074d9; }
tailwindcss uses a JavaScript configuration file.
tailwind.config.js.// tailwindcss: Config file
module.exports = {
theme: {
extend: {
colors: { primary: '#007bff' }
}
}
}
bootstrap includes JavaScript for components like modals and navbars.
// bootstrap: JS Bundle
import 'bootstrap/dist/js/bootstrap.bundle.min.js';
// HTML: data-bs-toggle="modal"
bulma is CSS-only and requires you to add JavaScript.
// bulma: Custom JS
const navbar = document.querySelector('.navbar-burger');
navbar.addEventListener('click', () => { /* toggle logic */ });
purecss is CSS-only with no interactive components.
// purecss: Custom JS
// No built-in helpers. You manage all DOM events manually.
tachyons is CSS-only and focuses on styling state.
.dim provide hover effects without JS.// tachyons: Custom JS
// Use .dim class for hover, JS for click handlers
tailwindcss is CSS-only but has plugins for forms and typography.
// tailwindcss: Custom JS
// Use Alpine.js or framework state for interactivity
bootstrap is actively maintained with regular security updates.
bulma is maintained but updates are less frequent than Bootstrap.
purecss has low activity and is considered stable legacy code.
tachyons is no longer actively developed.
tailwindcss is highly active with frequent releases and updates.
While the approaches differ, these libraries share common goals and techniques.
<!-- Example: All support responsive adjustments -->
<!-- bootstrap: col-12 col-md-6 -->
<!-- bulma: column is-full-mobile is-half-tablet -->
<!-- purecss: pure-u-1 pure-u-md-1-2 -->
<!-- tachyons: w-100 w-50-ns -->
<!-- tailwindcss: w-full md:w-1/2 -->
/* Example: All normalize heading margins */
/* h1, h2, h3... { margin-top: 0; } */
// Example: Selective importing
// bootstrap: import only grid
// tailwindcss: purges unused classes
bootstrap and tailwindcss have strong accessibility tooling.<!-- Example: Focus rings -->
<!-- All frameworks provide :focus styles for buttons -->
bootstrap and tailwindcss have the largest collections.<!-- Example: Documentation links -->
<!-- Official docs provide copy-paste snippets for all -->
| Feature | Shared by All Five |
|---|---|
| Responsiveness | π± Mobile-first media queries |
| Base Styles | π¨ CSS reset/normalize included |
| Modularity | π§© Partial imports supported |
| Accessibility | β Focus states and contrast |
| Documentation | π Online guides and examples |
| Feature | bootstrap | bulma | purecss | tachyons | tailwindcss |
|---|---|---|---|---|---|
| Approach | π§± Component-based | π§± Component-based | π§± Minimal modules | β‘ Utility-first | β‘ Utility-first |
| Grid | 12-column | Flexbox | Percentage units | Flex utilities | Flex/Grid utilities |
| JS Included | β Yes | β No | β No | β No | β No |
| Customization | Sass variables | Sass variables | Manual CSS | Edit source | Config file |
| Maintenance | π’ Active | π‘ Stable | π‘ Low Activity | π΄ Inactive | π’ Very Active |
bootstrap is the safe choice for teams needing a complete UI kit with JavaScript included. It reduces decision fatigue but can make sites look generic.
bulma is a clean middle ground for those who want components without JavaScript baggage. It works well when you want readability and flexbox power.
purecss fits niche cases where size is critical and you only need basic layout helpers. It is not suitable for complex dashboards.
tachyons should be avoided for new work due to lack of maintenance. It remains useful only for maintaining older systems built with it.
tailwindcss is the modern standard for utility-first development. It offers the best balance of control, performance, and community support for new projects.
Final Thought: Your choice depends on how much design freedom you need versus how much pre-built functionality you want. For most new professional projects, tailwindcss offers the best long-term value, while bootstrap remains valid for rapid internal tooling.
Choose tachyons only for maintaining legacy projects or if you strictly prefer immutable functional CSS with no build step. Note that this package is no longer actively developed, so it should not be used for new greenfield projects where long-term support is required. Modern utility frameworks like tailwindcss offer similar benefits with active maintenance.
Choose bootstrap if you need a complete UI kit with built-in JavaScript components like modals, dropdowns, and tooltips. It is ideal for internal tools, admin dashboards, or prototypes where speed and consistency are more important than unique branding. The large ecosystem means you can find themes and extensions for almost any need.
Choose bulma if you want a modern flexbox-based grid and clean components without any JavaScript dependencies. It is suitable for projects where you prefer to handle interactivity with your own framework (like React or Vue) and want a readable class naming convention. It works well when you need a good starting point but plan to customize the look significantly.
Choose purecss if you need an extremely lightweight foundation for a project where every kilobyte counts. It is best for simple landing pages or widgets where you only need a grid and basic form styling without a heavy component library. Avoid it for complex applications that require extensive pre-built UI elements.
Choose tailwindcss if you want full design control without leaving your HTML and need a highly customizable system backed by an active community. It is ideal for custom designs where you want to avoid overriding default component styles and need a robust build process to purge unused CSS. It requires a build step but offers the best developer experience for modern utility-first workflows.
Functional CSS for humans.
Quickly build and design new UI without writing CSS.
Docs can be found at http://tachyons.io/docs The modules are generally pretty small and thus quick and easy to read.
The quickest and easiest way to start using Tachyons is to include a reference to the minified file in the head of your HTML file.
<link rel="stylesheet" href="https://unpkg.com/tachyons@4/css/tachyons.min.css">
Clone the repo from Github and install dependencies through npm.
git clone https://github.com/tachyons-css/tachyons.git
cd tachyons
npm install
If you want to just use everything in tachyons/src as a jumping off point and edit all the code yourself, you can compile all of your wonderful changes by running:
npm start
This will output both minified and unminified versions of the CSS to the CSS directory and watch the src directory for changes. It's aliased to the command:
npm run build:watch
If you'd like to just build the CSS once without watching the src directory, run:
npm run build
If you want to check that a class hasn't been redefined or 'mutated,' there is a linter to check that all of the classes have only been defined once. This can be useful if you are using another library or have written some of your own CSS and want to make sure there are no naming collisions. To do this run the command:
npm run mutations
The tachyons docs located at http://tachyons.io are all open source and located at https://github.com/tachyons-css/tachyons-css.github.io
You can clone the docs and use them as a template for documenting your own design system / patterns / components. While not everything is automated, the component library generation makes it extremely easy to generate and organize the documentation for components as demonstrated at http://tachyons.io/components
Please read our code of conduct for contributors.
A longer list of sites that use tachyons in production can be found in sites.md We love letting the community see what people are building. Please add your link to sites.md in a PR or by opening an issue if you're willing to share to your site or project.
Featured Sites
And of course...
Development of Tachyons is supported by
If you have a question or need help feel free to open an issue here or jump into the Tachyons slack channel.