Rethinking React Styling for the RSC Era

This ad is not shown to multipass and full ticket holders
JS Nation
JSNation 2026
June 11 - 15, 2026
Amsterdam & Online
The main JavaScript conference of the year
Learn More
In partnership with Focus Reactive
Upcoming event
JSNation 2026
JSNation 2026
June 11 - 15, 2026. Amsterdam & Online
Learn more
Bookmark
Rate this content

React’s styling landscape is evolving fast. With Server Components, Tailwind v4, and the next era of CSS standards, our old habits need an upgrade. In this talk, we’ll put CSS Modules, Tailwind CSS, and CSS-in-JS to the test against real-world demands like server-side rendering, streaming UI, scalable theming, and runtime performance. You’ll learn how styling choices impact payload size, async behavior, and design system consistency at scale. We’ll break down hidden trade-offs between utility-first, scoped CSS, and runtime CSS-in-JS approaches. Expect a practical decision-making framework you can apply immediately to your projects, one that balances developer experience with production performance. You’ll leave with a modern roadmap for building React apps that are styled to last.

This talk has been presented at React Advanced 2025, check out the latest edition of this React Conference.

FAQ

In 2025, the main styling approaches for React include scoped CSS with CSS modules, utility-first frameworks like Tailwind CSS, and compile-time CSS in JS solutions like Panda CSS.

Runtime CSS and JS solutions like styled-components are not suitable for React Server Components because they rely on React context, which server components cannot access. This incompatibility makes styling difficult across server-client boundaries without using client-side JavaScript, which is not preferred in server-first architectures.

The key requirement for a styling library in 2025 is to generate static zero runtime CSS at build time. This aligns with the server-first architecture that React is moving towards.

Tailwind CSS offers unmatched speed and productivity, allowing developers to build UIs quickly. It enforces a consistent design system and has a zero runtime cost, making it suitable for server-first architectures.

Panda CSS is a compile-time CSS in JS solution that provides the developer experience of CSS and JS with the performance of static CSS. It offers type safety and a powerful Variants API, making it suitable for teams preferring code-located styles without a runtime cost.

CSS modules offer simplicity and no vendor lock-in, providing clean separation of concerns. However, they can be clunky for dynamic styling and lack robust type safety, making them slower for rapid prototyping.

Tailwind CSS uses native CSS properties for theming, allowing seamless styling across server-client boundaries. Tailwind version four includes a theme directive that compiles design tokens into CSS variables, accessible on both server and client sides.

The main criticism of Tailwind CSS is the potential for "class name soup," which can clutter JSX markup. There are also philosophical concerns about unlearning CSS fundamentals and the risk of vendor lock-in due to its deep integration in markup.

CSS modules are ideal for projects where long-term stability and minimizing dependencies are more important than initial development speed. They are a safe choice in a fast-evolving ecosystem with no vendor lock-in.

Bree Hall
Bree Hall
19 min
01 Dec, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Bree discusses the evolution of React styling with React 19, Tailwind, and server-side rendering components, emphasizing static CSS generation. The shift towards native CSS and CSS modules for better scalability and control, and the rise in popularity of Tailwind CSS for its utility-first approach. Challenges in React styling implementations include runtime libraries, streaming UI, scalable theming, and overhead reduction. Panda CSS emerges as a potential successor to Tailwind CSS, offering a blend of CSS and JS experience. Styling decisions in 2025 are philosophical, with Tailwind for speed, Panda CSS for complex design systems, and CSS modules for stability.

1. Evolving React Styling Landscape

Short description:

Bree discusses the evolution of React styling, highlighting the impact of React 19, Tailwind, and server-side rendering components. The focus is on the shift towards static CSS generation at build time and the implications for styling approaches in 2025.

Hey everyone, I hope that you all are having an amazing time so far at React Advanced. Welcome to Rethinking React Styling for the RSC Era. I'm Bree, a senior developer advocate at Atlassian, and I'm so excited to be here with you all today. I'm always really curious, so let me know in the chat below what your favorite method of styling React applications is, because I don't know if you all have been in the group chats lately, but styling React components has gotten just a little bit spicy. React 19 has dropped, Tailwind has reinvented itself, native CSS is in its glow-up era, and even the core maintainer of styled components said maybe it's time to move on.

So today we're unpacking what's really going on with styling in 2025, what holds up, what's falling apart, and how to choose a styling approach that does not have you crying in your code reviews like I used to be. It feels like every couple of years we have to have the talk, right? We get really comfortable with tools, we pick our favorite methods, we have our workflows that are feeling really nice and really smooth, and then something comes along and flips the whole table over. Now, in the past few years, that something has been React Server components, but it doesn't really feel like it's just flipped the table. It kind of feels like it's redefined how we actually should be styling our applications.

