GithubHelp home page GithubHelp logo

doc22940 / next Goto Github PK

View Code? Open in Web Editor NEW

This project forked from emotion-js/next

0.0 2.0 0.0 1.13 MB

An experimental css-in-js library

Home Page: https://codesandbox.io/s/64vkop4m1n

License: MIT License

JavaScript 96.71% TypeScript 3.29%

next's Introduction

emotion next

NOTE: All of these packages are now in the emotion repo

An experimental css-in-js library built for React

This is pretty experimental and there will be breaking changes often. Don't use it for anything really important yet.

Why should I use this?

  • Server side rendering just works. (just call react-dom's renderToString or renderToNodeStream)
  • You like the css prop.
  • You want a flexible css-in-js library.
  • It works with string styles.
  • It works with object styles.
  • It has great composition.
  • There's no babel plugin, just babel macros.(There's also a babel plugin now if you want it)(i.e. style minification, labels and etc. will work in react-scripts@2)

Why shouldn't I use this?

  • It only works with react@>=16.3.0.
  • Don't use it if you're totally fine with the styling solution you're already using
  • Styles won't be cached in SSR if two elements have the same style and they have no common ancestor with styles from emotion or a Provider
  • It requires every style to be rendered in the react tree
  • It renders style elements next to the elements that are being styled in SSR so using pseudo-classes like :first-child and :nth-child is unsafe and pseudo-classes like :first-of-type and :nth-of-type should be used instead

Getting Started

yarn add @emotion/core
/** @jsx jsx */
import { jsx } from '@emotion/core'
// must be react@>=16.3.0
import { render } from 'react-dom'

render(
  <div css={{ color: 'hotpink' }}>This is hotpink</div>,
  document.getElementById('root')
)

String Styles

yarn add @emotion/css
/** @jsx jsx */
import { jsx } from '@emotion/core'
import css from '@emotion/css'
// must be react@>=16.3.0
import { render } from 'react-dom'

render(
  <div
    css={css`
      color: hotpink;
    `}
  >
    This is hotpink
  </div>,
  document.getElementById('root')
)

Global

Note: Global styles are removed on unmount

import * as React from 'react'
import { Global } from '@emotion/core'
import css from '@emotion/css'
import { render } from 'react-dom'

render(
  <Global
    styles={[
      css`
        body {
          color: hotpink;
        }
      `,
      {
        html: {
          backgroundColor: 'darkgreen'
        }
      }
    ]}
  />,
  document.getElementById('root')
)

Keyframes

yarn add @emotion/keyframes
/** @jsx jsx */
import { jsx } from '@emotion/core'
import css from '@emotion/css'
import keyframes from '@emotion/keyframes'
import { render } from 'react-dom'

const animation = keyframes(css`
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
`)

render(
  <div>
    <div
      css={css`
        animation: ${animation.name} infinite 20s linear;
        ${animation.styles};
      `}
    >
      This is getting rotated
    </div>
  </div>,
  document.getElementById('root')
)

styled

yarn add @emotion/styled
import * as React from 'react'
import styled from '@emotion/styled'
// must be react@>=16.3.0
import { render } from 'react-dom'

const Container = styled.div`
  color: hotpink;
`

render(<Container>This is hotpink</Container>, document.getElementById('root'))

Theming

yarn add @emotion/provider

With the css prop

/** @jsx jsx */
import { jsx } from '@emotion/core'
import Provider from '@emotion/provider'
import css from '@emotion/css'
import { render } from 'react-dom'

render(
  <Provider theme={{ primary: 'hotpink' }}>
    <div
      css={theme => ({
        color: theme.primary
      })}
    />
  </Provider>,
  document.getElementById('root')
)

With styled

import * as React from 'react'
import Provider from '@emotion/provider'
import css from '@emotion/css'
import { render } from 'react-dom'

const SomeComponent = styled.div`
  color: ${props => props.theme.primary};
`

render(
  <Provider theme={{ primary: 'hotpink' }}>
    <SomeComponent />
  </Provider>,
  document.getElementById('root')
)

Credit

emotion next was heavily inspired by glam.

next's People

Contributors

emmatown avatar ailrun avatar andarist avatar apostolos avatar julienpradet avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.