React Buttons - Flowbite
Enable user interaction with the button component to perform actions on your website as links, for payment, form submission, social buttons and more based on React and Tailwind CSS
The button component is a common UI component found on the web that allows users to trigger certain actions on your website such as submitting a form, navigating to a new page, or downloading a file.
The examples from the Flowbite React library allows you to customise the buttons with different colors, sizes, icons, and more. All examples are built with React and Tailwind CSS.
In order to start using the button component you need to import it from Flowbite React:
import { Button } from "flowbite-react";
#
Default buttonsUse this example to create a default button by using the <Button>
component from React and by adding the color
property you can change the color of the button.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button>Default</Button>
<Button color="blue">Blue</Button>
<Button color="gray">Gray</Button>
<Button color="dark">Dark</Button>
<Button color="light">Light</Button>
<Button color="success">Success</Button>
<Button color="failure">Failure</Button>
<Button color="warning">Warning</Button>
<Button color="purple">Purple</Button>
</div>
);
}
#
Button pillsAdd the pill
property to the <Button>
component to create a button with rounded corners.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button pill>Default</Button>
<Button color="blue" pill>
Blue
</Button>
<Button color="gray" pill>
Gray
</Button>
<Button color="dark" pill>
Dark
</Button>
<Button color="light" pill>
Light
</Button>
<Button color="success" pill>
Success
</Button>
<Button color="failure" pill>
Failure
</Button>
<Button color="warning" pill>
Warning
</Button>
<Button color="purple" pill>
Purple
</Button>
</div>
);
}
#
Gradient monochromeBy adding the gradientMonochrome
property to the <Button>
component you can create a button with a gradient background.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button gradientMonochrome="info">Info</Button>
<Button gradientMonochrome="success">Success</Button>
<Button gradientMonochrome="cyan">Cyan</Button>
<Button gradientMonochrome="teal">Teal</Button>
<Button gradientMonochrome="lime">Lime</Button>
<Button gradientMonochrome="failure">Failure</Button>
<Button gradientMonochrome="pink">Pink</Button>
<Button gradientMonochrome="purple">Purple</Button>
</div>
);
}
#
Gradient duotoneUse the gradientDuoTone
property to create a button with a gradient background with two colors.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button gradientDuoTone="purpleToBlue">Purple to Blue</Button>
<Button gradientDuoTone="cyanToBlue">Cyan to Blue</Button>
<Button gradientDuoTone="greenToBlue">Green to Blue</Button>
<Button gradientDuoTone="purpleToPink">Purple to Pink</Button>
<Button gradientDuoTone="pinkToOrange">Pink to Orange</Button>
<Button gradientDuoTone="tealToLime">Teal to Lime</Button>
<Button gradientDuoTone="redToYellow">Red to Yellow</Button>
</div>
);
}
#
Outline buttonsUse the outline
property to create an outline button with transparent background and colored border.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button outline gradientDuoTone="purpleToBlue">
Purple to Blue
</Button>
<Button outline gradientDuoTone="cyanToBlue">
Cyan to Blue
</Button>
<Button outline gradientDuoTone="greenToBlue">
Green to Blue
</Button>
<Button outline gradientDuoTone="purpleToPink">
Purple to Pink
</Button>
<Button outline gradientDuoTone="pinkToOrange">
Pink to Orange
</Button>
<Button outline gradientDuoTone="tealToLime">
Teal to Lime
</Button>
<Button outline gradientDuoTone="redToYellow">
Red to Yellow
</Button>
</div>
);
}
#
Button sizesYou can update the size of the button by adding the size
property to the <Button>
component.
Choose from xs
, sm
, md
, lg
, and xl
as the value.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap items-start gap-2">
<Button size="xs">Extra small</Button>
<Button size="sm">Small</Button>
<Button size="md">Base</Button>
<Button size="lg">Large</Button>
<Button size="xl">Extra large</Button>
</div>
);
}
#
Buttons with iconYou can add icons to the buttons by adding it inside the <Button>
component near the text.
"use client";
import { Button } from "flowbite-react";
import { HiOutlineArrowRight, HiShoppingCart } from "react-icons/hi";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button>
<HiShoppingCart className="mr-2 h-5 w-5" />
Buy now
</Button>
<Button>
Choose plan
<HiOutlineArrowRight className="ml-2 h-5 w-5" />
</Button>
</div>
);
}
#
Button with labelYou can add a label to the button by adding the label
property to the <Button>
component.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return <Button label="2">Messages</Button>;
}
#
Button with only iconsCreate a button with only icons by adding the iconOnly
property to the <Button>
component. These are useful when you want to show buttons in a small space and for things like pagination.
"use client";
import { Button } from "flowbite-react";
import { HiOutlineArrowRight } from "react-icons/hi";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button>
<HiOutlineArrowRight className="h-6 w-6" />
</Button>
<Button pill>
<HiOutlineArrowRight className="h-6 w-6" />
</Button>
<Button outline>
<HiOutlineArrowRight className="h-6 w-6" />
</Button>
<Button outline pill>
<HiOutlineArrowRight className="h-6 w-6" />
</Button>
</div>
);
}
#
Button with loading stateAdd a loading state to the button element by adding the isProcessing
property to the <Button>
component.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return (
<div className="flex flex-wrap items-start gap-2">
<Button size="xs" isProcessing>
Click me!
</Button>
<Button size="sm" isProcessing gradientDuoTone="purpleToBlue">
Click me!
</Button>
<Button size="md" isProcessing color="red">
Click me!
</Button>
<Button size="lg" isProcessing pill>
Click me!
</Button>
<Button size="xl" isProcessing outline>
Click me!
</Button>
</div>
);
}
You can also customize the spinner icon by passing a React node to the processingSpinner
prop.
"use client";
import { Button } from "flowbite-react";
import { AiOutlineLoading } from "react-icons/ai";
export function Component() {
return (
<Button size="md" isProcessing processingSpinner={<AiOutlineLoading className="h-6 w-6 animate-spin" />}>
Click me!
</Button>
);
}
#
Disabled buttonsYou can disable the button by adding the disabled
property to the <Button>
component.
"use client";
import { Button } from "flowbite-react";
export function Component() {
return <Button disabled>Disabled button</Button>;
}
#
Override Button base componentThe as
prop provides you the ability to transform the <Button />
component into another component or HTML element. This prop accepts a string representing an HTML tag or a functional React component.
"use client";
import { Button } from "flowbite-react";
import Link from "next/link";
export function Component() {
return (
<div className="flex flex-wrap gap-2">
<Button as="span" className="cursor-pointer">
Span Button
</Button>
<Button as={Link} href="#">
Next Link Button
</Button>
</div>
);
}
#
ThemeTo learn more about how to customize the appearance of components, please see the Theme docs.
{
"base": "group relative flex items-stretch justify-center p-0.5 text-center font-medium transition-[color,background-color,border-color,text-decoration-color,fill,stroke,box-shadow] focus:z-10 focus:outline-none",
"fullSized": "w-full",
"color": {
"dark": "border border-transparent bg-gray-800 text-white focus:ring-4 focus:ring-gray-300 enabled:hover:bg-gray-900 dark:border-gray-700 dark:bg-gray-800 dark:focus:ring-gray-800 dark:enabled:hover:bg-gray-700",
"failure": "border border-transparent bg-red-700 text-white focus:ring-4 focus:ring-red-300 enabled:hover:bg-red-800 dark:bg-red-600 dark:focus:ring-red-900 dark:enabled:hover:bg-red-700",
"gray": ":ring-cyan-700 border border-gray-200 bg-white text-gray-900 focus:text-cyan-700 focus:ring-4 enabled:hover:bg-gray-100 enabled:hover:text-cyan-700 dark:border-gray-600 dark:bg-transparent dark:text-gray-400 dark:enabled:hover:bg-gray-700 dark:enabled:hover:text-white",
"info": "border border-transparent bg-cyan-700 text-white focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-cyan-800 dark:bg-cyan-600 dark:focus:ring-cyan-800 dark:enabled:hover:bg-cyan-700",
"light": "border border-gray-300 bg-white text-gray-900 focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-gray-100 dark:border-gray-600 dark:bg-gray-600 dark:text-white dark:focus:ring-gray-700 dark:enabled:hover:border-gray-700 dark:enabled:hover:bg-gray-700",
"purple": "border border-transparent bg-purple-700 text-white focus:ring-4 focus:ring-purple-300 enabled:hover:bg-purple-800 dark:bg-purple-600 dark:focus:ring-purple-900 dark:enabled:hover:bg-purple-700",
"success": "border border-transparent bg-green-700 text-white focus:ring-4 focus:ring-green-300 enabled:hover:bg-green-800 dark:bg-green-600 dark:focus:ring-green-800 dark:enabled:hover:bg-green-700",
"warning": "border border-transparent bg-yellow-400 text-white focus:ring-4 focus:ring-yellow-300 enabled:hover:bg-yellow-500 dark:focus:ring-yellow-900",
"blue": "border border-transparent bg-blue-700 text-white focus:ring-4 focus:ring-blue-300 enabled:hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800",
"cyan": "border border-cyan-300 bg-white text-cyan-900 focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-cyan-100 dark:border-cyan-600 dark:bg-cyan-600 dark:text-white dark:focus:ring-cyan-700 dark:enabled:hover:border-cyan-700 dark:enabled:hover:bg-cyan-700",
"green": "border border-green-300 bg-white text-green-900 focus:ring-4 focus:ring-green-300 enabled:hover:bg-green-100 dark:border-green-600 dark:bg-green-600 dark:text-white dark:focus:ring-green-700 dark:enabled:hover:border-green-700 dark:enabled:hover:bg-green-700",
"indigo": "border border-indigo-300 bg-white text-indigo-900 focus:ring-4 focus:ring-indigo-300 enabled:hover:bg-indigo-100 dark:border-indigo-600 dark:bg-indigo-600 dark:text-white dark:focus:ring-indigo-700 dark:enabled:hover:border-indigo-700 dark:enabled:hover:bg-indigo-700",
"lime": "border border-lime-300 bg-white text-lime-900 focus:ring-4 focus:ring-lime-300 enabled:hover:bg-lime-100 dark:border-lime-600 dark:bg-lime-600 dark:text-white dark:focus:ring-lime-700 dark:enabled:hover:border-lime-700 dark:enabled:hover:bg-lime-700",
"pink": "border border-pink-300 bg-white text-pink-900 focus:ring-4 focus:ring-pink-300 enabled:hover:bg-pink-100 dark:border-pink-600 dark:bg-pink-600 dark:text-white dark:focus:ring-pink-700 dark:enabled:hover:border-pink-700 dark:enabled:hover:bg-pink-700",
"red": "border border-red-300 bg-white text-red-900 focus:ring-4 focus:ring-red-300 enabled:hover:bg-red-100 dark:border-red-600 dark:bg-red-600 dark:text-white dark:focus:ring-red-700 dark:enabled:hover:border-red-700 dark:enabled:hover:bg-red-700",
"teal": "border border-teal-300 bg-white text-teal-900 focus:ring-4 focus:ring-teal-300 enabled:hover:bg-teal-100 dark:border-teal-600 dark:bg-teal-600 dark:text-white dark:focus:ring-teal-700 dark:enabled:hover:border-teal-700 dark:enabled:hover:bg-teal-700",
"yellow": "border border-yellow-300 bg-white text-yellow-900 focus:ring-4 focus:ring-yellow-300 enabled:hover:bg-yellow-100 dark:border-yellow-600 dark:bg-yellow-600 dark:text-white dark:focus:ring-yellow-700 dark:enabled:hover:border-yellow-700 dark:enabled:hover:bg-yellow-700"
},
"disabled": "cursor-not-allowed opacity-50",
"isProcessing": "cursor-wait",
"spinnerSlot": "absolute top-0 flex h-full items-center",
"spinnerLeftPosition": {
"xs": "left-2",
"sm": "left-3",
"md": "left-4",
"lg": "left-5",
"xl": "left-6"
},
"gradient": {
"cyan": "bg-gradient-to-r from-cyan-400 via-cyan-500 to-cyan-600 text-white focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-gradient-to-br dark:focus:ring-cyan-800",
"failure": "bg-gradient-to-r from-red-400 via-red-500 to-red-600 text-white focus:ring-4 focus:ring-red-300 enabled:hover:bg-gradient-to-br dark:focus:ring-red-800",
"info": "bg-gradient-to-r from-cyan-500 via-cyan-600 to-cyan-700 text-white focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-gradient-to-br dark:focus:ring-cyan-800 ",
"lime": "bg-gradient-to-r from-lime-200 via-lime-400 to-lime-500 text-gray-900 focus:ring-4 focus:ring-lime-300 enabled:hover:bg-gradient-to-br dark:focus:ring-lime-800",
"pink": "bg-gradient-to-r from-pink-400 via-pink-500 to-pink-600 text-white focus:ring-4 focus:ring-pink-300 enabled:hover:bg-gradient-to-br dark:focus:ring-pink-800",
"purple": "bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 text-white focus:ring-4 focus:ring-purple-300 enabled:hover:bg-gradient-to-br dark:focus:ring-purple-800",
"success": "bg-gradient-to-r from-green-400 via-green-500 to-green-600 text-white focus:ring-4 focus:ring-green-300 enabled:hover:bg-gradient-to-br dark:focus:ring-green-800",
"teal": "bg-gradient-to-r from-teal-400 via-teal-500 to-teal-600 text-white focus:ring-4 focus:ring-teal-300 enabled:hover:bg-gradient-to-br dark:focus:ring-teal-800"
},
"gradientDuoTone": {
"cyanToBlue": "bg-gradient-to-r from-cyan-500 to-cyan-500 text-white focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-gradient-to-bl dark:focus:ring-cyan-800",
"greenToBlue": "bg-gradient-to-br from-green-400 to-cyan-600 text-white focus:ring-4 focus:ring-green-200 enabled:hover:bg-gradient-to-bl dark:focus:ring-green-800",
"pinkToOrange": "bg-gradient-to-br from-pink-500 to-orange-400 text-white focus:ring-4 focus:ring-pink-200 enabled:hover:bg-gradient-to-bl dark:focus:ring-pink-800",
"purpleToBlue": "bg-gradient-to-br from-purple-600 to-cyan-500 text-white focus:ring-4 focus:ring-cyan-300 enabled:hover:bg-gradient-to-bl dark:focus:ring-cyan-800",
"purpleToPink": "bg-gradient-to-r from-purple-500 to-pink-500 text-white focus:ring-4 focus:ring-purple-200 enabled:hover:bg-gradient-to-l dark:focus:ring-purple-800",
"redToYellow": "bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 text-gray-900 focus:ring-4 focus:ring-red-100 enabled:hover:bg-gradient-to-bl dark:focus:ring-red-400",
"tealToLime": "bg-gradient-to-r from-teal-200 to-lime-200 text-gray-900 focus:ring-4 focus:ring-lime-200 enabled:hover:bg-gradient-to-l enabled:hover:from-teal-200 enabled:hover:to-lime-200 enabled:hover:text-gray-900 dark:focus:ring-teal-700"
},
"inner": {
"base": "flex items-stretch transition-all duration-200",
"position": {
"none": "",
"start": "rounded-r-none",
"middle": "rounded-none",
"end": "rounded-l-none"
},
"outline": "border border-transparent",
"isProcessingPadding": {
"xs": "pl-8",
"sm": "pl-10",
"md": "pl-12",
"lg": "pl-16",
"xl": "pl-20"
}
},
"label": "ml-2 inline-flex h-4 w-4 items-center justify-center rounded-full bg-cyan-200 text-xs font-semibold text-cyan-800",
"outline": {
"color": {
"gray": "border border-gray-900 dark:border-white",
"default": "border-0",
"light": ""
},
"off": "",
"on": "flex w-full justify-center bg-white text-gray-900 transition-all duration-75 ease-in group-enabled:group-hover:bg-opacity-0 group-enabled:group-hover:text-inherit dark:bg-gray-900 dark:text-white",
"pill": {
"off": "rounded-md",
"on": "rounded-full"
}
},
"pill": {
"off": "rounded-lg",
"on": "rounded-full"
},
"size": {
"xs": "px-2 py-1 text-xs",
"sm": "px-3 py-1.5 text-sm",
"md": "px-4 py-2 text-sm",
"lg": "px-5 py-2.5 text-base",
"xl": "px-6 py-3 text-base"
}
}