For the next 20 minutes, we're going to untangle this mess and talk about how to make smart, future-proof decisions for styling your projects. Because in late 2025, there's a new litmus test for every styling library, and honestly, it's pretty simple. The question is, can you generate static zero runtime CSS at build time? If your styling solution needs a JavaScript runtime on the client to inject files, it's fundamentally at odds with the server-first feature that React is building. So this single requirement has honestly caused a really big shift in our ecosystem. It's forced some migrations, it's elevated a new class of contenders. So today, we're going to talk about the three dominant philosophies, and we're going to put them to the test.

2. Rethinking React Styling Approaches

Short description:

Discussion on CSS modules, Tailwind, and compile-time CSS/JS. Styled components maintenance mode highlights incompatibility with server components due to React context access limitations, leading to a significant community reaction and a shift towards philosophical considerations in software development.

We're going to talk about scope CSS with CSS modules, utility-first frameworks with Tailwind, and also the new compile-time CSS and JS. Let's dive in.

First, we've got to acknowledge the elephant in the room, the paradigm that defined an era of React development, runtime, CSS, and JS. Earlier this year, the maintainer of styled components officially announced that it was in maintenance mode and that they no longer recommended it for new projects. This wasn't really a surprise to anyone, but it did feel like a significant event.

So why the incompatibility? It all comes down to one simple fact. Server components cannot access React context. If we think for a quick second about how frameworks like styled components or how emotion works, you basically wrap your app inside of a theme provider, which uses the context to pass down your theme down the tree. Then, in your component, the library uses that theme context plus a JavaScript runtime to dynamically generate and inject a style tag into the document head.

So the community reaction to this news has been a little bit of sadness, a lot of frustration, especially for those with large legacy code bases, and a collective sense of good riddance from a lot of people as well. This has kicked off what I feel like is a little bit of a great migration. Some teams are trying to figure out what their exit strategy is going to be. It's not just a technical migration at this point; it's also a philosophical one about how we actually want to approach building software in 2025.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Build a Design System with React and Tailwind CSS
React Summit 2022React Summit 2022
27 min
Build a Design System with React and Tailwind CSS
Top Content
This Talk discusses design systems and how to build one using React and Tailwind CSS. Tailwind CSS provides utility classes for building complex layouts without writing CSS rules. Custom colors can be added to the Tailwind CSS config file, and font styles and text sizes can be customized. The entire Tailwind CSS configuration can be customized to meet specific requirements. Base styles can be added to the config file itself using a plugin. Reusable components can be created with Tailwind CSS, allowing for easy customization of size and color.
Rethinking CSS - Introducing Stylex
React Finland 2021React Finland 2021
25 min
Rethinking CSS - Introducing Stylex
Top Content
CSS + superpowers - bloat. How Stylex creates a zero-cost abstraction that gives CSS superpowers.
The New Defaults of the Modern Web
JSNation 2025JSNation 2025
10 min
The New Defaults of the Modern Web
Top Content
The speaker reflects on past experiences developing various websites, highlighting challenges faced in achieving visually unique sites with similar functionalities. They discuss hacks used in web development, the evolution of CSS and web APIs, and express a desire for modern web defaults. Challenges with mobile viewport height on touch devices are described, along with the evolution of hacks into simpler CSS solutions. The evolution of scroll behavior, scroll snapping challenges, and scrolling interception techniques are also discussed. The text covers animation challenges, transitioning to promise-based animations, and the use of frameworks for animations and view transitions in web development.
Type-safe Styling for React Component Packages: Vanilla Extract CSS
React Advanced 2023React Advanced 2023
19 min
Type-safe Styling for React Component Packages: Vanilla Extract CSS
Watch video: Type-safe Styling for React Component Packages: Vanilla Extract CSS
Today's Talk introduces Vanilla Extract CSS, a type-safe styling method for React applications. It combines the benefits of scoped styling, zero runtime overhead, and a great developer experience. Vanilla Extract generates a static CSS file at build time, resulting in better performance. It is framework agnostic and offers a powerful toolkit, including Sprinkles for utility classes and CSS utils for calculations. With type safety and the ability to define themes and variants, Vanilla Extract makes it easy to create efficient, scalable, and maintainable design system component packages.
How to achieve layout composition in React
React Summit 2022React Summit 2022
8 min
How to achieve layout composition in React
This talk discusses achieving layout composition in React using Bedrock Layout Primitives. By componentizing CSS layout, complex layouts can be achieved and reused across different components. The talk also covers the challenges of achieving complex layouts, such as card lineups, and provides solutions for maintaining alignment and responsiveness. The BedrockLayout primitive library simplifies web layouts and offers flexibility in composing layouts.
Moving on From Runtime Css-In-Js at Scale
React Summit 2023React Summit 2023
29 min
Moving on From Runtime Css-In-Js at Scale
Watch video: Moving on From Runtime Css-In-Js at Scale
This Talk explores the evolution of styling architecture, dynamic theming with style components, and optimizing style updates. It discusses the challenges of CSS migration and the choice between JavaScript and CSS native tooling. The Talk also touches on CSS tools and libraries, including Tailwind CSS and CSS in JS major libraries like MUI. The importance of picking a stack based on team members' strengths and the use of namespacing CSS for conflict-free dependency trees are highlighted.