Skip to content

UniversalStandard/ook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@universalstandard/ook

Ook is a dumb styling component for React. It's like Rebass, but the API is any camelCased CSS property and an elegant breakpoint pattern. It also uses styled-components@5 under the hood, so it looks really pretty in React Devtools (especially with the experimental branch).

Ook takes about 15 seconds to master.

Installation

yarn add @universalstandard/ook

Simple Example

import Ook from '@universalstandard/ook'

export default () => <Ook background="tomato">Eek!</Ook>

Demo

https://codesandbox.io/s/ook-58nxe

Example with Breakpoints

import Ook, { OokConfig } from '@universalstandard/ook'

const Eek = () => (
  <OokConfig
    breakpoints={{
      default: '0',
      tablet: '768px',
      desktop: '1440px',
    }}
  >
    <Ook
      fontFamily="sans-serif"
      color="white"
      background={{
        default: 'tomato',
        tablet: 'dodgerblue',
        desktop: 'hotpink',
      }}
      padding={{
        default: '2rem',
        desktop: '4rem',
      }}
    >
      <Ook fontWeight="bold">Eek!</Ook>
    </Ook>
  </OokConfig>
)

export default Eek

Props

By Default, Any camelCased CSS property

https://developer.mozilla.org/en-US/docs/Web/CSS/Reference#Keyword_index

Vendor prefixed props need camelCased with a _ in front instead of a -. E.g. <Ook _webkitFontSmoothing="antialiased">

cssProperties

There is an array of 1000+ CSS property names (most of which are never used in the real world) that are looped over for every <Ook> prop by default. It seems to perform fine, but it might not be fast enough for your needs. Feel free to pass your own array of kebab-cased CSS properties to <OokConfig cssProperties={yourArrayOfCssProps}>.... We're starting/updating/maintaining one at @universalstandard/common-css-properties if you'd like to contribute any CSS properties you use.

active, hover, focus, visited (object)

Support for pseudo classes:

<Ook
  background="tomato"
  color="white"
  hover={{
    background: 'dodgerblue',
    color: {
      tablet: 'springgreen'
    }
  }}
>

before, after (object)

Limited support for pseudo elements:

<Ook
  position="relative"
  after={{
    content: '',
    display: 'block',
    background: 'tomato',
    width: '100px',
    height: '100px'
  }}
>

Note: Pseudo classes (hover, etc.) and breakpoints within pseudo elements aren't currently supported but they will be in the future.

css (string)

styled-components css prop support as an escape hatch. Possibly handy for things like the lobotomized owl technique. Supports nesting and pseudo-classes/elements.

el (string)

Any valid HTML element, or React component, to render the <Ook> as. Defaults to div.

{...props}

Additional props work as expected.

el and css and additional props Example:
<Ook
  el="ul"
  background="hotpink"
  css={`
    > *:hover {
      background: springgreen;
    }
  `}
  onClick={() => console.log(123)}
>
  <li>a</li>
  <li>b</li>
  <li>c</li>
</Ook>

Tips

  • If you ever feel like you're looking at a mountain of <Ook>s, you should break your component down into smaller components with only a few <Ook>s and friendlier names. It sounds like cliche advice, but it's particularly applicable to Ook.

That's it. Have a banana for making it to the end. 🍌

About

A clean, intuitive, dumb styling component.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published