Getting started
CDN Setup
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/uikit@3/dist/css/uikit.min.css"
/>
<script src="https://cdn.jsdelivr.net/npm/uikit@3/dist/js/uikit.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/uikit@3/dist/js/uikit-icons.min.js"></script>
Include CSS, JS, and icons in head/body
npm Installation
npm install uikit
import UIkit from "uikit";
import Icons from "uikit/dist/js/uikit-icons";
UIkit.use(Icons);
Quick Example
<div class="uk-card uk-card-default uk-card-body">
<h3 class="uk-card-title">Card Title</h3>
<p>Card content goes here.</p>
<button class="uk-button uk-button-primary">Click me</button>
</div>
Basic card component with button
Grid System
Basic Grid
<div class="uk-child-width-expand@s" uk-grid>
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
Equal width columns (requires uk-grid attribute)
Responsive Widths
<div class="uk-child-width-1-2@s uk-child-width-1-3@m" uk-grid>
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
2 columns on small, 3 on medium
Grid Gap Modifiers
| Class | Gap Size |
|---|---|
uk-grid-small |
Small gap |
uk-grid-medium |
Medium gap (default) |
uk-grid-large |
Large gap |
uk-grid-collapse |
No gap |
Width Classes
| Class | Width |
|---|---|
uk-width-1-2 |
50% |
uk-width-1-3 |
33.3% |
uk-width-2-3 |
66.6% |
uk-width-1-4 |
25% |
uk-width-3-4 |
75% |
uk-width-1-5 |
20% |
uk-width-auto |
Auto |
uk-width-expand |
Fill remaining space |
Add @s, @m, @l, @xl for responsive
Buttons
Button Styles
<button class="uk-button uk-button-default">Default</button>
<button class="uk-button uk-button-primary">Primary</button>
<button class="uk-button uk-button-secondary">Secondary</button>
<button class="uk-button uk-button-danger">Danger</button>
<button class="uk-button uk-button-text">Text</button>
<button class="uk-button uk-button-link">Link</button>
Button Sizes
| Class | Description |
|---|---|
uk-button-small |
Smaller button |
uk-button-large |
Larger button |
Button Group
<div class="uk-button-group">
<button class="uk-button uk-button-default">Left</button>
<button class="uk-button uk-button-default">Middle</button>
<button class="uk-button uk-button-default">Right</button>
</div>
Groups buttons together horizontally
Cards
Basic Card
<div class="uk-card uk-card-default uk-card-body">
<h3 class="uk-card-title">Title</h3>
<p>Content goes here.</p>
</div>
Card Styles
| Class | Description |
|---|---|
uk-card-default |
Default with border |
uk-card-primary |
Primary background |
uk-card-secondary |
Secondary background |
uk-card-hover |
Hover effect |
Card with Header and Footer
<div class="uk-card uk-card-default">
<div class="uk-card-header">
<h3 class="uk-card-title">Header</h3>
</div>
<div class="uk-card-body">
<p>Body content</p>
</div>
<div class="uk-card-footer">
<a href="#" class="uk-button uk-button-text"> Read more </a>
</div>
</div>
Card with Media
<div class="uk-card uk-card-default">
<div class="uk-card-media-top">
<img src="image.jpg" alt="" />
</div>
<div class="uk-card-body">
<h3 class="uk-card-title">Title</h3>
<p>Content</p>
</div>
</div>
Use uk-card-media-top, uk-card-media-bottom, or uk-card-media-left
Navbar
Basic Navbar
<nav class="uk-navbar-container" uk-navbar>
<div class="uk-navbar-left">
<ul class="uk-navbar-nav">
<li class="uk-active"><a href="#">Active</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</div>
</nav>
Navbar with Dropdown
<nav class="uk-navbar-container" uk-navbar>
<ul class="uk-navbar-nav">
<li>
<a href="#">Parent</a>
<div class="uk-navbar-dropdown">
<ul class="uk-nav uk-navbar-dropdown-nav">
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</div>
</li>
</ul>
</nav>
Navbar Sections
| Class | Description |
|---|---|
uk-navbar-left |
Left aligned items |
uk-navbar-center |
Center aligned items |
uk-navbar-right |
Right aligned items |
Forms
Form Controls
<input class="uk-input" type="text" placeholder="Input" />
<select class="uk-select">
<option>Option 1</option>
<option>Option 2</option>
</select>
<textarea class="uk-textarea" rows="5"></textarea>
<input class="uk-checkbox" type="checkbox" />
<input class="uk-radio" type="radio" />
<input class="uk-range" type="range" />
Form Layout
<form class="uk-form-stacked">
<div class="uk-margin">
<label class="uk-form-label">Label</label>
<div class="uk-form-controls">
<input class="uk-input" type="text" />
</div>
</div>
<div class="uk-margin">
<label class="uk-form-label">Email</label>
<div class="uk-form-controls">
<input class="uk-input" type="email" />
</div>
</div>
</form>
Form States
| Class | Description |
|---|---|
uk-form-danger |
Error state (red) |
uk-form-success |
Success state (green) |
uk-form-stacked |
Stacked layout |
uk-form-horizontal |
Horizontal layout |
Form Sizes
| Class | Description |
|---|---|
uk-form-small |
Small form controls |
uk-form-large |
Large form controls |
Modals
Basic Modal
<button uk-toggle="target: #my-modal">Open Modal</button>
<div id="my-modal" uk-modal>
<div class="uk-modal-dialog uk-modal-body">
<h2 class="uk-modal-title">Headline</h2>
<p>Modal content goes here.</p>
<button class="uk-modal-close" type="button">Close</button>
</div>
</div>
Modal JavaScript API
// Show modal
UIkit.modal("#my-modal").show();
// Hide modal
UIkit.modal("#my-modal").hide();
// Confirmation dialog
UIkit.modal.confirm("Are you sure?").then(
() => console.log("Confirmed"),
() => console.log("Rejected"),
);
// Alert dialog
UIkit.modal.alert("Notice!").then(() => console.log("Closed"));
Modal Options
<div id="modal" uk-modal="bg-close: false">
<!-- Content -->
</div>
| Option | Default | Description |
|---|---|---|
bg-close |
true |
Close on background click |
esc-close |
true |
Close on ESC key |
stack |
false |
Allow stacking modals |
Tables
Basic Table
<table class="uk-table">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>John Doe</td>
<td>john@example.com</td>
</tr>
</tbody>
</table>
Table Modifiers
| Class | Description |
|---|---|
uk-table-divider |
Row dividers |
uk-table-striped |
Zebra striping |
uk-table-hover |
Hover effect on rows |
uk-table-small |
Compact padding |
uk-table-justify |
Justify columns |
uk-table-middle |
Vertical center alignment |
uk-table-responsive |
Responsive horizontal scroll |
Example with Modifiers
<table class="uk-table uk-table-divider uk-table-hover">
<thead>
<tr>
<th>Heading</th>
<th>Heading</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data</td>
<td>Data</td>
</tr>
</tbody>
</table>
Dropdowns
Basic Dropdown
<button class="uk-button uk-button-default">Hover</button>
<div uk-dropdown>
<ul class="uk-nav uk-dropdown-nav">
<li class="uk-active"><a href="#">Active</a></li>
<li><a href="#">Item</a></li>
<li><a href="#">Item</a></li>
</ul>
</div>
Dropdown Positions
<div uk-dropdown="pos: top-right">
<!-- Content -->
</div>
| Position | Description |
|---|---|
top-left |
Top left |
top-center |
Top center |
top-right |
Top right |
bottom-left |
Bottom left (default) |
bottom-center |
Bottom center |
bottom-right |
Bottom right |
left-top |
Left top |
left-center |
Left center |
right-top |
Right top |
right-center |
Right center |
Dropdown Modes
<div uk-dropdown="mode: click">
<!-- Opens on click -->
</div>
| Mode | Description |
|---|---|
hover |
Hover to open (default) |
click |
Click to toggle |
Icons
Basic Icon
<span uk-icon="heart"></span>
<span uk-icon="star"></span>
<span uk-icon="home"></span>
Icon with Ratio
<span uk-icon="icon: check; ratio: 2"></span>
<span uk-icon="icon: close; ratio: 1.5"></span>
Ratio scales the icon size
Icon Button
<a href="#" class="uk-icon-button" uk-icon="instagram"></a>
<a href="#" class="uk-icon-button" uk-icon="twitter"></a>
<a href="#" class="uk-icon-button" uk-icon="facebook"></a>
Common Icons
| Icon | Name |
|---|---|
home |
Home |
sign-in |
Sign in |
sign-out |
Sign out |
user |
User |
users |
Users |
lock |
Lock |
mail |
|
search |
Search |
star |
Star |
heart |
Heart |
check |
Check |
close |
Close |
menu |
Menu |
plus |
Plus |
minus |
Minus |
trash |
Trash |
download |
Download |
upload |
Upload |
chevron-left |
Chevron left |
chevron-right |
Chevron right |
Animations
Animation Classes
<div class="uk-animation-fade">Fade in</div>
<div class="uk-animation-slide-top">Slide from top</div>
<div class="uk-animation-slide-bottom">Slide from bottom</div>
<div class="uk-animation-slide-left">Slide from left</div>
<div class="uk-animation-slide-right">Slide from right</div>
<div class="uk-animation-scale-up">Scale up</div>
<div class="uk-animation-scale-down">Scale down</div>
Animation Modifiers
| Class | Description |
|---|---|
uk-animation-reverse |
Reverse animation direction |
uk-animation-fast |
Faster animation speed |
Example with Modifier
<div class="uk-animation-slide-top uk-animation-fast">Fast slide from top</div>
Alerts & Notifications
Alert Component
<div class="uk-alert-primary" uk-alert>
<a class="uk-alert-close" uk-close></a>
<p>Primary alert message.</p>
</div>
<div class="uk-alert-success" uk-alert>
<p>Success alert message.</p>
</div>
<div class="uk-alert-warning" uk-alert>
<p>Warning alert message.</p>
</div>
<div class="uk-alert-danger" uk-alert>
<p>Danger alert message.</p>
</div>
Notification JavaScript
// Simple notification
UIkit.notification("Message");
// With options
UIkit.notification({
message: "Notification message",
status: "primary",
pos: "top-right",
timeout: 5000,
});
// Status types
UIkit.notification("Success!", { status: "success" });
UIkit.notification("Warning!", { status: "warning" });
UIkit.notification("Error!", { status: "danger" });
Notification Options
| Option | Default | Description |
|---|---|---|
message |
- | Notification message |
status |
- | primary, success, warning, danger |
pos |
top-center |
Position on screen |
timeout |
5000 |
Auto-close milliseconds |
Utility Classes
Margin Utilities
| Class | Description |
|---|---|
uk-margin |
Default margin |
uk-margin-small |
Small margin |
uk-margin-medium |
Medium margin |
uk-margin-large |
Large margin |
uk-margin-xlarge |
Extra large margin |
uk-margin-remove |
Remove all margin |
uk-margin-auto |
Auto margin (center) |
Padding Utilities
| Class | Description |
|---|---|
uk-padding |
Default padding |
uk-padding-small |
Small padding |
uk-padding-large |
Large padding |
uk-padding-remove |
Remove all padding |
Text Alignment
| Class | Description |
|---|---|
uk-text-left |
Left align |
uk-text-center |
Center align |
uk-text-right |
Right align |
uk-text-justify |
Justify text |
Text Styling
| Class | Description |
|---|---|
uk-text-bold |
Bold text |
uk-text-muted |
Muted color |
uk-text-primary |
Primary color |
uk-text-success |
Success color |
uk-text-warning |
Warning color |
uk-text-danger |
Danger color |
uk-text-small |
Small size |
uk-text-large |
Large size |
uk-text-truncate |
Truncate with ellipsis |
Visibility
| Class | Description |
|---|---|
uk-hidden |
Hide element |
uk-invisible |
Make invisible (keeps space) |
uk-visible@s |
Show on small and up |
uk-visible@m |
Show on medium and up |
uk-visible@l |
Show on large and up |
uk-hidden@s |
Hide on small and up |
uk-hidden@m |
Hide on medium and up |
uk-hidden@l |
Hide on large and up |
Responsive Breakpoints
Breakpoint Reference
| Suffix | Width | Description |
|---|---|---|
@s |
≥640px | Small devices |
@m |
≥960px | Medium devices |
@l |
≥1200px | Large devices |
@xl |
≥1600px | Extra large devices |
Usage Examples
<!-- Hide on mobile, show on tablet+ -->
<div class="uk-visible@s">Visible on small+</div>
<!-- Show on mobile, hide on tablet+ -->
<div class="uk-hidden@s">Hidden on small+</div>
<!-- Responsive grid widths -->
<div class="uk-width-1-2@s uk-width-1-3@m" uk-grid>
<div>Item</div>
<div>Item</div>
</div>
<!-- Responsive text alignment -->
<p class="uk-text-center uk-text-left@m">Centered on mobile, left on tablet+</p>
Offcanvas
Basic Offcanvas
<button uk-toggle="target: #offcanvas">Open Menu</button>
<div id="offcanvas" uk-offcanvas>
<div class="uk-offcanvas-bar">
<button class="uk-offcanvas-close" type="button" uk-close></button>
<h3>Menu</h3>
<ul class="uk-nav">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a></li>
<li><a href="#">Item 3</a></li>
</ul>
</div>
</div>
Offcanvas Modes
<div id="offcanvas" uk-offcanvas="mode: push">
<!-- Push content -->
</div>
| Mode | Description |
|---|---|
slide |
Slide over content (default) |
push |
Push content aside |
reveal |
Reveal from behind |
Offcanvas Positions
<div id="offcanvas" uk-offcanvas="flip: true">
<!-- Opens from right -->
</div>
| Option | Description |
|---|---|
flip: false |
Open from left (default) |
flip: true |
Open from right |
Accordion
Basic Accordion
<ul uk-accordion>
<li class="uk-open">
<a class="uk-accordion-title" href="#"> Item 1 </a>
<div class="uk-accordion-content">
<p>Content for item 1.</p>
</div>
</li>
<li>
<a class="uk-accordion-title" href="#"> Item 2 </a>
<div class="uk-accordion-content">
<p>Content for item 2.</p>
</div>
</li>
</ul>
Accordion Options
<ul uk-accordion="multiple: true">
<!-- Multiple panels can be open -->
</ul>
| Option | Default | Description |
|---|---|---|
multiple |
false |
Allow multiple open |
collapsible |
true |
Allow closing all |
transition |
ease |
Transition timing |
JavaScript API
Component Access
// Get component instance
const modal = UIkit.modal("#my-modal");
const dropdown = UIkit.dropdown("#my-dropdown");
const offcanvas = UIkit.offcanvas("#my-offcanvas");
// Show/hide
modal.show();
modal.hide();
// Toggle
dropdown.toggle();
Event Listeners
// Listen for events
UIkit.util.on("#my-modal", "beforeshow", () => {
console.log("Modal about to show");
});
UIkit.util.on("#my-modal", "shown", () => {
console.log("Modal is visible");
});
UIkit.util.on("#my-modal", "hidden", () => {
console.log("Modal is hidden");
});
Common Events
| Event | Description |
|---|---|
beforeshow |
Before component shows |
show |
Component is showing |
shown |
Component is visible |
beforehide |
Before component hides |
hide |
Component is hiding |
hidden |
Component is hidden |
Gotchas
JavaScript Required
Interactive components (modals, dropdowns, accordions) require uikit.min.js. The uk- attributes trigger JavaScript behavior.
Icons Are Separate
uikit-icons.min.js must be included separately, or uk-icon attributes won't render any icons.
Grid Needs Attribute
UIkit grid requires the uk-grid HTML attribute, not just CSS classes:
<!-- ✓ Correct -->
<div class="uk-child-width-1-2" uk-grid>
<!-- ✗ Wrong -->
<div class="uk-child-width-1-2 uk-grid"></div>
</div>
Mobile-First Responsive
uk-width-1-2@s applies from 640px and UP, not at that exact size. Use uk-hidden@s to hide on screens ≥640px.
Unique IDs for Components
uk-toggle targets by ID. Duplicate IDs cause conflicts:
<!-- ✓ Correct -->
<button uk-toggle="target: #modal-1">Open 1</button>
<div id="modal-1" uk-modal>...</div>
<button uk-toggle="target: #modal-2">Open 2</button>
<div id="modal-2" uk-modal>...</div>
<!-- ✗ Wrong (duplicate IDs) -->
<button uk-toggle="target: #modal">Open 1</button>
<div id="modal" uk-modal>...</div>
<button uk-toggle="target: #modal">Open 2</button>
<div id="modal" uk-modal>...</div>
Also see
- UIkit Documentation (getuikit.com)
- UIkit Components (getuikit.com)
- UIkit GitHub (github.com)
- UIkit CDN (jsdelivr.com)