My Thoughts on Tailwind
Published: ....
Last modified: ....
Share this post on BlueskySee discussion on Bluesky
For a while now I've been pretty dismissive of TailwindCSS, usually brushing it off as yet another BootstrapCSS alternative. However, I've started using it in several of my side projects and I think I've changed some of my opinions on it as a tool.
Background:
Before using Tailwind, I was using Vanilla Extract, and before that was using Styled Components. I pivoted from each tool to the next one because of other technical limitations. In the case of the change from Styled Components to Vanilla Extract it was because I wanted to move away from runtime styling solutions (partially to prepare for React Server Components).
The shift from Vanilla Extract to Tailwind was similar, but more of a developer
experience reason rather than for user experience. The short gist is that using
Vanilla Extract with a Next.js application is incredibly difficult to setup
"correctly". Yes there is a Next.js "plugin", but that doesn't work at all with
React Server Components within Next.js[1]Jump to footnote. For Tailwind
however, all I need to get it working is a tailwind.config.js
file and Next
does all the hard work for me!
Refined Thoughts:
After using Tailwind for a few weeks (both on my personal site here, as well as a few other side projects), I've been really enjoying it!
It's been nice not needing to worry about creating a separate file to maintain
styles (e.g. a .css.ts
file), or even maintain yet another build process
during development as well!
There are stil some quirks with using Tailwind in my experience that I'd love to polish up a bit more:
- Figuring out what class I need
- Handling overrides / style composition
Figuring out what class I need
This might just be the initial learning curve of using Tailwind, but I feel like
99 times out of 100 I usually use the wrong align-items: center
classname, and
this happens with a number of other things also (e.g. colors, font-weight, etc).
Some things that have helped with this:
- VS Code Tailwind extension
- Search Tailwind Raycast extension
- ChatGPT 🙃
Handling overrides / style composition
This one is a bit gnarly, and is really two issues:
- Working with a component library that has already defined a classname that I want to override
- Complex selectors (e.g. the "lobotomized owl selector")
I haven't found great solutions for either of these cases, for the second one
I've been reaching for adding a custom class in my globals.css
file and using
@apply
from Tailwind.
👆Back to reference See this long running issue trying to get it working within Next.js
Tags:
Related Posts
Web Development
Published: ....
I recently launched a rewrite and redesign of this personal website, I figured I'd talk a bit about the changes and new features that I added along the way!
Published: ....
A quick tip to implementing CSS theming that's compatible with Server Side Rendered applications!
Published: ....
A brief overview on how we launched The Bikeshed Podcast, including a deep dive in our recording and distribution workflows!
Published: ....
A quick tip outlining how to provide specific TypeScript type definitions for a local module!
Published: ....
Some rough thoughts on building a file-system routing based web application
Published: ....
Slicing software: why vertical is better than horizontal.
Published: ....
What if you could author an entire web application in a single file?
Published: ....
A quick way to handle resetting internal state in components when a parent form is submitted!
Published: ....
A brief look at Import Maps and package.json#imports to support isomorphic JavaScript applications!
Published: ....
A collection of tech talks that I regularly re-watch and also recommend to everyone!
Published: ....
Some features and functionality that I'd like within a React Server Component compatible framework.
Published: ....
A (running) collection of Bluesky tips, tools, packages, and other misc things!
Published: ....
A quick look at a small but powerful pattern I've been leveraging as of late!
Published: ....
A proposal for a minimal variant of TypeScript!
Published: ....
Sharing a few core recommendations when working within monorepos to make your life easier!
Published: ....
This is a quick post noting that Next.js should now work with Deno v2!
Published: ....
React components have a fundamental contract that is often unstated in their implementation, and you should know about it!
Published: ....
Replace that old useState and useEffect combo for a new and better option!
Published: ....
A quick look at the applications and tools that I (generally) use day to day for web development!
Published: ....
There are a variety of different markdown "standards" out there, and sometimes they're not all that consistent
Published: ....
Proposing a solution for sharing core "business" logic across services!
Published: ....
There's a common gotcha when creating Web Request and Response instances with Headers!
Published: ....
Feature toggles are often underused by most software development teams, and yet offer so much value during not only feature development but also refactors
Published: ....
A quick introduction to my new side project, hohoro. An incremental JS/TS library build tool!
Published: ....
Two neat tricks for enhancing your site's favicon!
Published: ....
The various risks and pitfalls of open source software run by corporations.
Published: ....
A monorepo template for managing a library and documentation together.
Published: ....
How we solved an almost show-stopping production bug, and how you can avoid it in your own projects.
Published: ....
A(nother) deep dive into one of my recent side projects; tails - a plain and simple cocktail recipe app.
Published: ....
When did semver major changes become so scary?
Published: ....
Leveraging service monitors properly to improve service observability.
Published: ....
A brief recap of how Wayfair changed it's CSS approach not once but twice in the span of 5 years!
Published: ....
A deep dive into one of my recent side projects; microfibre - a minimal text posting application
Published: ....
Pair programming can be good sometimes - but not all the time
Published: ....
A few thoughts on using Suspense with GraphQL to optimize application data loading
Published: ....
A few thoughts on what to do after you launch a new project
Published: ....
A few quick thoughts on burn out and taking a break
Published: ....
A few thoughts on managing complex UI component state within React
Published: ....
A quick overview of the new lifecycle methods introduced in React 16.3
Published: ....
A few thoughts and patterns for using styled-jsx or other CSS-in-JS solutions
Published: ....
A few thoughts on the redesign of my personal site, adopting Next.js and deploying via Now
Published: ....
A few weird things about JavaScript
Published: ....
Building a calendar web application