Styled Components
Instalação
$ yarn add styled-components
Exemplo do arquivo styles.js
import styled from 'styled-components';export const Title = styled.h1`font-size: 24px;color: #7159c1;font-family: Arial, Helvetica, sans-serif;`;
Exemplo de uso
import React from 'react';import { Title } from './styles';export default function Main() {return <Title>Main</Title>;}
Função baseada em propriedades
Arquivo styles.js
Caso haja a propriedade "Erro" dentro da tag, retornará uma condicional ternário para cores.
color: ${props => (props.error ? 'red' : '#7159c1')};
Estilização Global
Arquivo src/styles/global.js
import { createGlobalStyle } from 'styled-components';export default createGlobalStyle`* {margin: 0;padding: 0;outline: 0;box-sizing: border-box;}html, body, #root {min-height: 100%;}body {background: #7159c1;-webkit-font-smoothing: antialiased !important;}`;
Arquivo src/App.js
import React from 'react';import Routes from './routes';import GlobalStyle from './styles/global';function App() {return (<><Routes /><GlobalStyle /></>);}export default App;
Acessando as propriedades de um objeto
Exemplo de uso:
export const SubmitButton = styled.button.attrs(props => ({type: 'submit',disabled: props.loading,}))`
Keyframes e variáveis
Importação
import styled, { keyframes, css } from 'styled-components';
Uso do keyframe
const rotate = keyframes`from {transform: rotate(0deg);}to {transform: rotate(360deg);}`;
Uso de variáveis
${props =>props.loading &&css`svg {animation: ${rotate} 2s linear infinite;}`}
Seletores do Styled Components
Adicionar estilização em todos os elementos, exceto no primeiro
Exemplo:
export const List = styled.ul`list-style: none;margin-top: 30px;li {padding: 15px 0;& + li {... Toda estilização que ocorrer aqui dentro não acontecerá no primeiro elemento LI}}`