twin.macro Sebagai Alternatif menggunakan TailwindCSS dan CSS-in-JS
twin.macro adalah salah satu library yang dibuat oleh Ben Rogerson, menggunakan Tailwind dan mencampurkannya dengan CSS-in-JS menjadikan twin.macro sebagai salah satu alternatif untuk bisa menuliskan Tailwind dengan lebih mudah dan lebih bervariatif.
Apa itu twin.macro?
Salah satu pustaka yang merubah Tailwind class menjadi CSS object dengan menggunakan Emotion/styled-component yang memberikan kita beberapa keunggulan dengan menulis Styled Component.
Cara Install twin.macro
Ada beberapa cara untuk bisa melakukan install twin.macro. Untuk versi bahasa inggris (saya akan menulis versi bahasa indonesia) bisa melakukan dengan cara dari official twin.macro.
Light libraries
- Preact
styled-components / emotion / goober - React
styled-components / emotion
Tooled libraries
- Create React App
styled-components / emotion - Snowpack
styled-components / styled-components (ts) / emotion / emotion (ts) - Vite
styled-components (ts) / emotion
Advanced frameworks
- Gatsby
styled-components / emotion - Next.js
styled-components / emotion - Laravel
styled-components (ts)
Cara Menggunakan twin.macro
Kalau biasanya, tanpa twin.macro kita menggunakan ClassName, maka di twin.macro kita menggunakan tw
props untuk menambahkan Tailwind classes ke jsx element.
import 'twin.macro'
const Input = () => <input tw="border hover:border-black" />
Conditional Style
import tw from 'twin.macro'
const Input = ({ hasHover }) => (
<input css={[tw`border`, hasHover && tw`hover:border-black`]} />
)
Menggunakan SaSS
import tw, { css } from 'twin.macro'
const hoverStyles = css`
&:hover {
border-color: black;
${tw`text-black`}
}
`
const Input = ({ hasHover }) => (
<input css={[tw`border`, hasHover && hoverStyles]} />
)
Menggunakan Styled Components untuk styling component
import Reactfrom 'react';
import tw from 'twin.macro'
const Input = tw.input`border hover:border-black`
const ComponentInput = () => {
return (
<Input name="name" />
)
}
Bisa juga menjadikannya Reusable Component, terutama dalam kasus Styling Text.
Lalu, kita bisa menggunakan ulang component tersebut dan menambahkan beberapa styling yang kita custom. Misalnya
Menggunakan twin.macro dan Sass secara bersamaan pada sebuah komponen
Condition Styling Component di twin.macro pada Component
Variant- variant untuk Prefix
Kalau di Tailwind, hanya beberapa prefix yang disupport seperti active:
hover:
group:
, focus:
sedangkan pada twin.macro, ada banyak sekali variant yang disupport seperti :
- Prefix
before:
andafter:
untuk style pseudo-elements - Prefix
hocus:
untuk style hover + focus pada saat yang sama - Style dengan extra group states seperti
group-hocus:
dangroup-active:
- Style form field states dengan
checked:
,invalid:
danrequired:
- Stack up variants
sm:hover:first:bg-black
Stack variant bisa berlaku untuk variant dengan banyak style menjadi seperti ini
Menambahkan Class !important
Sebenarnya, kita sebisa mungkin menghindari penggunaan style !important
namun, pada beberapa kasus kita membutuhkan. Nah, twin.macro juga mensupport hal tersebut.