<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Frontend Dev]]></title><description><![CDATA[Blog ini menyajikan tips dan best practice frontend untuk membantu developer membangun website yang cepat, modern, dan mudah di-maintain. Isinya mencakup optima]]></description><link>https://prasetyodimas.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 15 Oct 2026 11:48:56 GMT</lastBuildDate><atom:link href="https://prasetyodimas.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Modern CSS: Perbedaan CSS Modules, Tailwind, dan CSS-in-JS (Serta Kapan Harus Memilihnya)]]></title><description><![CDATA[Di dunia frontend modern, ada banyak cara untuk menulis CSS. Tiga pendekatan yang paling populer adalah CSS Modules, Tailwind CSS, dan CSS-in-JS. Masing-masing punya gaya, kelebihan, dan trade-off yang berbeda — dan pilihan yang tepat akan sangat mem...]]></description><link>https://prasetyodimas.hashnode.dev/modern-css-perbedaan-css-modules-tailwind-dan-css-in-js-serta-kapan-harus-memilihnya</link><guid isPermaLink="true">https://prasetyodimas.hashnode.dev/modern-css-perbedaan-css-modules-tailwind-dan-css-in-js-serta-kapan-harus-memilihnya</guid><category><![CDATA[Concepts]]></category><category><![CDATA[modern css]]></category><category><![CDATA[css-key-concept]]></category><category><![CDATA[CSS]]></category><category><![CDATA[css strategy]]></category><dc:creator><![CDATA[Dimas Prasetyo]]></dc:creator><pubDate>Fri, 21 Nov 2025 08:40:06 GMT</pubDate><content:encoded><![CDATA[<p>Di dunia frontend modern, ada banyak cara untuk menulis CSS. Tiga pendekatan yang paling populer adalah <strong>CSS Modules</strong>, <strong>Tailwind CSS</strong>, dan <strong>CSS-in-JS</strong>. Masing-masing punya gaya, kelebihan, dan trade-off yang berbeda — dan pilihan yang tepat akan sangat memengaruhi produktivitas, struktur project, serta skalabilitas jangka panjang.</p>
<p>Pada artikel ini, kita akan membahas:</p>
<ul>
<li><p>bagaimana cara kerja tiap pendekatan,</p>
</li>
<li><p>kelebihan &amp; kekurangannya,</p>
</li>
<li><p>contoh implementasi,</p>
</li>
<li><p>dan <strong>kapan harus memilih</strong> masing-masing untuk kebutuhan proyekmu.</p>
</li>
</ul>
<hr />
<h2 id="heading-1-css-modules">🔹 <strong>1. CSS Modules</strong></h2>
<p>CSS Modules adalah file <code>.module.css</code> di mana setiap kelas hanya berlaku untuk komponen tertentu. Ini menghindari masalah klasik CSS seperti “global conflicts” atau “class name collision”.</p>
<h2 id="heading-cara-kerja"><strong>Cara Kerja</strong></h2>
<p>Sebelum build:</p>
<pre><code class="lang-plaintext">/* button.module.css */
.btn {
  background: blue;
  color: white;
}
</code></pre>
<p>Setelah build, diubah menjadi nama unik:</p>
<pre><code class="lang-plaintext">.btn_9sd83f
</code></pre>
<p>Dan dipakai seperti ini:</p>
<pre><code class="lang-plaintext">import styles from './button.module.css';

