In this section we will install & setup flowbite with laravel 9 vite. we will install flowbite with laravel breeze. Flowbite can be included as a plugin into an existing Tailwind CSS project and it is supposed to help you build websites faster by having a set of web components to work with built with the utility classes from Tailwind CSS.
Install Flowbite Tailwind CSS with Laravel 9 Vite
Create Laravel Project.
composer create-project --prefer-dist laravel/laravel laravel-flowbite
Install laravel breeze via composer
composer require laravel/breeze --dev
run below command publish config file
php artisan breeze:install
install & run npm
npm install && npm run dev
run below command to migrate
php artisan migrate
Run vite
# Run the Vite development server...
npm run dev
# Build and version the assets for production...
npm run build
In next terminal serve laravel app.
php artisan serve
Install & Setup Flowbite in laravel 9 Breeze vite
Install flowbite via npm:
npm i flowbite
Require Flowbite as a plugin inside the tailwind.config.js file:
const defaultTheme = require('tailwindcss/defaultTheme');
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
'./storage/framework/views/*.php',
'./resources/views/**/*.blade.php',
"./node_modules/flowbite/**/*.js"
],
theme: {
extend: {
fontFamily: {
sans: ['Nunito', ...defaultTheme.fontFamily.sans],
},
},
},
plugins: [require('@tailwindcss/forms'),require('flowbite/plugin')],
};
Require the flowbite.js file before the end of the <body> tag:
<script src="../path/to/flowbite/dist/flowbite.js"></script>
Alternatively, you can also include the JavaScript file using CDN:
<script src="https://unpkg.com/[email protected]/dist/flowbite.js"></script>
views/layouts/app.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Fonts -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:[email protected];600;700&display=swap">
<!-- Scripts -->
@vite(['resources/css/app.css', 'resources/js/app.js'])
</head>
<body class="font-sans antialiased">
<div class="min-h-screen bg-gray-100">
@include('layouts.navigation')
<!-- Page Heading -->
<header class="bg-white shadow">
<div class="px-4 py-6 mx-auto max-w-7xl sm:px-6 lg:px-8">
{{ $header }}
</div>
</header>
<!-- Page Content -->
<main>
{{ $slot }}
</main>
</div>
<script src="https://unpkg.com/[email protected]/dist/flowbite.js"></script>
</body>
</html>
Test Flowbite Tailwind CSS Tab Component in laravel blade file.
views/dashboard.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="text-xl font-semibold leading-tight text-gray-800">
{{ __('Dashboard') }}
</h2>
</x-slot>
<div class="py-12">
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
<div class="overflow-hidden bg-white shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
You're logged in!
</div>
<div class="mb-4 border-b border-gray-200 dark:border-gray-700">
<ul class="flex flex-wrap -mb-px text-sm font-medium text-center" id="myTab"
data-tabs-toggle="#myTabContent" role="tablist">
<li class="mr-2" role="presentation">
<button
class="inline-block p-4 text-blue-600 border-b-2 border-blue-600 rounded-t-lg hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 dark:border-blue-500"
id="profile-tab" data-tabs-target="#profile" type="button" role="tab"
aria-controls="profile" aria-selected="true">Profile</button>
</li>
<li class="mr-2" role="presentation">
<button
class="inline-block p-4 text-gray-500 border-b-2 border-transparent border-gray-100 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 dark:border-transparent dark:text-gray-400 dark:border-gray-700"
id="dashboard-tab" data-tabs-target="#dashboard" type="button" role="tab"
aria-controls="dashboard" aria-selected="false">Dashboard</button>
</li>
<li class="mr-2" role="presentation">
<button
class="inline-block p-4 text-gray-500 border-b-2 border-transparent border-gray-100 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 dark:border-transparent dark:text-gray-400 dark:border-gray-700"
id="settings-tab" data-tabs-target="#settings" type="button" role="tab"
aria-controls="settings" aria-selected="false">Settings</button>
</li>
<li role="presentation">
<button
class="inline-block p-4 text-gray-500 border-b-2 border-transparent border-gray-100 rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300 dark:border-transparent dark:text-gray-400 dark:border-gray-700"
id="contacts-tab" data-tabs-target="#contacts" type="button" role="tab"
aria-controls="contacts" aria-selected="false">Contacts</button>
</li>
</ul>
</div>
<div id="myTabContent">
<div class="p-4 rounded-lg bg-gray-50 dark:bg-gray-800" id="profile" role="tabpanel"
aria-labelledby="profile-tab">
<p class="text-sm text-gray-500 dark:text-gray-400">This is some placeholder content the <strong
class="font-medium text-gray-800 dark:text-white">Profile tab's associated
content</strong>. Clicking another tab will toggle the visibility of this one for the
next. The tab JavaScript swaps classes to control the content visibility and styling.</p>
</div>
<div class="hidden p-4 rounded-lg bg-gray-50 dark:bg-gray-800" id="dashboard" role="tabpanel"
aria-labelledby="dashboard-tab">
<p class="text-sm text-gray-500 dark:text-gray-400">This is some placeholder content the <strong
class="font-medium text-gray-800 dark:text-white">Dashboard tab's associated
content</strong>. Clicking another tab will toggle the visibility of this one for the
next. The tab JavaScript swaps classes to control the content visibility and styling.</p>
</div>
<div class="hidden p-4 rounded-lg bg-gray-50 dark:bg-gray-800" id="settings" role="tabpanel"
aria-labelledby="settings-tab">
<p class="text-sm text-gray-500 dark:text-gray-400">This is some placeholder content the <strong
class="font-medium text-gray-800 dark:text-white">Settings tab's associated
content</strong>. Clicking another tab will toggle the visibility of this one for the
next. The tab JavaScript swaps classes to control the content visibility and styling.</p>
</div>
<div class="hidden p-4 rounded-lg bg-gray-50 dark:bg-gray-800" id="contacts" role="tabpanel"
aria-labelledby="contacts-tab">
<p class="text-sm text-gray-500 dark:text-gray-400">This is some placeholder content the <strong
class="font-medium text-gray-800 dark:text-white">Contacts tab's associated
content</strong>. Clicking another tab will toggle the visibility of this one for the
next. The tab JavaScript swaps classes to control the content visibility and styling.</p>
</div>
</div>
</div>
</div>
</div>
</x-app-layout>
Run vite
# Run the Vite development server...
npm run dev
# Build and version the assets for production...
npm run build
In next terminal serve laravel app.
php artisan serve