<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CSS on Nalar</title>
    <link>https://nalar.dev/id/tags/css/</link>
    <description>Recent content in CSS on Nalar</description>
    <generator>Hugo</generator>
    <language>id-id</language>
    <lastBuildDate>Sat, 19 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://nalar.dev/id/tags/css/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Komposisi Class Saat Runtime Bukan Generasi CSS</title>
      <link>https://nalar.dev/id/komposisi-class-saat-runtime-bukan-generasi-css/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/komposisi-class-saat-runtime-bukan-generasi-css/</guid>
      <description>&lt;p&gt;Function yang menghasilkan string class dan compiler yang mengeluarkan CSS menyelesaikan masalah yang berbeda, walaupun keduanya pada akhirnya dapat menghasilkan atribut `class` di browser.&lt;/p&gt;&#xA;&lt;p&gt;Perbedaan itu penting ketika recipe komponen Tailwind dimulai seperti ini:&lt;/p&gt;&#xA;&lt;div&#xA;  x-data=&#34;{ code: $el.querySelector(&#39;code&#39;).innerText, copied: false }&#34;&#xA;  class=&#34;code-block group relative my-6 overflow-hidden rounded-xl border border-line bg-surface-muted dark:border-night-line dark:bg-night-surface&#34;&gt;&#xA;  &lt;button&#xA;    type=&#34;button&#34;&#xA;    @click=&#34;navigator.clipboard.writeText(code); copied = true; setTimeout(() =&gt; copied = false, 1600)&#34;&#xA;    class=&#34;absolute right-3 top-3 z-10 rounded-lg border border-line-strong bg-surface px-2 py-1 font-mono text-[0.8rem] text-muted opacity-0 transition group-hover:opacity-100 hover:bg-ink hover:text-white dark:border-night-line dark:bg-night dark:text-night-muted dark:hover:bg-white dark:hover:text-ink&#34;&gt;&#xA;    &lt;span x-text=&#34;copied ? &#39;Copied&#39; : &#39;Copy&#39;&#34;&gt;&lt;/span&gt;&#xA;  &lt;/button&gt;&#xA;  &#xA;  &lt;div class=&#34;overflow-x-auto p-4 text-sm leading-6 [&amp;_pre]:!m-0 [&amp;_pre]:!bg-transparent [&amp;_pre]:!p-0 [&amp;_code]:font-mono&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; button = tv({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  base: &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;inline-flex rounded-md&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  variants: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    color: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      success: &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;bg-green-500 hover:bg-green-700&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    disabled: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;font-weight:bold&#34;&gt;true&lt;/span&gt;: &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;pointer-events-none opacity-50&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  compoundVariants: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      color: &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;success&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      disabled: &lt;span style=&#34;font-weight:bold&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;font-weight:bold&#34;&gt;class&lt;/span&gt;: &lt;span style=&#34;font-style:italic&#34;&gt;&amp;#39;bg-green-300 hover:bg-green-300&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Mudah untuk mengira bahwa build step dapat mengubah recipe tersebut menjadi selector semantik seperti:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Token Tema Berbasis Warna Logo untuk Antarmuka Web yang Berkarakter</title>
      <link>https://nalar.dev/id/token-tema-berbasis-warna-logo/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/token-tema-berbasis-warna-logo/</guid>
      <description>&lt;p&gt;Palet warna logo bukan design system. Menyalin warna dominan logo ke button, card, background, border, dan gradient biasanya membuat halaman terasa terlalu penuh warna, bukan lebih berkarakter. Langkah yang lebih berguna adalah menerjemahkan logo menjadi token tema semantik: sekumpulan role kecil yang dapat dipakai komponen secara konsisten.&lt;/p&gt;&#xA;&lt;p&gt;Pemisahan ini semakin penting ketika interface memakai pola visual yang ekspresif seperti bento grid, typography berukuran besar, surface transparan, dan scroll motion. Teknik-teknik tersebut dapat membentuk identitas yang kuat, tetapi hasilnya baru terasa utuh jika warna, hierarchy, dan movement berasal dari satu sistem yang sama, bukan dari kumpulan efek yang ditempel terpisah.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
