Skip to content

afzalhussein/react-theming-styled-component

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

react-theming-styled-component

Theming with styled-components allows you to create a centralized theme object containing style-related properties, such as colors, typography, spacing, and more. This theme can then be used throughout your application to maintain consistent styles and easily switch between different visual themes.

Here's an example of how you can implement theming using styled-components:

First, let's define a theme object containing some style-related properties:

// theme.js
const theme = {
  colors: {
    primary: '#007bff',
    secondary: '#6c757d',
    success: '#28a745',
    danger: '#dc3545',
    // ...other color definitions
  },
  fonts: {
    body: 'Arial, sans-serif',
    heading: 'Roboto, sans-serif',
    // ...other font definitions
  },
  // ...other style-related properties
};

export default theme;

Now, create a styled-component theme provider that uses this theme object:

// ThemeProvider.js
import React from 'react';
import { ThemeProvider as StyledThemeProvider } from 'styled-components';
import theme from './theme';

const ThemeProvider = ({ children }) => (
  <StyledThemeProvider theme={theme}>
    {children}
  </StyledThemeProvider>
);

export default ThemeProvider;

This ThemeProvider component takes the theme object and uses ThemeProvider from styled-components to make it available to all styled-components within the component tree.

Next, let's create a component that utilizes the theme:

// Button.js
import styled from 'styled-components';

const Button = styled.button`
  padding: 10px 20px;
  font-family: ${(props) => props.theme.fonts.body};
  color: ${(props) => props.theme.colors.primary};
  background-color: ${(props) => props.theme.colors.secondary};
  border: 2px solid ${(props) => props.theme.colors.primary};
  border-radius: 5px;
  cursor: pointer;
  transition: background-color 0.3s ease, color 0.3s ease;

  &:hover {
    background-color: ${(props) => props.theme.colors.primary};
    color: ${(props) => props.theme.colors.secondary};
  }
`;

export default Button;

In this example, the Button component is created using styled-components. It uses values from the theme for color, font family, and other style properties.

Now, wrap your app with the ThemeProvider to enable the use of the theme:

// App.js
import React from 'react';
import ThemeProvider from './ThemeProvider';
import Button from './Button';

const App = () => (
  <ThemeProvider>
    <div>
      <h1>Theming with Styled Components</h1>
      <Button>Click me</Button>
    </div>
  </ThemeProvider>
);

export default App;

By wrapping your components in the ThemeProvider, the theme object is accessible within styled components via props.theme. This allows you to maintain consistent styles across your application and easily switch themes by modifying the theme object.

Adjust the theme object and the styles in styled-components according to your specific design requirements to achieve a coherent and customizable theming approach for your React application.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published