Emotion Styled Components
Our preferred method of styling components is through Emotion Styled components, which allows us to style our components with simple and readable vanilla CSS inside our JSX / TSX files, without needlessly complicating the syntax.
#
Styling a componentTo style our component we can use the styled()
function from @emotion/styled
(you need to have @emotion/styled
and @emotion/react
as dependencies).
import styled from "@emotion/styled";import { Typography, TypographyProps } from '@material-ui/core';
export interface IExampleProps extends Omit<TypographyProps, 'children'> { text?: string;}
// Between the backticks you can write CSSconst StyledTypography = styled(Typography)` line-height: 1rem; font-size: 14pt;`;
const Example = ({ text = '' }: IExampleProps) => ( <StyledTypography>{text}</StyledTypography>);
export default Example;
You can also pass props into the CSS between the backticks like so:
import styled from "@emotion/styled";import { Typography, TypographyProps } from '@material-ui/core';
export interface IExampleProps extends Omit<TypographyProps, 'children'> { bold?: boolean; text?: string;}
const StyledTypography = styled( ({ bold, ...props }: Omit<IExampleProps, "text">) => ( <Typography {...props} /> ))` line-height: 1rem; ${({ bold }) => ` font-size: ${bold ? "20pt" : "14pt"} !important; font-weight: ${bold ? "bold" : "normal"} !important; `}`;
const Example = ({ bold, text = '', ...props }: IExampleProps) => ( <StyledTypography bold={bold} {...props}>{text}</StyledTypography>);
export default Example;