blog
twin.macro Sebagai Alternatif menggunakan TailwindCSS dan CSS-in-JS - Blog - Naufaldi Rafif Satriya
twin.macro adalah salah satu library yang dibuat oleh Ben Rogerson, menggunakan Tailwind dan mencampurkann
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
styled-components / emotion / goober
styled-components / emotion
- Preact
- React
Tooled libraries
styled-components / emotion
styled-components / styled-components (ts) / emotion / emotion (ts)
styled-components (ts) / emotion
- Create React App
- Snowpack
- Vite
Advanced frameworks
styled-components / emotion
styled-components / emotion
styled-components (ts)
- Gatsby
- Next.js
- Laravel
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.
import tw from 'twin.macro';
const TextBody = tw.p`text-black text-base leading-5`;
export default TextBody;
TextBody.js
Lalu, kita bisa menggunakan ulang component tersebut dan menambahkan beberapa styling yang kita custom. Misalnya
import React from 'react';
import tw from 'twin.macro';
import TextBody from '../components/misc/TextBody';
const Subtitle = tw(TextBody)`font-semibold my-2 mx-auto`;
const Paragraf = () => {
return (
<>
<Subtitle>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Culpa quo at
maiores molestias, est cum atque iusto, perspiciatis laudantium mollitia
et facere ipsum in amet deserunt eaque, similique porro vero!
</Subtitle>
</>
);
};
export default Paragraf;
paragraf.js
Menggunakan twin.macro dan Sass secara bersamaan pada sebuah komponen
import tw, { styled, css } from 'twin.macro';
const TextHeaderSix = styled.h6`
${tw`font-bold text-3xl text-center`}
${css`
line-height: 1em;
`}
`;
export default TextHeaderSix;
TextHeaderSix.js
Condition Styling Component di twin.macro pada Component
import tw, { styled } from 'twin.macro';
const TextHeaderOne = styled.h1(({ isCapitalize, isLarge }) => [
tw`font-Playfair font-bold `,
// Ternary
isCapitalize && tw`capitalize`,
isLarge ? tw`text-3xl` : tw`text-2xl`,
]);
export default TextHeaderOne;
TextHeaderOne.js
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
import React from 'react';
import tw from 'twin.macro';
const Header = () => {
return (
<div tw="bg-blue-100 py-4 hover:(bg-blue-200 text-white py-2)">
header Lorem ipsum dolor sit amet consectetur, adipisicing elit. Ut optio,
sint, neque et veritatis expedita suscipit perspiciatis illum recusandae
enim, libero tempora. Eveniet est excepturi doloremque error nobis
dignissimos magnam.
</div>
);
};
export default Header;
Header.js
Menambahkan Class !important
Sebenarnya, kita sebisa mungkin menghindari penggunaan style !important namun, pada beberapa kasus kita membutuhkan. Nah, twin.macro juga mensupport hal tersebut.
import React from 'react';
import tw from 'twin.macro';
const Footer = () => {
return <div tw="bg-blue-100 bg-blue-400!">footer</div>;
};
export default Footer;
Footer.js
Referensi Tulisan:
[
ben-rogerson/twin.macro
🦹♂️ Twin blends the magic of Tailwind with the flexibility of css-in-js (emotion, styled-components and goober) at build time. - ben-rogerson/twin.macro
](https://github.com/ben-rogerson/twin.macro?ref=blog.naufaldi.com)
[
The Power of twin.macro
I’ll explain what is twin.macro and I’ll show you all of the features provided by twin.macro....


](https://dev.to/angelmtztrc/the-powerful-of-twin-macro-5gjn?ref=blog.naufaldi.com)
Sumber Kode Github:
[
naufaldi/example-emotion-twin-macro-nextjs
Project Example Emotion and Twin Macro with NextJS - naufaldi/example-emotion-twin-macro-nextjs
](https://github.com/naufaldi/example-emotion-twin-macro-nextjs?ref=blog.naufaldi.com)
Bagikan[](https://twitter.com/share?text=twin.macro Sebagai Alternatif menggunakan TailwindCSS dan CSS-in-JS&url=https://blog.naufaldi.com/menggunakan-twin-macro-dan-emotion-di-nextjs/ "Twitter")[](https://www.facebook.com/sharer/sharer.php?u=https://blog.naufaldi.com/menggunakan-twin-macro-dan-emotion-di-nextjs/ "Facebook")[](https://www.linkedin.com/shareArticle?mini=true&url=https://blog.naufaldi.com/menggunakan-twin-macro-dan-emotion-di-nextjs//&title=twin.macro Sebagai Alternatif menggunakan TailwindCSS dan CSS-in-JS "LinkedIn")[](/cdn-cgi/l/email-protection#5e612d2b3c343b3d2a632a29373070333f3d2c317e0d3b3c3f393f377e1f322a3b2c303f2a37387e333b3039392b303f353f307e0a3f37322937303a1d0d0d7e3a3f307e1d0d0d73373073140d783f332e653c313a2763362a2a2e6471713c32313970383f323a377026272471333b3039392b303f353f30732a29373073333f3d2c31733a3f30733b33312a373130733a3773303b262a342d71 "Email")
Topik CSS NextJS ReactJS TailwindCSS Tutorial
[
Cara Install NextJS + twin.macro + Emotion
Ada beberapa kemudahan ketika kita menggunakan twin.macro dan Emotion pada proyek…
30 Mar 2021
](/memulai-nextjs-tailwind-macro-emotion/)[
Repository Github untuk meningkatkan Skill Pemrograman
Meningkatkan skill pemrograman tidak hanya selalu berkutat pada proses pengerjaan proyek secara…
02 Feb 2021
](/repository-github-untuk-meningkatkan-skill-pemrograman/)