NextUI

Usage

NextUI is a pleasing, minimal and modern UI library

It consists of a ton of Custom properties, Utility classes and UI components for your basic uses

//CSS

@import url("https://nextui.netlify.app/nextui.css");
// HTML

<link rel="stylesheet" href="https://nextui.netlify.app/nextui.css">

Colors

NextUI uses HSL colors

HSL colors are easy to understand from reading them and to create a lighter or darker shade of a color quickly

hsl(338, 81%, 41%)

hsl(198, 74%, 47%)

hsl(153, 57%, 82)

hsl(46, 100%, 90%)

hsl(0 0% 100%)

hsl(0 0% 100% / 0.9)

hsl(0 0% 100% / 0.8)

hsl(0 0% 100% / 0.7)

hsl(0 0% 100% / 0.6)

hsl(0 0% 100% / 0.5)

hsl(0 0% 100% / 0.4)

hsl(0 0% 100% / 0.3)

hsl(0 0% 100% / 0.2)

hsl(0 0% 100% / 0.1)

hsl(230 35% 7% / 0.1)

hsl(230 35% 7% / 0.2)

hsl(230 35% 7% / 0.3)

hsl(230 35% 7% / 0.4)

hsl(230 35% 7% / 0.5)

hsl(230 35% 7% / 0.6)

hsl(230 35% 7% / 0.7)

hsl(230 35% 7% / 0.8)

hsl(230 35% 7% / 0.9)

hsl(230 35% 7%)

Typography

NextUI uses Open-Sans font family.

This is .fs-800: 4.5rem

This is .fs-800 gray text

This is .fs-700: 3.5rem

This is .fs-600: 2rem

This is .fs-500: 1.75rem

This is .fs-400: 1.125rem

This is .fs-300: 1rem

This is .fs-200: 0.875rem

Text Utilities

This is 10% lighter than black : text-dark-90

This is 20% lighter than black : text-dark-80

This is 30% lighter than black : text-dark-70

This is 40% lighter than black : text-dark-60

This is 50% lighter than black : text-dark-50

This is 60% lighter than black : text-dark-40

This is 70% lighter than black : text-dark-30

This is 80% lighter than black : text-dark-20

This is 90% lighter than black : text-dark-10

This is a center aligned text

Alerts

Alerts are feedbacks for an action triggered by the users

Four basic types of alerts are:

Error alert uses .bg-red which is background: hsl(338, 81%, 41%)

Warning alert uses .bg-blue which is background: hsl(198, 74%, 47%)

Information alert uses .bg-yellow which is background: hsl(46, 100%, 90%)

Success alert uses .bg-green which is background: hsl(153, 57%, 82%)

This is a error alert

This is a error alert

This is a warning alert

This is a warning alert

This is a Info alert

This is a Info alert

This is a Success alert

This is a Success alert

<p class="alert bg-red">
    <span class="alert-message">This is a error alert</span>
    <i class="closeError fas fa-times"></i>
</p>
<p class="alert bg-red">
    <span class="alert-message">This is a error alert</span>
</p>
<p class="alert bg-yellow">
    <span class="alert-message">This is a warning alert</span>
    <i class="closeWarning fas fa-times"></i>
</p>
<p class="alert bg-yellow">
    <span class="alert-message">This is a warning alert</span>
</p>
<p class="alert bg-blue">
    <span class="alert-message">This is a Info alert</span>
    <i class="closeInfo fas fa-times"></i>
</p>
<p class="alert bg-blue">
    <span class="alert-message">This is a Info alert</span>
</p>
<p class="alert bg-green">
    <span class="alert-message">This is a Success alert</span>
    <i class="closeSuccess fas fa-times"></i>
</p>
<p class="alert bg-green">
    <span class="alert-message">This is a Success alert</span>
</p>

Avatars

Avatars are used to potray people or objects.

They have 5 sizes: width-5rem, width-6rem, width-7rem, width-8rem, width-9rem

.width-5rem is width: 5rem

