Published on

How to Style React-Bootstrap with Styled-Components

Authors
  • Name
    Ripal & Zalak
    Twitter

How to Style React-Bootstrap with Styled-Components

React-Bootstrap is a popular UI framework, and styled-components is a powerful CSS-in-JS library. The good news is that they can work seamlessly together to style your React components while keeping Bootstrap's flexibility.

How to Style React-Bootstrap Components

Since React-Bootstrap components accept the className prop, you can style them using styled-components while maintaining Bootstrap's built-in styles.

Example 1: Styling a Bootstrap Button

import React from 'react'
import styled from 'styled-components'
import { Button } from 'react-bootstrap'

const StyledButton = styled(Button)`
  color: palevioletred !important;
  font-size: 1em;
  margin: 1em;
  padding: 0.25em 1em;
  border: 2px solid palevioletred;
  border-radius: 3px;
`

const App = () => <StyledButton variant="primary">Styled Bootstrap Button</StyledButton>

export default App

Example 2: Styling Internal Elements of a Bootstrap Component

If you want to style child elements inside a Bootstrap component, use nested selectors:

import styled from 'styled-components'
import { Carousel } from 'react-bootstrap'

const StyledCarousel = styled(Carousel)`
  border: 2px solid red;

  .carousel-control-prev,
  .carousel-control-next {
    background-color: rgba(0, 0, 0, 0.5);
  }
`

const App = () => (
  <StyledCarousel>
    <Carousel.Item>
      <img className="d-block w-100" src="https://via.placeholder.com/800x400" alt="Slide 1" />
    </Carousel.Item>
  </StyledCarousel>
)

export default App

Alternative: Using ThemeProvider for Global Styling

If you want to override Bootstrap styles globally, you can use the ThemeProvider from styled-components:

import { ThemeProvider } from 'styled-components'

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

const App = () => (
  <ThemeProvider theme={theme}>
    <StyledButton variant="primary">Styled Button</StyledButton>
  </ThemeProvider>
)

FAQ

1. Can I override Bootstrap classes in styled-components?

Yes! You can pass Bootstrap classes inside styled-components or override them using CSS:

const StyledDiv = styled.div`
  .text-center {
    color: red;
  }
`

2. Is bootstrap-styled a good alternative?

bootstrap-styled was created to fully integrate Bootstrap into styled-components, but it's not as widely maintained. Instead, using React-Bootstrap with styled-components gives you better flexibility and long-term support.