Skip to content

Getting started ​

Install Bullframe, pick a markup mode and a theme, link one CSS file. Default build is ~8 KB gzipped. No runtime JS.

Markup modes ​

Two ways to write HTML. Element-level a11y (focus rings, ARIA cursors, contrast preferences) ships in both. .bf-* helpers are class-based and utilities only.

Class-based ​

Use .bf-* for layout, buttons, forms, skip links, and other helpers.

html
<link rel="stylesheet" href="…/bullframe.min.css" />

<div class="bf-container">
  <h1 class="bf-t-center">Hello</h1>
  <button class="bf-btn bf-btn--primary">Go</button>
</div>

Classless ​

Element selectors only. No .bf-* classes in the stylesheet.

html
<link rel="stylesheet" href="…/bullframe-classless.min.css" />

<h1>Hello</h1>
<p>Just semantic HTML.</p>
<form>…</form>

Themes ​

Each markup mode has three theme files:

ThemeSuffixBehavior
Light(none)Always light
Dark-darkAlways dark
System-system-defaultprefers-color-scheme

Examples: bullframe-dark.css, bullframe-classless-system-default.css.

Utilities companion ​

bullframe-utilities.css is not a markup mode. Add it when you already have a reset and only need .bf-* helpers.

html
<link rel="stylesheet" href="…/bullframe-utilities.min.css" />

<div class="bf-m-t-3 bf-t-center">
  <h1 class="bf-t-weight-700">Hello</h1>
</div>

CDN ​

Quick drop-in (latest published package entry):

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bullframe.css" />

Recommended for production: pin an exact version, point at a published .min.css file, and add Subresource Integrity plus crossorigin. Package-root / unversioned CDN URLs are not SRI-safe.

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bullframe.css@6.4.2/dist/css/bullframe.min.css" integrity="sha384-a95D+zT/9Sb4nr2SxVPlUwJ0Yq8IJXsOtthfFQ5BWB2Hk3qBXlzOkwTuiIUyL5n0" crossorigin="anonymous" />

Swap the filename for another build (bullframe-classless.min.css, bullframe-dark.min.css, …). Hashes for all seven builds: sri.json.

npm ​

Subpath exports for every variant:

bash
npm install bullframe.css
css
@import 'bullframe.css';
@import 'bullframe.css/dark';
@import 'bullframe.css/system';
@import 'bullframe.css/classless';
@import 'bullframe.css/classless/dark';
@import 'bullframe.css/classless/system';
@import 'bullframe.css/utilities';
javascript
import 'bullframe.css';
import 'bullframe.css/dark';
import 'bullframe.css/system';
import 'bullframe.css/classless';
import 'bullframe.css/classless/dark';
import 'bullframe.css/classless/system';
import 'bullframe.css/utilities';

Download ​

Self-host from the v6.4.0 archive. Source maps ship beside the minified CSS in dist/css/.

Starter HTML ​

Class-based ​

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Bullframe CSS Starter</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bullframe.css@6.4.2/dist/css/bullframe.min.css" integrity="sha384-a95D+zT/9Sb4nr2SxVPlUwJ0Yq8IJXsOtthfFQ5BWB2Hk3qBXlzOkwTuiIUyL5n0" crossorigin="anonymous" />
  </head>
  <body>
    <a class="bf-skip-link" href="#main">Skip to content</a>
    <main id="main" class="bf-container">
      <h1>Hello, Bullframe CSS!</h1>
      <p>Class-based starter.</p>
    </main>
  </body>
</html>

Classless ​

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Bullframe CSS Classless Starter</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bullframe.css@6.4.2/dist/css/bullframe-classless.min.css" integrity="sha384-Ticlxp2ESFCQeFf0Go9TWz11IagrPbxkZmiVkJ/y0ZmzeRGj0n3QVNBdWkEl5Pnx" crossorigin="anonymous" />
    <style>
      body {
        margin-left: auto;
        margin-right: auto;
        padding: 1.5rem;
        max-width: 80rem;
      }
    </style>
  </head>
  <body>
    <main id="main">
      <h1>Hello, Bullframe CSS!</h1>
      <p>Semantic HTML only; no utility classes.</p>
    </main>
  </body>
</html>

Builds ​

Seven builds. Default build is about 8 KB gzipped. No JavaScript runtime.

FileUse when
bullframe.cssClass-based, light
bullframe-dark.cssClass-based, always dark
bullframe-system-default.cssClass-based, prefers-color-scheme
bullframe-classless.cssClassless, light (elements only)
bullframe-classless-dark.cssClassless, always dark
bullframe-classless-system-default.cssClassless, prefers-color-scheme
bullframe-utilities.css.bf-* helpers only, no base styles

Upgrading from v5: Migration.

Next ​

Bullframe CSSCopyright © 2026 Marco Pontili · Privacy