NexusCS

UIkit

CSS
UIkit is a lightweight and modular CSS framework for developing fast and powerful web interfaces. Uses uk- prefix for all classes and attributes.
css
framework
frontend
web

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 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 Cheatsheet - NexusCS