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%)
<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
<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
<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
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
BESTSELLER
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
BESTSELLER
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
BESTSELLER
iPhone
iPhone, the world's most powerful personal device stands for internet, individual, instruct, inform, and inspire.
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>
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>
Modal
Modals are separate windows within an application for providing information or requiring confirmation
.modal-fixed is positioned fixed
We've a special offer only for you 🎊🎊
FLAT 90% OFF ON ALL ITEMS
<div class="modal-fixed">
<h2 class="modal-title">MODAL TITLE HERE</h2>
<p class="modal-subtitle">MODAL INFORMATION HERE</p>
</div>
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
<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>
Responsive Images
For all images used max-width: 100% so that its width is always less that or equal to 100% even for varying screen sizes
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>