This library follows a strict naming convention to prevent conflicts with Webflow's native styles, your custom CSS, and third-party embeds.
.wf-{component}-{element}
.wf-{component}__{child-element}
.wf-{component}__{child-element}--{modifier}
This is a modified BEM (Block Element Modifier) approach with a wf- namespace prefix.
.wf-hero-split__title--large
│ │ │ │
│ │ │ └── Modifier: visual variant
│ │ └── Element: child within the block
│ └── Block: the component name
└── Namespace: "wf-" prevents collisions
Webflow generates its own class names (e.g., .heading-2, .paragraph-large). Without namespacing, your embedded component styles could accidentally override Webflow's styles — or vice versa.
The wf- prefix creates a clean boundary:
| Layer | Example Class | Controlled By |
|---|---|---|
| Webflow native | .heading-2 | Webflow style panel |
| This library | .wf-hero-split__title | Embed code block |
| Your custom | .my-special-heading | Custom code section |
wf- prefixEvery class in this library starts with wf-. Never remove it.
wf-hero-split (correct)
wf-heroSplit (wrong — no camelCase)
wf-hero_split (wrong — no underscores in component name)
wf-hero-split__title (correct)
wf-hero-split-title (wrong — looks like a new component)
wf-hero-split__btn--primary (correct — modifier on an element)
wf-hero-split--dark (correct — modifier on the block)
Never nest more than one level of __:
/* Correct — flat structure */
.wf-pricing-cards__card-title { }
/* Wrong — nested BEM is unreadable */
.wf-pricing-cards__card__title__text { }If you copy hero-split and want to make a variant for your project:
/* Original */
.wf-hero-split { ... }
.wf-hero-split__title { ... }
/* Your variant — change the component name, keep the pattern */
.wf-hero-product { ... }
.wf-hero-product__title { ... }To create a dark variant of an existing component:
/* Add a block-level modifier */
.wf-cta-banner--dark {
background-color: var(--wf-color-gray-900);
}
/* Override child styles within the modifier scope */
.wf-cta-banner--dark .wf-cta-banner__title {
color: var(--wf-color-white);
}In Webflow's designer, you can add both a library class and a Webflow class to the same element:
<h2 class="wf-hero-split__title heading-style-h2">
Your headline
</h2>The Webflow class (heading-style-h2) handles the global typography; the library class (wf-hero-split__title) handles component-specific spacing and layout.
| Pattern | Used For | Example |
|---|---|---|
.wf-{name} | Block (component root) | .wf-hero-split |
.wf-{name}__{el} | Element (child) | .wf-hero-split__title |
.wf-{name}--{mod} | Block modifier | .wf-hero-split--dark |
.wf-{name}__{el}--{mod} | Element modifier | .wf-hero-split__btn--primary |
All design tokens in styles/variables.css also use the wf- prefix:
--wf-color-primary /* Colors */
--wf-text-lg /* Typography scale */
--wf-space-4 /* Spacing scale */
--wf-radius-md /* Border radius */
--wf-shadow-sm /* Shadows */
--wf-transition-base /* Transitions */
--wf-z-modal /* Z-index layers */Every component references these tokens with a fallback value so it works even without variables.css loaded:
color: var(--wf-color-primary, #4f46e5);
/* ^^^^^^^ fallback */Part of No-Code Builder Pro
This guide walks you through every method of bringing these components into your Webflow project.
The simplest approach. Each component file is a self-contained + HTML block that drops directly into Webflow's Embed element.
1. Open your Webflow project in the Designer
2. Select the page and section where you want the component
3. Press A (Add Elements panel) and search for Embed
4. Drag the Embed element to the desired location
5. Open the component's .html file in a text editor
6. Copy the entire contents (both and the HTML)
7. Paste into the Embed code editor
8. Click Save & Close
For consistent theming, add the design tokens globally:
1. Go to Project Settings → Custom Code → Head Code
2. Open styles/variables.css in a text editor
3. Wrap the contents in a tag:
<style>
/* Paste the contents of variables.css here */
</style>4. Paste into the Head Code field
5. Save
The reset stylesheet (styles/reset.css) is optional. Only include it if you want to normalize browser defaults — Webflow already handles most resets.
If you want a component on a specific page only:
1. Go to Page Settings → Custom Code
2. Paste the component code into Before
tag
3. This keeps the component out of other pages
For components that appear on every page (e.g., navbar, footer):
1. Add the component via Embed (Method 1)
2. Select the Embed element
3. Right-click → Create Symbol
4. Name it (e.g., "WF Navbar Simple")
5. Now you can drag this Symbol onto any page
Updating the Symbol in one place updates it everywhere.
| File | Where | Why |
|---|---|---|
styles/variables.css | Project Settings → Head Code | Design tokens for all components |
| File | Where | Why |
|---|---|---|
components/{category}/{name}.html | Embed element | The component itself |
| File | Where | Why |
|---|---|---|
styles/reset.css | Project Settings → Head Code | Browser normalization (usually unnecessary in Webflow) |
Edit the CSS custom properties in variables.css (the Head Code):
:root {
--wf-color-primary: #your-brand-color;
--wf-color-primary-light: #lighter-variant;
--wf-color-primary-dark: #darker-variant;
}Every component that references --wf-color-primary updates automatically.
Update the font family token:
:root {
--wf-font-sans: 'Your Font', sans-serif;
}Make sure the font is loaded in Webflow (Project Settings → Fonts) before referencing it.
The spacing scale controls all margins and paddings:
:root {
--wf-space-4: 1.25rem; /* Was 1rem — now all "space-4" references are larger */
}Edit the HTML inside the Embed block directly in Webflow's code editor. Change headings, paragraphs, links, button text — the styles remain intact.
A typical landing page uses 6-8 components in sequence:
[Navbar] ← components/navigation/navbar-simple.html
[Hero] ← components/hero/hero-split.html
[Features] ← components/features/features-grid-icons.html
[Testimonials] ← components/testimonials/testimonials-cards.html
[Pricing] ← components/pricing/pricing-three-tier.html
[CTA] ← components/cta/cta-gradient.html
[Footer] ← components/footers/footer-four-column.html
Each component is placed in its own Embed element, stacked vertically. They share the design tokens from variables.css, so colors, fonts, and spacing are automatically consistent.
Webflow's Designer doesn't execute Embed code. You'll only see the rendered component on the published site or in Preview mode (press the eye icon).
Check for class name conflicts. All library classes use the wf- prefix. If you have a custom class with the same name, rename yours.
All components include @media queries for responsive behavior. Check that your Webflow container isn't constraining the Embed width. Set the Embed to width: 100% in the style panel.
Make sure variables.css content is in the Head Code (not Body). The block with :root variables must load before the component code.
Part of No-Code Builder Pro
Get the full Webflow Component Library and unlock everything.
Get the complete guide with every chapter unlocked, including code samples, diagrams, and best practices.
Access all interactive tools with complete data, all workload profiles, and the full scenario library.
Downloadable source code, configuration files, and working examples from every chapter.
Free updates for life. Every new chapter, tool, and improvement included.