Skip to content

Latest commit

 

History

History
135 lines (100 loc) · 4.59 KB

next.md

File metadata and controls

135 lines (100 loc) · 4.59 KB

Use Twin with Next + Emotion

🔥 View the Next + Emotion + Tailwind Twin starter for usage examples

Getting started

1. Install the dependencies

After creating your next app:

npm install --save twin.macro @emotion/core @emotion/styled @emotion/babel-preset-css-prop
Yarn instructions
yarn add twin.macro @emotion/core @emotion/styled @emotion/babel-preset-css-prop

2. Enable babel macros and the css prop

// In .babelrc
{
  "presets": [
    "next/babel",
    "@emotion/babel-preset-css-prop"
  ],
  "plugins": [
    "babel-plugin-macros"
  ]
}

3. Add the global styles

Projects using Twin also use the Tailwind preflight base styles to smooth over cross-browser inconsistencies.

Twin adds the preflight base styles with the GlobalStyles import which you can add in pages/_app.js:

// page/_app.js
import React from 'react'
import { GlobalStyles } from 'twin.macro'

const App = ({ Component, pageProps }) => (
  <>
    <GlobalStyles />
    <Component {...pageProps} />
  </>
)

export default App

GlobalStyles also includes some @keyframes so the animate-xxx classes have animations. But if you’re not using the animate classes then you can avoid adding the extra keyframes.

4. Add the recommended config

Twin’s recommended config can be added in a couple of different places.

a) In your package.json:

// package.json
"babelMacros": {
    "twin": {
      "config": "tailwind.config.js",
      "preset": "emotion",
      "debugProp": true,
      "debugPlugins": false,
      "debug": false,
    }
},

b) Or in a new file named babel-plugin-macros.config.js placed in your project root:

// babel-plugin-macros.config.js
module.exports = {
  twin: {
    config: 'tailwind.config.js',
    preset: 'emotion',
    debugProp: true,
    debugPlugins: false,
    debug: false,
  },
}

5. Complete the TypeScript support (optional)

Twin comes with types for every import except the css and styled imports.

Add the remaining types →

Options

Name Type Default Description
config string "tailwind.config.js" The path to your Tailwind config
preset string "emotion" The css-in-js library behind the scenes - also supports 'styled-components' and 'goober'
hasSuggestions boolean true Display class suggestions when a class can't be found
debugPlugins boolean false Display generated class information in your terminal from your plugins
debugProp boolean false Add a prop to your elements in development so you can see the original tailwind classes, eg: <div data-tw="bg-black" />
debug boolean false Display information in your terminal about the Tailwind class conversions

If twin’s default styled and css imports need to be adjusted, you can do so with the following config:

{
  styled: { import: "default", from: "@emotion/styled" },
  css: { import: "css", from: "@emotion/core" }
}

Note: Make sure you remove the preset option as that value disables the styled + css options.

Next steps

Installation guides