DEV Community

Cover image for Sinister Styled-Components: CSS in JS with Style
Josef Held
Josef Held

Posted on

Sinister Styled-Components: CSS in JS with Style

Delving into the shadows of modern web development reveals a powerful ally in the quest for styling applications—Styled-Components. This library melds the best of CSS and JavaScript, allowing developers to easily craft scalable, maintainable components. Styled-Components leverages tagged template literals to encapsulate styles in your components, ensuring that styles are scoped and avoiding the global namespace pollution that haunts traditional CSS.

Embracing the Power of Styled Components

Styled-Components brings the full might of JavaScript to CSS, enabling dynamic styling solutions that respond to props and state within your React components. This approach allows for truly reusable components tailored to specific needs without sacrificing readability or functionality.

Getting Started with Styled-Components

To unleash Styled-Components in your project, you need to install it first:

npm install styled-components
Enter fullscreen mode Exit fullscreen mode

This single command sets the stage for all the styling magic that follows.

Crafting Your First Styled Component

Imagine you want a button that changes color based on its importance level—a trivial task for Styled-Components:

import styled from 'styled-components';

const Button = styled.button`
  background-color: ${props => props.primary ? 'black' : 'white'};
  color: ${props => props.primary ? 'white' : 'black'};
  padding: 10px 20px;
  border: none;
  border-radius: 5px;
  cursor: pointer;

  &:hover {
    background-color: ${props => props.primary ? 'darkgrey' : 'lightgrey'};
  }
`;

function App() {
  return (
    <div>
      <Button primary>Important</Button>
      <Button>Not Important</Button>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Here, Button is a styled component with conditional styles based on its primary prop, showcasing the simplicity and power of integrating styles directly within your component logic.

Leveraging Advanced Features

Styled-Components isn't just about simple styles; it's equipped with tools to create complex, dynamic styles based on themes, global styles, and even animations:

  • Theming: Manage themes across your application to maintain consistency and make it easier to switch themes dynamically.
import { ThemeProvider } from 'styled-components';

const theme = {
  primary: 'blue',
  secondary: 'green'
};

<ThemeProvider theme={theme}>
  <App />
</ThemeProvider>
Enter fullscreen mode Exit fullscreen mode
  • Global Styles: Inject global styles into your application using the createGlobalStyle utility. This is perfect for setting base styles like body margins or font-sizes:
import { createGlobalStyle } from 'styled-components';

const GlobalStyle = createGlobalStyle`
  body {
    margin: 0;
    padding: 0;
    font-family: 'Open Sans', sans-serif;
  }
`;

function App() {
  return (
    <>
      <GlobalStyle />
      <div>Your App</div>
    </>
  );
}
Enter fullscreen mode Exit fullscreen mode
  • Animations: Define keyframe animations within your styled components to add life to your components:
import styled, { keyframes } from 'styled-components';

const fadeIn = keyframes`
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
`;

const FadeInDiv = styled.div`
  animation: ${fadeIn} 2s linear;
`;

function App() {
  return <FadeInDiv>Welcome to the world of Styled-Components!</FadeInDiv>;
}
Enter fullscreen mode Exit fullscreen mode

Like, Comment, Share

Dive into the enchanting world of Styled-Components to revolutionize how you style in JavaScript. If you've conjured up some wicked UIs with this tool or have tales of your styling conquests, share them below. Like this guide if it has illuminated the path for you, and share it with fellow developers who seek to master the dark arts of CSS in JS.

Top comments (0)