How to build a search bar component with Tailwind CSS and Flowbite
Tags: tailwindcss, flowbite, webdev, tutorial
Published: 2022-05-17 11:22:17

One of my favourite front-end stacks to work with when building website pages is Tailwind CSS and Flowbite because of the utility-first approach and the large collection of interactive components from Flowbite.

[Flowbite](https://flowbite.com) is the most popular component library built based on Tailwind CSS including interactive elements such as navbar, modals, datepickers, buttons, and more.

[Tailwind CSS](https://tailwindcss.com) is the most popular utility-first CSS framework that helps you develop websites much easier without having to leave your HTML.

Today I want to show you how you can build a pretty common component called a search bar that is often found on websites such as blogs, listing directories, applications, and more.

It can be used to allow the users to search pages and content based on a word or multiple words that will later be used in a database query.

Here's how it will look in the end:

[![Tailwind CSS Search Bar](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sscesopye8fzvx2ej8mt.png)](https://flowbite.com/docs/forms/search-input/)

Without further ado, let's get started!

## Tailwind CSS Search Bar

First of all we need to make sure that the HTML semantics are correct so we will use a `form` tag and an `input` tag for starters:

```
<form>   
    <label for="voice-search" class="sr-only">Search</label>
    <input type="text" id="voice-search" required>
    <button type="submit">Search</button>
</form>
```

There is not too much going on and it looks pretty simple, but we will soon style the component and also add some more elements.

Notice that we also added a `label` tag but we also hide it. This helps screen readers understand what the input stands for.

Now let's wrap input component into a `div` and add an icon inside with some Tailwind CSS classes to show a search icon at the start of the input:

```
<form class="flex items-center">   
    <label for="voice-search" class="sr-only">Search</label>
    <div class="relative w-full">
        <div class="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none">
            <svg class="w-5 h-5 text-gray-500 dark:text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg>
        </div>
        <input type="text" id="voice-search" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5" placeholder="Search Mockups, Logos, Design Templates..." required>
    </div>
    <button type="submit">Search</button>
</form>
```

Looking much better! Now let's also style the search button and add an icon inside it:

```
<form class="flex items-center">   
    <label for="voice-search" class="sr-only">Search</label>
    <div class="relative w-full">
        <div class="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none">
            <svg class="w-5 h-5 text-gray-500 dark:text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg>
        </div>
        <input type="text" id="voice-search" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5" placeholder="Search Mockups, Logos, Design Templates..." required>
    </div>
    <button type="submit" class="inline-flex items-center py-2.5 px-3 ml-2 text-sm font-medium text-white bg-blue-700 rounded-lg border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"><svg class="mr-2 -ml-1 w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>Search</button>
</form>
```

Maybe you have noticed but we also added a voice icon that you may use to active voice search. Add the following code:

```
<form class="flex items-center">   
    <label for="voice-search" class="sr-only">Search</label>
    <div class="relative w-full">
        <div class="flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none">
            <svg class="w-5 h-5 text-gray-500 dark:text-gray-400" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z" clip-rule="evenodd"></path></svg>
        </div>
        <input type="text" id="voice-search" class="bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5  dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="Search Mockups, Logos, Design Templates..." required>
        <button type="button" class="flex absolute inset-y-0 right-0 items-center pr-3">
            <svg class="w-4 h-4 text-gray-500 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M7 4a3 3 0 016 0v4a3 3 0 11-6 0V4zm4 10.93A7.001 7.001 0 0017 8a1 1 0 10-2 0A5 5 0 015 8a1 1 0 00-2 0 7.001 7.001 0 006 6.93V17H6a1 1 0 100 2h8a1 1 0 100-2h-3v-2.07z" clip-rule="evenodd"></path></svg>
        </button>
    </div>
    <button type="submit" class="inline-flex items-center py-2.5 px-3 ml-2 text-sm font-medium text-white bg-blue-700 rounded-lg border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"><svg class="mr-2 -ml-1 w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>Search</button>
</form>
```

Notice that we also added the dark variant classes. Here's how the search bar looks in dark mode:

[![Tailwind CSS Search Bar Dark Mode](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ivdp9kwucqyq9ewaaz0f.png)](https://flowbite.com/docs/forms/search-input/)

Awesome, that's about it! You can now use this component with any front-end and back-end technology like React, Vue, Laravel as it is a simple input.

This [Tailwind CSS search bar](https://flowbite.com/docs/forms/search-input/#search-bar-example) component is taken as an example from the Flowbite library and you can check out the whole collection of search bar variants on the official documentation:

[![Tailwind CSS Search Bar - Flowbite](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cmmagjaroakkreu6vbzi.png)](https://flowbite.com/docs/forms/search-input/#search-bar-example)

[![Tailwind CSS Search Bar Dropdown - Flowbite](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3eaw0b6e5mya85i1ctqu.png)](https://flowbite.com/docs/forms/search-input/#search-with-dropdown)

[![Tailwind CSS Simple Search - Flowbite](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zni4cdsknyffi579mbew.png)](https://flowbite.com/docs/forms/search-input/#simple-search-input)

[![Tailwind CSS Location Search - Flowbite](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4v3jzsij5f3a9jqirh1x.png)](https://flowbite.com/docs/forms/search-input/#location-search)

[![Tailwind CSS Voice Search - Flowbite](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/du0qn6t8dhypyge9uj10.png)](https://flowbite.com/docs/forms/search-input/#voice-search)

Useful links:

- [Tailwind CSS Search Bar - Flowbite](https://flowbite.com/docs/forms/search-input/)
- [Flowbite - Tailwind CSS Components](https://flowbite.com/docs/getting-started/introduction/)