&lt;button className={styles.btn}&gt;Click Me&lt;/button&gt;
</code></pre>
<h2 id="heading-kelebihan"><strong>Kelebihan</strong></h2>
<ul>
<li><p>Scoping otomatis → tidak takut class tabrakan</p>
</li>
<li><p>Ringan &amp; native (tanpa runtime JS)</p>
</li>
<li><p>Tetap pakai CSS murni → mudah dipelajari</p>
</li>
<li><p>Sangat cocok untuk proyek yang sudah punya struktur CSS awal</p>
</li>
</ul>
<h2 id="heading-kekurangan"><strong>Kekurangan</strong></h2>
<ul>
<li><p>Kurang praktis untuk style dinamis (theme switch, variant button, dsb)</p>
</li>
<li><p>Tidak punya utility class yang kaya seperti Tailwind</p>
</li>
<li><p>Masih perlu membuat struktur CSS sendiri (variables, mixins, dsb)</p>
</li>
</ul>
<h2 id="heading-cocok-digunakan-saat"><strong>Cocok digunakan saat:</strong></h2>
<ul>
<li><p>Kamu ingin <strong>CSS murni</strong> tanpa runtime tambahan</p>
</li>
<li><p>Project kecil-menengah dengan banyak komponen reusable</p>
</li>
<li><p>Kamu tidak ingin bergantung ke framework styling tertentu</p>
</li>
</ul>
<hr />
<h2 id="heading-2-tailwind-css">🔹 <strong>2. Tailwind CSS</strong></h2>
<p>Tailwind adalah utility-first CSS framework — kita menulis style langsung di dalam className.</p>
<h2 id="heading-cara-kerja-1"><strong>Cara Kerja</strong></h2>
<pre><code class="lang-plaintext">&lt;button className="px-4 py-2 bg-blue-600 text-white rounded-lg"&gt;
  Click Me
&lt;/button&gt;
</code></pre>
<p>Bagus untuk membangun UI cepat dan konsisten.</p>
<h2 id="heading-kelebihan-1"><strong>Kelebihan</strong></h2>
<ul>
<li><p><strong>Sangat cepat</strong> untuk styling → tidak perlu bolak-balik file</p>
</li>
<li><p>Utility classes lengkap (spacing, colors, layout, responsive)</p>
</li>
<li><p>Konsistensi desain lebih mudah dijaga</p>
</li>
<li><p>Ukuran bundle kecil (purge CSS hanya menyisakan class yang dipakai)</p>
</li>
</ul>
<h2 id="heading-kekurangan-1"><strong>Kekurangan</strong></h2>
<ul>
<li><p>HTML bisa terlihat “berantakan” karena banyak class</p>
</li>
<li><p>Membuat custom component styles yang kompleks sedikit tricky</p>
</li>
<li><p>Perlu adaptasi bagi yang terbiasa dengan CSS tradisional</p>
</li>
<li><p>Dependensi framework tertentu → tidak pure CSS</p>
</li>
</ul>
<h2 id="heading-cocok-digunakan-saat-1"><strong>Cocok digunakan saat:</strong></h2>
<ul>
<li><p>Kamu ingin membangun UI <strong>cepat</strong> dan konsisten</p>
</li>
<li><p>Banyak membuat produk MVP atau dashboard</p>
</li>
<li><p>Kamu butuh design system ringan tanpa ribet</p>
</li>
<li><p>Timmu ingin mempercepat development tanpa banyak CSS manual</p>
</li>
</ul>
<hr />
<h2 id="heading-3-css-in-js-styled-components-emotion-jotai-ui-dsb">🔹 <strong>3. CSS-in-JS (Styled Components, Emotion, Jotai UI, dsb.)</strong></h2>
<p>CSS-in-JS berarti menulis CSS langsung dalam JavaScript, biasanya dengan sintaks tagged template atau object style.</p>
<h2 id="heading-contoh-styled-components"><strong>Contoh Styled Components</strong></h2>
<pre><code class="lang-plaintext">import styled from 'styled-components';

