0.1.5 • Published 10 months ago

bau-reactcss v0.1.5

Weekly downloads
-
License
BSD
Repository
github
Last release
10 months ago

CSS-in-JS package for React

This package is based on BauCSS and adds a styled component for React.

npm bundle size

Usage

import BauReactCss from "bau-reactcss";

const { css, styled, keyframes, createGlobaStyles } = BauReactCss();

Worked example

https://github.com/ndrean/bau-react-css/tree/main/example

Create global styles

createGlobalStyles`
  :root {
      margin: 0px;
      --main-color: midnightblue;
  }
`;

Create a class

const blue = css`
  color: var(--main-color);
`;

<p className={blue}>A blue paragraph</p>;

You can create a component:

const colored = (props)=> css`
  color: ${props.color ?? "var(--main-color)"};
`;

const P = (props) => {
  const {children, ...rest} = props
  <p className={colored(props)} {...rest}>{children}</p>
)
}

<P>A blue paragraph</P>
<P color="red">A red paragraph</P>

Create a styled component

const Btn = (props) => style("button", props)`
  cursor: pointer;
  color: ${props.color};
`;

<Btn color="blue">Blue button</Btn>;

Create a keyframe

const rescale = keyframes`
  0% {transform: scale(0.5)}
  100% {transform: scale(1)}
`;

const red = css`
  color: red;
   animation: ${rescale} 1s ease infinite;
`

<p className={red}>Check this</p>

Example of conditional classes

You have two ways to use it. Define a function or object that returns CSS strings:

const styles = (props) => {
  base: `
    cursor: pointer;
    font-size: ${props.size ?? 1}em;
    border-radius: 0.3em;
    padding: 0.3em;
  `,
  danger: `
    color: red;
    animation: ${rescale} 1s ease infinite;
  `,
  disabled: `
    pointer-events: none;
    opacity: ${props.opacity};
  `;
}

You can write:

const Btn = (props)=> styled('button', props)`
  ${styles(props).base +
  props.danger ? styles(props).danger : ""}
`

<Btn>Base button</Btn>
<Btn danger="true" onClick={()=> alert('danger')}>Danger button</Btn>

To make life easier, the primitive styled can read the props and sets the class when you use the styles object above:

const Button = (props) => styled("button", props)`
  ${styles(props).base}
  ${styles(props)}
`;

<Button>Base Button</Button>
<Button
  danger="true"
  className={css`
    box-shadow: 6px -6px bisque;
  `}
>
  Shadowed Danger
</Button>;
0.1.5

10 months ago

0.1.4

11 months ago

0.1.3

11 months ago

0.1.2

11 months ago

0.1.1

11 months ago

0.1.0

11 months ago