Emotion vs Glamorous vs styled-components

Get Advice Icon

Need advice about which tool to choose?Ask the StackShare community!

Emotion
Emotion

65
57
+ 1
0
Glamorous
Glamorous

6
13
+ 1
0
styled-components
styled-components

328
149
+ 1
1

What is Emotion?

Emotion is a performant and flexible CSS-in-JS library. Building on many other CSS-in-JS libraries, it allows you to style apps quickly with string or object styles. It has predictable composition to avoid specificity issues with CSS. With source maps and labels, Emotion has a great developer experience and great performance with heavy caching in production.

What is Glamorous?

Glamorous is React component styling solved with an elegant (inspired) API, small footprint (<5kb gzipped), and great performance (via glamor). It has a very similar API to styled-components and uses similar tools under the hood (glamor).

What is styled-components?

Visual primitives for the component age. Use the best bits of ES6 and CSS to style your apps without stress 💅
Get Advice Icon

Need advice about which tool to choose?Ask the StackShare community!

Why do developers choose Emotion?
Why do developers choose Glamorous?
Why do developers choose styled-components?
    Be the first to leave a pro
      Be the first to leave a pro
        Be the first to leave a con
          Be the first to leave a con
            Be the first to leave a con
            What companies use Emotion?
            What companies use Glamorous?
            What companies use styled-components?

            Sign up to get full access to all the companiesMake informed product decisions

            What tools integrate with Emotion?
            What tools integrate with Glamorous?
            What tools integrate with styled-components?

            Sign up to get full access to all the tool integrationsMake informed product decisions

            What are some alternatives to Emotion, Glamorous, and styled-components?
            React Router
            React Router is a complete routing solution designed specifically for React.js. It painlessly synchronizes the components of your application with the URL, with first-class support for nesting, transitions, and server side rendering.
            Ant Design
            An enterprise-class UI design language and React-based implementation. Graceful UI components out of the box, base on React Component. A npm + webpack + babel + dora + dva development framework.
            Angular CLI
            A command-line interface tool that you use to initialize, develop, scaffold, and maintain Angular applications. You can use the tool directly in a command shell, or indirectly through an interactive UI such as Angular Console.
            AngularUI
            UI-Modules Standalone AngularUI modules.
            Vue CLI
            Vue CLI aims to be the standard tooling baseline for the Vue ecosystem. It ensures the various build tools work smoothly together with sensible defaults so you can focus on writing your app instead of spending days wrangling with config.
            See all alternatives
            Decisions about Emotion, Glamorous, and styled-components
            Russel Werner
            Russel Werner
            Lead Engineer at StackShare · | 11 upvotes · 104K views
            atStackShareStackShare
            Sass
            Sass
            HAML
            HAML
            React
            React
            Glamorous
            Glamorous
            JavaScript
            JavaScript
            Emotion
            Emotion
            #Inlinecss

            When we rebooted our front-end stack earlier this year, we wanted to have a consolidated and friendly developer experience. Up to that point we were using Sass and BEM. There was a mix of HAML views, React components and Angular. Since our ongoing development was going to be exclusively in React, we wanted to shift to an inline styling library so the "wall of classnames" could be eliminated. The ever-shifting landscape of inline CSS libraries for React is sometimes difficult to navigate.

            We decided to go with Glamorous for a few reasons:

            1) Previous team experience with this library 2) We can write our styles in plain JavaScript (which brings many benefits) 3) It supports server-side rendering 4) It has great composition patterns

            As you may or may not know, Glamorous has ceased active development and been mostly superseded by Emotion. We are planning to migrate to either Emotion or @styled-components in the near future, and I'll write another Stack Decision when we get there!

            #inlinecss

            See more
            React
            React
            GraphQL
            GraphQL
            Apollo
            Apollo
            JavaScript
            JavaScript
            TypeScript
            TypeScript
            Webpack
            Webpack
            React Helmet
            React Helmet
            styled-components
            styled-components
            Sass
            Sass
            Less
            Less
            PostCSS
            PostCSS
            Bootstrap
            Bootstrap
            Semantic UI
            Semantic UI
            Foundation
            Foundation
            React Router
            React Router
            Koa
            Koa
            #JSX
            #React.
            #Css
            #StyledComponents.
            #Async
            #HTML
            #GraphQL
            #Apollo

            ReactQL is a React + GraphQL front-end starter kit. #JSX is a natural way to think about building UI, and it renders to pure #HTML in the browser and on the server, making it trivial to build server-rendered Single Page Apps. GraphQL via Apollo was chosen for the data layer; #GraphQL makes it simple to request just the data your app needs, and #Apollo takes care of communicating with your API (written in any language; doesn't have to be JavaScript!), caching, and rendering to #React.

            ReactQL is written in TypeScript to provide full types/Intellisense, and pick up hard-to-diagnose goofs that might later show up at runtime. React makes heavy use of Webpack 4 to handle transforming your code to an optimised client-side bundle, and in throws back just enough code needed for the initial render, while seamlessly handling import statements asynchronously as needed, making the payload your user downloads ultimately much smaller than trying to do it by hand.

            React Helmet was chosen to handle <head> content, because it works universally, making it easy to throw back the correct <title> and other tags on the initial render, as well as inject new tags for subsequent client-side views.

            styled-components, Sass, Less and PostCSS were added to give developers a choice of whether to build styles purely in React / JavaScript, or whether to defer to a #css #preprocessor. This is especially useful for interop with UI frameworks like Bootstrap, Semantic UI, Foundation, etc - ReactQL lets you mix and match #css and renders to both a static .css file during bundling as well as generates per-page <style> tags when using #StyledComponents.

            React Router handles routing, because it works both on the server and in the client. ReactQL customises it further by capturing non-200 responses on the server, redirecting or throwing back custom 404 pages as needed.

            Koa is the web server that handles all incoming HTTP requests, because it's fast (TTFB < 5ms, even after fully rendering React), and its natively #async, making it easy to async/await inside routes and middleware.

            See more
            Johnny Bell
            Johnny Bell
            Senior Software Engineer at StackShare · | 13 upvotes · 248.2K views
            atStackShareStackShare
            Markdown
            Markdown
            React
            React
            GraphQL
            GraphQL
            Ruby
            Ruby
            Showdown
            Showdown
            Glamorous
            Glamorous
            Emotion
            Emotion
            styled-components
            styled-components
            #Frontend
            #CssInJs
            #StackDecisionsLaunch

            For Stack Decisions I needed to add Markdown in the decision composer to give our users access to some general styling when writing their decisions. We used React & GraphQL on the #Frontend and Ruby & GraphQL on the backend.

            Instead of using Showdown or another tool, We decided to parse the Markdown on the backend so we had more control over what we wanted to render in Markdown because we didn't want to enable all Markdown options, we also wanted to limit any malicious code or images to be embedded into the decisions and Markdown was a fairly large to import into our component so it was going to add a lot of kilobytes that we didn't need.

            We also needed to style how the markdown looked, we are currently using Glamorous so I used that but we are planning to update this to Emotion at some stage as it has a fairly easy upgrade path rather than switching over to styled-components or one of the other cssInJs alternatives.

            Also we used React-Mentions for tagging tools and topics in the decisions. Typing @ will let you tag a tool, and typing # will allow you to tag a topic.

            The Markdown options that we chose to support are tags: a, code, u, b, em, pre, ul, ol, li.

            If there are anymore tags you'd love to see added in the composer leave me a comment below and we will look into adding them.

            #StackDecisionsLaunch

            See more
            Robert Zuber
            Robert Zuber
            CTO at CircleCI · | 16 upvotes · 297.1K views
            atCircleCICircleCI
            Next.js
            Next.js
            React
            React
            Storybook
            Storybook
            TypeScript
            TypeScript
            Emotion
            Emotion
            GraphQL
            GraphQL
            Apollo
            Apollo
            Jest
            Jest
            Percy
            Percy
            Cypress
            Cypress

            We are in the process of adopting Next.js as our React framework and using Storybook to help build our React components in isolation. This new part of our frontend is written in TypeScript, and we use Emotion for CSS/styling. For delivering data, we use GraphQL and Apollo. Jest, Percy, and Cypress are used for testing.

            See more
            Interest over time
            Reviews of Emotion, Glamorous, and styled-components
            No reviews found
            How developers use Emotion, Glamorous, and styled-components
            Avatar of Volkan Özçelik
            Volkan Özçelik uses styled-componentsstyled-components

            For styling components, styled-components work great (really!)

            You don’t have to use it for everything. You can still use good old CSS classes along with your styled components.

            What I do generally is to separate the “layout”, “typography”, “vertical rhythm”, and “reset” to good old CSS, and style the rest of the app with styled components.

            How much does Emotion cost?
            How much does Glamorous cost?
            How much does styled-components cost?
            Pricing unavailable
            Pricing unavailable
            Pricing unavailable
            News about Glamorous
            More news
            News about styled-components
            More news