const Button = styled.button`
  background: blue;
  color: white;
  padding: 8px 16px;
`;
</code></pre>
<h2 id="heading-kelebihan-2"><strong>Kelebihan</strong></h2>
<ul>
<li><p>Style &amp; logic tersatukan dalam satu komponen → modular</p>
</li>
<li><p>Sangat mudah membuat variant dinamis (props)</p>
</li>
<li><p>Mendukung theming dengan sangat baik</p>
</li>
<li><p>Bagus untuk UI library skala besar</p>
</li>
</ul>
<h2 id="heading-kekurangan-2"><strong>Kekurangan</strong></h2>
<ul>
<li><p>Ada runtime cost (lebih berat dibanding CSS Modules)</p>
</li>
<li><p>Kadang membuat bundle size lebih besar</p>
</li>
<li><p>Kompleks pada aplikasi high-performance</p>
</li>
<li><p>Perlu library terpisah (styled-components, emotion)</p>
</li>
</ul>
<h2 id="heading-cocok-digunakan-saat-2"><strong>Cocok digunakan saat:</strong></h2>
<ul>
<li><p>Kamu membuat <strong>design system</strong> atau <strong>UI library</strong></p>
</li>
<li><p>Kamu butuh theming dinamis (dark/light, multi-brand)</p>
</li>
<li><p>Kamu ingin style yang berubah berdasarkan props/logic</p>
</li>
<li><p>Project besar yang butuh fleksibilitas tinggi</p>
</li>
</ul>
<hr />
<h2 id="heading-perbandingan-singkat">🔥 <strong>Perbandingan Singkat</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Fitur / Teknik</td><td>CSS Modules</td><td>Tailwind</td><td>CSS-in-JS</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Learning Curve</strong></td><td>Mudah</td><td>Sedang</td><td>Sedang–Sulit</td></tr>
<tr>
<td><strong>Performance</strong></td><td>Sangat cepat</td><td>Sangat cepat</td><td>Lebih berat</td></tr>
<tr>
<td><strong>Dynamic Style</strong></td><td>Terbatas</td><td>Sedikit</td><td>Sangat kuat</td></tr>
<tr>
<td><strong>Consistency</strong></td><td>Manual</td><td>Sangat konsisten</td><td>Tergantung pattern</td></tr>
<tr>
<td><strong>Skalabilitas</strong></td><td>Menengah</td><td>Tinggi</td><td>Tinggi sekali</td></tr>
<tr>
<td><strong>Ketergantungan Library</strong></td><td>Tidak</td><td>Ya (Tailwind)</td><td>Ya (styled-components/emotion)</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-kapan-memilih-mana-guideline-praktis">🎯 <strong>Kapan Memilih Mana? (Guideline Praktis)</strong></h2>
<h3 id="heading-pilih-css-modules-jika"><strong>Pilih CSS Modules jika:</strong></h3>
<p>✔ Kamu ingin menggunakan CSS murni<br />✔ Tidak mau runtime tambahan<br />✔ Project tidak memerlukan theming kompleks<br />✔ Kamu ingin isolasi class yang rapi</p>
<h3 id="heading-pilih-tailwind-jika"><strong>Pilih Tailwind jika:</strong></h3>
<p>✔ Kamu ingin development tercepat<br />✔ Ingin konsistensi UI tanpa banyak mikir CSS<br />✔ Banyak membangun dashboard atau aplikasi internal<br />✔ Designer &amp; developer ingin satu bahasa style</p>
<h3 id="heading-pilih-css-in-js-jika"><strong>Pilih CSS-in-JS jika:</strong></h3>
<p>✔ Kamu membangun <strong>design system</strong> skala besar<br />✔ Butuh tema &amp; variant dinamis<br />✔ Butuh style yang bergantung pada props/logic<br />✔ Membuat komponen UI sangat reusable</p>
<hr />
<h2 id="heading-kesimpulan">🧠 <strong>Kesimpulan</strong></h2>
<p>Setiap teknik punya tempatnya masing-masing. Tidak ada yang paling “benar”, yang ada hanyalah <strong>yang paling cocok untuk kebutuhan proyek</strong>.</p>
<ul>
<li><p><strong>CSS Modules</strong> → simpel, cepat, tanpa runtime.</p>
</li>
<li><p><strong>Tailwind</strong> → cepat, konsisten, pragmatis.</p>
</li>
<li><p><strong>CSS-in-JS</strong> → fleksibel, perfect untuk design system &amp; UI library.</p>
</li>
</ul>
<p>Jika kamu bekerja di hybrid environment (React + multiple micro-app), seringkali kombinasi Tailwind + CSS Modules adalah setup paling optimal.</p>
<hr />
<h2 id="heading-tentang-penulis">✍️ <strong>Tentang Penulis</strong></h2>
<p>Saya Dimas Prasetyo, <strong>Frontend Engineer</strong> yang berfokus pada <strong>React, Angular dan Vue</strong>, <strong>Web Performance</strong>, dan <strong>arsitektur UI modern</strong>. Saya suka membagikan artikel tentang <strong>frontend</strong>, <strong>modern tooling</strong>, dan <strong>pengalaman real-world di proyek produksi</strong>.</p>
<hr />
]]></content:encoded></item></channel></rss>