Skip to content

A plugin that provides a basic reset for form styles that makes form elements easy to override with utilities.

License

Notifications You must be signed in to change notification settings

tailwindlabs/tailwindcss-forms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@tailwindcss/forms

A plugin that provides basic default form styles that are easy to override with utilities. Hopefully the successor to @tailwindcss/custom-forms.

Installation

Install the plugin from npm:

# Using npm
npm install @tailwindcss/forms

# Using Yarn
yarn add @tailwindcss/forms

Then add the plugin to your tailwind.config.js file:

// tailwind.config.js
module.exports = {
  theme: {
    // ...
  },
  plugins: [
    require('@tailwindcss/forms'),
    // ...
  ],
}

Usage

View the live demo

All of the basic form elements you use will now have some sensible default styles that are easy to override with utilities.

Currently we add basic utility-friendly form styles for the following form element types:

  • input[type='text']
  • input[type='password']
  • input[type='email']
  • input[type='number']
  • input[type='url']
  • input[type='date']
  • input[type='datetime-local']
  • input[type='month']
  • input[type='week']
  • input[type='time']
  • input[type='search']
  • input[type='tel']
  • input[type='checkbox']
  • input[type='radio']
  • select
  • select[multiple]
  • textarea

Note that for text inputs, you must add the type="text" attribute for these styles to take effect. This is a necessary trade-off to avoid relying on the overly greedy input selector and unintentionally styling elements we don't have solutions for yet, like input[type="range"] for example.

Every element has been normalized/reset in a way that they look pretty great without doing anything to them at all:

<!-- This just looks good! -->
<input type="text">

The real benefit of this plugin however is that all of these elements are easy to modify on the fly with utilities, which is not possible with user agent form styles:

<!-- You can customize padding on a select element! Oh my god! -->
<select class="px-4 py-3 rounded-full">
  <!-- ... -->
</select>

We've baked in a few useful tricks, like making the checkbox and radio controls use currentColor for their checked state, so you can even customize how those look using text color utilities:

<!-- This will be blue when checked -->
<input type="checkbox" class="text-blue-500">

<!-- This will be pink when checked -->
<input type="checkbox" class="text-pink-500">

<!-- This will be green when checked -->
<input type="checkbox" class="text-green-500">

More customization examples and best practices coming soon.