Hey, I led engineering teams for a while, but I missed building — so I'm back to doing what I love. Rarely on the market, but open to the right remote (or relocation) fullstack or AI engineer role. Let's talk — I'm available now
Published
4 min read

Trevor I. Lasn

Builder, founder, based in Tartu, Estonia. Been coding for over a decade, led engineering teams, writing since 2015.

All You Need To Know About CSS-in-JS

An overview of CSS-in-JS and its relevance in modern web development

CSS-in-JS brings CSS to the component level, moving away from the traditional document-level styling approach.

You’ve likely come across terms like CSS-in-JS, Styled Components, Radium, and Aphrodite.

You might be wondering, “Why should I care? I’m perfectly fine with CSS in traditional .css files.”

CSS-in-JS is a topic that often sparks debate. I encourage you to keep an open mind and consider if it might enhance your workflow. Ultimately, the goal is to use tools that make you more efficient and content in your work.

Maintaining a large collection of stylesheets has always felt cumbersome to me, so I’m always looking for new approaches.

Many developers are curious about alternative styling methods. CSS-in-JS has emerged as one of the most promising concepts. Let’s explore why it might be worth trying.

What is CSS-in-JS?

import styled from 'styled-components'
// Create a Title component that'll render an <h1> tag with some styles
const Title = styled.h1`
font-size: 1.5em;
text-align: center;
color: #BF4F74;
`;
// Create a Wrapper component that'll render a <section> tag with some styles
const Wrapper = styled.section`
padding: 4em;
background: papayawhip;
`;
// Use Title and Wrapper like any other React component – except they're styled!
render(
<Wrapper>
<Title>
Hello World!
</Title>
</Wrapper>
);

CSS-in-JS is a powerful abstraction over traditional CSS. It allows you to describe styles using JavaScript in a declarative and maintainable way. This approach leverages JavaScript’s capabilities to manage CSS at runtime and even server-side. It’s framework-agnostic, lightweight (around 6KB minified and gzipped), and extensible through a plugin API.

It’s important to note that inline styles and CSS-in-JS are not the same. Here’s a demonstration to clarify the difference.

The Difference

Not all CSS features can be replaced by JavaScript event handlers. For example, pseudo-selectors like :disabled, :before, and :nth-child aren’t possible with inline styles, and styling html and body tags is not supported.

However, with CSS-in-JS, you can use the full range of CSS features. Since it generates actual CSS, you can use any media query or pseudo-selector you need. Some libraries, like jss and styled-components, even add support for non-native features like nesting!

Why Not Just Stick With CSS?

Traditionally, we’ve used CSS at the document level, but modern web development revolves around components, not pages. CSS was not originally designed for a component-based approach. CSS-in-JS addresses this gap. A shout-out to Vue for handling this well, although Vue’s styles don’t have access to component state.

What Are the Benefits of Using CSS-in-JS?

  • Component-Based Thinking: Manage styles at the component level, eliminating the need to maintain numerous stylesheets.
  • Leverages JavaScript’s Power: Enhance CSS by tapping into JavaScript’s ecosystem.
  • True Isolation of Rules: CSS-in-JS ensures that styles don’t unintentionally inherit properties from parent elements, thanks to tools like the jss-isolate plugin.
  • Scoped Selectors: CSS-in-JS prevents selector collisions by generating unique class names, unlike traditional CSS, which has a global namespace.
  • Automatic Vendor Prefixing: No need to worry about vendor prefixes; they’re handled for you.
  • Code Sharing: Easily share constants and functions between your JavaScript and CSS.
  • Efficient DOM Management: Only the styles currently in use are rendered in the DOM, reducing clutter.
  • Dead Code Elimination: Unused styles are removed automatically.
  • CSS Unit Testing: You can write unit tests for your styles.

What Are the Drawbacks of Using CSS-in-JS?

  • Learning Curve: It takes time to learn this new approach.
  • Additional Dependencies: You’ll need to manage new libraries in your project.
  • Onboarding Challenges: New team members might take longer to adapt to a codebase using CSS-in-JS.
  • Challenging the Status Quo: Introducing CSS-in-JS might disrupt established workflows, though this isn’t necessarily a bad thing.

Despite these challenges, the advantages of CSS-in-JS far outweigh the drawbacks. It’s worth giving it a try!

All of these libraries offer extensive functionality, including theming, dynamic props, server-side rendering, and more.


Found this article helpful? You might enjoy my free newsletter. I share dev tips and insights to help you grow your coding skills and advance your tech career.


Check out these related articles that might be useful for you. They cover similar topics and provide additional insights.

Webdev
12 min read

Robust Data Fetching Architecture For Complex React/Next.js Apps

How I use the 'Three Layers of Data' architecture pattern for React and Next.js apps to avoid common pitfalls, tech debt, and improve performance

May 4, 2025
Read article
Javascript
3 min read

JavaScript's &&= Operator: Understanding Logical AND Assignment

Use the &&= operator to safely update truthy values while preserving falsy states

Nov 5, 2024
Read article
Webdev
4 min read

LH and RLH: The CSS Units That Make Vertical Spacing Easy

Exploring new CSS line-height units that eliminate guesswork from vertical rhythm

Dec 3, 2024
Read article
Webdev
4 min read

Speed Up Your Website With rel='preconnect' and increase PageSpeed Insights Score

Using link rel='preconnect' can improve your website's performance by reducing connection setup times to key external domains.

Sep 13, 2024
Read article
Tech
5 min read

Cloudflare Study: 39% of Companies Losing Control of Their IT and Security Environment

New research reveals a shocking loss of control in corporate IT environments

Oct 3, 2024
Read article
Tech
3 min read

The Credit Vacuum

Being a developer sometimes feels like being the goalkeeper in a soccer match. You make a hundred great saves, and no one bats an eye. But let one ball slip through, and suddenly you're the village idiot.

Oct 7, 2024
Read article
Reflections
3 min read

Engineers Make the Best CEOs

Technical founders understand the product, ship faster, and make better decisions. Here's why engineering experience creates exceptional leaders.

Nov 6, 2025
Read article
Reflections
3 min read

When Tasked with a Problem, Start with the Bigger Picture

When faced with a challenge, I always step back to see the whole picture first. It's like pausing a complex strategy game to study the map. You might lose a few seconds of play time, but you gain a crucial understanding of the battlefield.

Oct 3, 2024
Read article
Tech
3 min read

Open-source is where dreams go to die

Work for free and in return watch your passion get crushed by entitled users who are never satisfied

Feb 26, 2025
Read article

This article was originally published on https://www.trevorlasn.com/blog/all-you-need-to-know-about-css-in-js. It was written by a human and polished using grammar tools for clarity.