.width-6rem is width: 6rem

.width-7rem is width: 7rem

.width-8rem is width: 8rem

.width-9rem is width: 9rem

.radius-50 is border-radius to 50

random_picture
random_picture
random_picture
random_picture
BK
<div class="width-5rem">
    <img class="radius-50" src="....." alt="random_picture">
</div>
<div class="width-7rem">
    <img class="radius-50" src="....." alt="random_picture">
</div>
<div class="width-9rem">
    <img class="radius-50" src="....." alt="random_picture">
</div>
<div class="width-10rem notification notification-color-yellow">
    <img class="radius-50" src="....." alt="random_picture">
</div>

Badges

Badges indicates a status informations from a component

Here blue, green, yellow and red badges are used with different components

.notification is used to design the notification content

.notification-color-blue gives background: hsl(198, 74%, 47%) to its pseudo element

.notification-color-green gives background: hsl(153, 57%, 82%) to its pseudo element

.notification-color-yellow gives background: hsl(46, 100%, 90%) to its pseudo element

.placeholder, .placeholder-face and .placeholder-hands are used to design the placeholder

random_picture
random_picture
<div class="width-5rem">
    <div class="placeholder">
        <div class="placeholder-face"></div>
        <div class="placeholder-hands"></div>
    </div>
  </div>
  <div class="width-7rem notification notification-color-green">
    <div class="placeholder">
        <div class="placeholder-face"></div>
        <div class="placeholder-hands"></div>
    </div>
  </div>
  <div class="width-9rem notification notification-color-blue">
      <div class="placeholder">
        <div class="placeholder-face"></div>
        <div class="placeholder-hands"></div>
    </div>
  </div>
<div class="width-10rem">
    <div class="placeholder">
        BK
    </div>
</div>
<div class="notification notification-color-green">
  ICON
</div>
<div class="notification notification-color-blue">
  ICON
</div>
<div class="notification notification-color-yellow">
  ICON
</div>

Cards

Cards are content container with wide variety of content

Cards maybe Verticle, Horizontal, text overlayed or text-only

.close-icon is a letter X

.card-overlay is set to filter: blur(0.12rem) and opacity: 0.2

Horizontal

Verticle

...

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

BESTSELLER

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

BESTSELLER

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

X

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

BESTSELLER

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

X

BESTSELLER

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

an-iphone

iPhone

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

OUT OF STOCK

Text Only Card

iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.

<div class="card card-horizontal">
    <div class="img-container">
      <picture>
          <source srcset="...webp" type="image/webp">
          <source srcset="...jpg" type="image/jpg" >
          <img src="...jpg" alt="..." type="image/jpeg" loading="lazy" class="card-img">
      </picture>
    </div>
    <div class="card-content">
      <h3 class="card-title">CARD TITLE</h3>
      <p class="card-body">CARD BODY</p>
      <div class="card-footer">
        CARD FOOTER
      </div>
    </div>
  </div>
  <div class="card card-horizontal">
    <div class="img-container">
      <p class="img-badge">BADGE</p>
      <picture>
          <source srcset="...webp" type="image/webp">
          <source srcset="...jpg" type="image/jpg" >
          <img src="...jpg" alt="..." type="image/jpeg" loading="lazy" class="card-img">
      </picture>
    </div>
    <div class="card-content">
      <h3 class="card-title">TITLE</h3>
      <p class="card-body">CARD BODY</p>
      <div class="card-footer">
          CARD FOOTER
      </div>
    </div>
  </div>
  <div class="card card-horizontal card-dismiss-horizontal">
    <div class="img-container">
      <p class="img-badge">BESTSELLER</p>
      <picture>
          <source srcset="..." type="image/webp">
          <source srcset="..." type="image/jpg" >
          <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
      </picture>
    </div>
    <div class="card-content">
      <h3 class="card-title">CARD TITLE</h3>
      <p class="card-body">CARD BODY</p>
      <div class="card-footer">
          CARD FOOTER
      </div>
    </div>
    <p class="close-icon close-icon-horizontal">X</p>
  </div>
  <div class="card card-horizontal card-shadow">
    <div class="img-container">
      <picture>
          <source srcset="..." type="image/webp">
          <source srcset="..." type="image/jpg" >
          <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
      </picture>
    </div>
    <div class="card-content">
      <h3 class="card-title">CARD TITLE</h3>
      <p class="card-body">CARD BODY</p>
      <div class="card-footer">
          CARD FOOTER
      </div>
    </div>
  </div>
