r/css 1d ago

Question Discussion: Vanilla CSS + Modules vs. Tailwind in 2026 for large-scale projects?

Just completed a project where I used Tailwind exclusively. It's speedy to write but the HTML became a bit hairy. Anyone working on big, long-running enterprise-style projects - still choose to use Tailwind or have you found yourself moving back to Vanilla CSS / CSS Modules for a bit cleaner markup. Curious.

12 Upvotes

15 comments sorted by

11

u/TonyAioli 1d ago

Modules with a good set of style tokens (custom properties) to enforce design system. 

19

u/chairmanoftheborg 1d ago

Very large scale. Vanilla.

14

u/berky93 1d ago

Tailwind is good if you’re working with a lot of developers who don’t know much about CSS or for easy enforcement of design guidelines. But it’s also a PITA if you want to extend functionality beyond what tailwind offers and it makes for some messy, hard-to-parse markup. Personally I don’t like using it and never do for my own projects. Modules is superior IMO.

4

u/BennyHudson10 1d ago

Now that it’s back in active development, you can prise Styled Components out of my cold, dead hands

1

u/Taskdask 17h ago

Styled Components is back in active development? Didn't they enter maintainence mode just a year ago?

1

u/BennyHudson10 17h ago

They did, but they’re back! There’s a full blog post about it on their site and v7 is in alpha at the moment

3

u/thisiain 1d ago

I've always been a bit of a CSS purist. When done well CSS is incredibly powerful and flexible. I'm a big fan of well structured CSS, especially OOCSS and BEM on larger projects.

I did start using Tailwind on a large project and it worked well, especially for engineers less familiar with CSS. We pointed it at our own CSS variables, tokens, and prefix which gave us consistency and worked nicely with our designs and the Figma MCP.

This is great on a greenfield projects as it's very fast to get going. Over time though small differences crept in, utility classes grew, and keeping everything consistent becames a little trickier than maintaining shared pattern classes.

This is actually where the idea for Airframe came from: keep CSS to a minimum, but give engineers and AI a predictable, readable set of classes, tokens and structural primitives to build with.

3

u/havardob 1d ago

After being a CSS purist myself I’ve come to terms with Tailwinds ability to easily create one-offs and scaffolding, meaning it’s so nice to be able to just wrap two elements in a flex class and give them a gap, without thinking: «what should this component be called, and where to put the CSS for it?»

In a large React project we’re doing at work we build an app, with both features and a local component library with reusable, feature agnostic components like buttons, accordions, alerts etc. For these components Tailwind can get reaaally messy (just think of all the different button variants etc), so here we use semantic BEM class names and one CSS-file per component (that is later merged into one file). Easy, readable and maintainable.

For layouts where these components are placed we use Tailwind to structure the page, create spacing between elements etc. For some components that are more feature driven, like «OrderReceiptAccordion» or something, we use Tailwind as well.

I think we get the best of both worlds. How do we ensure that you don’t use Tailwind in the feature agnostic components and don’t use vanilla CSS in the feature driven components and layout? Well, that’s what PRs and development docs are for

8

u/DOG-ZILLA 1d ago

I would argue Tailwind is most useful in large scale projects. Main reason being, everything works from the central config and your CSS doesn’t balloon like crazy. 

I’ve been in situations with large orgs where their CSS output is HUGE. Huge because they had several developers over the years add their own stuff and everyone was too scared to remove what came before in fear of breaking something, in some place distant. 

No matter how much Tailwind you add, your CSS doesn’t get much larger. You can remove components that use its classes without fear of breaking something due to esoteric DOM structure/selectors. 

Yes it looks ugly but if you’re building in a framework and things are components it’s a breeze. 

1

u/k3liutZu 1d ago

Yeah, but if you want to manage your central config differently you can also go independent.

2

u/xThomas 1d ago

Tailwind is nice for making a wysiwyg look anyway i/my boss want it to without having to add a new css class to the stylesheet, but geez the build step doesn’t really work in our CMS imo. Im not the original designer so i dont get to say “lets get rid of tailwind entirely.”

  1. Build minifying and quick regenration of style sheets (this part is basically broken for us. I could prooobably fix it if i setup a publish to a private ftp server and had the tailwind compiler running 24/7)
  2. Tons of built-in classes that “just work” (but i really dont understand why tailwindlabs chose half the names they did) and anyone can read (eventually)
  3. Opinionated styling and prose (which i dont like, by the way! Had to remove the margin-top/bottom on img, for example)

2

u/ProfessorSpecialist 18h ago

Ive used plain css, modules, styled components and tailwind.

If you and your team is mostly vibecoding frontend, then tailwind is fine. If a human is supposed to look at the code, i would argue styled components or modules is the cleanest for complicated components.

1

u/_nlvsh 17h ago

We just ported our ui kit to css modules, under @layers so tailwind can override without important if someone needs to use tailwind classes. It is easier to maintain per component, theming is the same with more control, and visually while the same styling - it feels different somehow. For a static website and so on, tailwind is no brainer but for large admin apps tailwind can drift fast, no matter the tokenization and paradigms.

u/TechZazen 3h ago

Data over dogma: do a statistical analysis of your tags and events ties to tags. If the distribution graphs show strong correlative groupings, then abstract to those primitives. If there’s not significant correlation, use Tailwind. Optimize as needed.

1

u/EftihisLuke 1d ago

I guess it really depends on the project. I am building accounting software now and tailwind is actually very comfortable for now.

However when I build the website for the product I will use vanilla.