🔥 View the Next + Emotion + Tailwind Twin starter for usage examples
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
// In .babelrc
{
"presets": [
"next/babel",
"@emotion/babel-preset-css-prop"
],
"plugins": [
"babel-plugin-macros"
]
}
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.
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,
},
}
Twin comes with types for every import except the css
and styled
imports.
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.
- See how to customize your classes →
- Learn how to use the emotion library
The css prop / css import / styled import
- "Vanilla" React + Emotion
- Create React App + Emotion
- Gatsby + Emotion
- Next.js + Emotion (current)