<div class="card card-textonly">
  <h3 class="card-title">CARD TITLE</h3>
  <p class="card-body">CARD BODY</p>
  <button class="btn">Next</button>
</div>
<div class="card card-verticle card-shadow-onhover">
  <div class="img-container">
    <picture>
        <source srcset="..." type="image/webp">
        <source srcset="..." type="image/jpg" >
        <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
    </picture>                  </div>
  <div class="card-content">
    <h3 class="card-title">CARD TITLE</h3>
    <p class="card-body">CARD BODY</p>
    <div class="card-footer">
        CARD FOOTER
    </div>
  </div>
</div>
<div class="card card-verticle">
  <div class="img-container">
    <p class="img-badge">BADGE</p>
    <picture>
        <source srcset="..." type="image/webp">
        <source srcset="..." type="image/jpg" >
        <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
    </picture>
  </div>
  <div class="card-content">
    <h3 class="card-title">TITLE</h3>
    <p class="card-body">CARD BODY</p>
    <div class="card-footer">
        CARD FOOTER
    </div>
  </div>
</div>
<div class="card card-verticle card-dismiss-verticle">
  <p class="close-icon close-icon-verticle fs-300">X</p>
  <div class="img-container">
    <p class="img-badge">BADGE</p>
    <picture>
        <source srcset="..." type="image/webp">
        <source srcset="..." type="image/jpg" >
        <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
      </picture>
  </div>
  <div class="card-content">
    <h3 class="card-title">CARD TITLE</h3>
    <p class="card-body">CARD BODY</p>
    <div class="card-footer">
        CARD FOOTER
    </div>
  </div>
</div>
<div class="card card-verticle">
  <div class="card-overlay">
    <div class="img-container">
        <picture>
            <source srcset="..." type="image/webp">
            <source srcset="..." type="image/jpg" >
            <img src="..." alt="..." type="image/jpeg" loading="lazy" class="card-img">
        </picture>                    </div>
    <div class="card-content">
      <h3 class="card-title">TITLE</h3>
      <p class="card-body">CARD BODY</p>
      <div class="card-footer">
        CARD FOOTER
      </div>
    </div>
  </div>
  <p class="overlay-text">OVERLAY TEXT</p>
</div>
<div class="card card-textonly">
  <h3 class="card-title">CARD TITLE</h3>
  <p class="card-body">CARD BODY</p>
</div>

Buttons

Buttons allow users to take actions

Buttons maybe primary, disabled, button icons, button links or floating buttons

.btn is for a button

.icon acts as a button

.btn-outlined has an outline

.btn-disabled is for a disabled button, where cursor is not allowed

.btn-float could be fixed anywhere on the screen to act as a floating button

<button class="btn btn-primary">
  Primary
</button>
<button class="btn btn-disabled" disabled>
  Disabled
</button>
<button class="btn btn-outlined">
  <i class="fas fa-trash"></i>
     Delete
</button>
<button class="btn btn-outlined ">
  <i class="fas fa-paper-plane"></i>
  Send
</button>
<button class="icon">
  <i class="fas fa-trash fa-lg"></i>
</button>

Onclick on the float button, float buttons show up.

These could be placed anywhere on the screen

<button class="btn btn-float">
  FLOAT ICON
</button>
<div class="float-buttons" id="float-buttons" data-visible="false">
  <button class="btn btn-float">
    FLOAT ICON
  </button>
  <button class="btn btn-float">
    FLOAT ICON
  </button>
  <button class="btn btn-float">
    FLOAT ICON
  </button>
</div>
<a href="#" class="btn-link">
  This is a link
</a>

INPUT

<label for="input" class="input"></label>
<input id="input" class="form-input" type="text">

Username, Email, Create Password, Confirm Password and the checkbox are required.

An error "Passwords do not match" drops down if passwords do not match

<!-- Example input username -->
<label for="username" class="username">Username</label>
<input id="username" class="form-username" type="text" required>

<!-- Example input Email -->
<label for="email" class="email">Email</span></label>
<input id="email" class="form-email" type="email" required>

<!-- Example input Password -->
<label for="password" class="password">Create Password</span></label>
<input id="password" class="form-password" type="password" minlength=".." required>

<!-- Example input Confirm Password -->
<p class="confirm-password">
  <label for="reenter-password" class="reenter-password">Confirm Password</label>
  <input id="reenter-password" class="form-reenter-password" type="password" required>
</p>

<!-- Example checkbox -->
<input class="form__checkbox" type="checkbox" id="agreement" name="agreement" required>
<span for="agreement">I am 13 years of age or older AND agree to the <a href="#">terms and serivces</a></span>

<button class="btn btn-signUp uppercase letter-spacing-1">Sign up</button>

List

Lists are a continuous group of text or images.

You can toggle between Normal list and Stacked list

.stackList-item-more is used on Show more to hide and show stacked list items.

  • Normal List
  • Stacked List
  • List 1
  • List 2
  • List 3
  • List 4
  • List 5
<ul role="list" class="list list-normal">
  <li class="list-item list-item-1">List 1</li>
  <li class="list-item list-item-2">List 2</li>
  <li class="list-item list-item-3">List 3</li>
</ul>
<ul role="list" class="list list-stacked">
  <li class="list-item stackList-item-1">List 1</li>
  <li class="list-item stackList-item-2">List 2</li>
  <li class="list-item stackList-item-more">Show more</li>
  <li class="list-item stackList-item-3">List 3</li>
</ul>

Rating

Rating component helps capture the user feedback in form of rating.

psedo elements of label and radio inputs are used to create stars for rating

<input type="radio" name="stars" id="five-stars" value="5" class="five-stars"/>
<label for="five-stars"></label>

<input type="radio" name="stars" id="four-stars" value="4" class="four-stars" />
<label for="four-stars"></label>

<input type="radio" name="stars" id="three-stars" value="3" class="three-stars"/>
<label for="three-stars"></label>

<input type="radio" name="stars" id="two-stars" value="2" class="two-stars"/>
<label for="two-stars"></label>

<input type="radio" name="stars" id="one-stars" value="1" class="one-stars"/>
<label for="one-stars"></label>

TOAST

The toast component provides quick, at-a-glance feedback on the outcome of an action.

.btn-toast is used as a toast button

.toast-notification is positioned fixed and visible on the screen for 2 seconds

Your order was succesfully placed

<p class="alert toast-notification">
  <span class="alert-message">Your toast message</span>
</p>

Grids

This is a simple grid layout

grid-2 for 2 columns, grid-3 for 3 columns, grid-4 for 4 columns, grid-5 for 5 columns and grid-6 for 6 columns

<div class="grid grid-6">
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
</div>
<div class="grid grid-5">
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
</div>
<div class="grid grid-4">
  <div class="grid-item bg-dark-70"></div>
  <div class="grid-item bg-dark-70"></div>
  <div class="grid-item bg-dark-70"></div>
  <div class="grid-item bg-dark-70"></div>
</div>
<div class="grid grid-3">
  <div class="grid-item bg-dark-80"></div>
  <div class="grid-item bg-dark-80"></div>
  <div class="grid-item bg-dark-80"></div>
</div>
<div class="grid grid-2">
  <div class="grid-item bg-dark-90"></div>
  <div class="grid-item bg-dark-90"></div>
</div>
<div class="grid">
  <div class="grid-item bg-dark"></div>
</div>

The below grid can be resized

.grid-autofit-breaks is used to autofit grid-items based on minmax and breakpoints

This is usually used in grids when number of grid items are unknown

<div class="grid grid-autofit-breaks">
    <div class="bg-white"></div>
    <div class="bg-white-90"></div>
    <div class="bg-white-80"></div>
    <div class="bg-white-70"></div>
    <div class="bg-white-60"></div>
    <div class="bg-white-50"></div>
    <div class="bg-white-40"></div>
    <div class="bg-white-30"></div>
    <div class="bg-white-20"></div>
    <div class="bg-white-10"></div>
    <div class="bg-dark-10"></div>
    <div class="bg-dark-20"></div>
    <div class="bg-dark-30"></div>
    <div class="bg-dark-40"></div>
    <div class="bg-dark-50"></div>
    <div class="bg-dark-60"></div>
    <div class="bg-dark-70"></div>
    <div class="bg-dark-80"></div>
    <div class="bg-dark-90"></div>
    <div class="bg-dark"></div>
</div>

This grid is used when the number of grid items are known

g-6lg-3md-2sm shows 6 items in large screens, 3 in medium and 2 in small

g-3lg-2md-1sm shows 3 items in large screens, 2 in medium and 1 in small

g-12xlg-9lg-6md-3sm-1xsm shows 12 items in extra-large screens, 9 in large screens, 6 in medium screens, 3 in small screens and 1 in extra small screens

<div class="grid g-12xlg-9lg-6md-3sm-1xsm">
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
  <div class="grid-item bg-dark-40"></div>
</div>
<div class="grid g-6lg-3md-2sm">
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
  <div class="grid-item bg-dark-50"></div>
</div>
<div class="grid g-4lg-2md-1sm">
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
  <div class="grid-item bg-dark-60"></div>
</div>

Stacked grids are used for overlapping contents in the grid

All elements under grid-stacked is grid-column: 1/-1 , grid-row: 1/-1

GRID CARD

<div class="grid grid-stacked">
  <div>CONTENT</div>
  <p>CONTENT</p>
</div>

Slider

Sliders allow users to make selections from a range of values.

.slider is used to design the range slider

.percentage is used to get the value of the slider between which is anywhere between min and max

50%

<div class="slider-container">
  <input type="range" class="slider" min="0" max="100" step="1">
</div>

Responsive Images

responsive-image

For all images used max-width: 100% so that its width is always less that or equal to 100% even for varying screen sizes

responsive-image

For higher resolution screens and larger displays you'll need images with larger dimensions.

devicePixelRatio defines the relationship between device pixels and CSS pixels for a particular device. A 192 ppi device has a devicePixelRatio of 2 (192 ppi/96 ppi = 2) because "2 of its display pixels are the size of 1 CSS pixel"

While using width descriptor(w) , the browser calculates the density pixel ratio (dpr) for each image size and applies the image that best fits according to the image size and device resolution

fallbacks for jpegs are also available if browser doesnt support webp

You can go to the network tab and check disable cache to see the different images being downloaded for different screen widths

<div class="image_wrapper">
  <picture>
    <source media="(min-width: XXem)"
            srcset="large.webp XXXw,
                    large.jpg XXXw,
                    large@2x.webp XXXXw,
                    large@2x.jpg XXXXw,
                    large@3x.webp XXXXw,
                    large@3x.jpg XXXXw"
            >
    <source media="(min-width: XXem)"
            srcset="medium.webp XXXw,
                    medium.jpg XXXw,
                    medium@2x.webp XXXw,
                    medium@2x.jpg XXXw,
                    medium@3x.webp XXXXw,
                    medium@3x.jpg XXXXw">
    <source srcset="small.webp XXXw
                    small.jpg XXXw,
                    small@2x.webp XXXw,
                    small@2x.jpg XXXw,
                    small@3x.webp XXXw,
                    small@3x.jpg XXXw">
    <img class="responsive-image" src="......"  alt="responsive-image">
  </picture>
</div>