<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>weapp-tailwindcss Blog Feed</title>
        <link>https://tw.icebreaker.top/en/blog</link>
        <description>Updates, case studies, and tutorials about Tailwind CSS across mini apps and multi-platform development.</description>
        <lastBuildDate>Sat, 13 Sep 2025 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en-US</language>
        <item>
            <title><![CDATA[4.3.0 🚀]]></title>
            <link>https://tw.icebreaker.top/en/blog/2025/9/v4.3-release</link>
            <guid>https://tw.icebreaker.top/en/blog/2025/9/v4.3-release</guid>
            <pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[weapp-tailwindcss@4.3.0 enabled CSS variable calculation mode by default and added finer-grained cssCalc and px2rpx options, significantly improving rpx and calc compatibility across targets.]]></description>
            <content:encoded><![CDATA[<p>weapp-tailwindcss@4.3.0 enabled CSS variable calculation mode by default and added finer-grained <code>cssCalc</code>, <code>px2rpx</code>, and related options, significantly improving <code>rpx</code> and <code>calc</code> compatibility across targets. This post explains what changed and how to use it.</p>
<blockquote>
<p>Later versions changed CSS variable calculation mode back to default-off so large custom properties would not expand twice after compatibility handling. If you still need that compatibility layer, explicitly set <code>cssOptions.cssCalc: true</code>.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_CDd4" id="css-variable-calculation-mode">CSS variable calculation mode<a href="https://tw.icebreaker.top/en/blog/2025/9/v4.3-release#css-variable-calculation-mode" class="hash-link" aria-label="Direct link to CSS variable calculation mode" title="Direct link to CSS variable calculation mode" translate="no">​</a></h2>
<p>Under <code>tailwindcss@4</code>, CSS variable calculation mode was enabled by default.</p>
<p>In this mode, all CSS variables and <code>calc</code> expressions are precompiled ahead of time.</p>
<p>For example, the original <code>tailwindcss@4</code> output looks like this:</p>
<div class="language-css codeBlockContainer_SUlo theme-code-block" style="--prism-color:#D4D4D4;--prism-background-color:#212121"><div class="codeBlockContent_UJo7"><pre tabindex="0" class="prism-code language-css codeBlock_Rhtc thin-scrollbar" style="color:#D4D4D4;background-color:#212121"><code class="codeBlockLines_s0U2"><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">page,</span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">:root</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">--spacing</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> 8rpx</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token selector" style="color:rgb(215, 186, 125)">.h-2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">height</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">calc</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">var</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">--spacing</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> * 2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></div></code></pre></div></div>
<p>After precompilation with CSS variable calculation mode enabled, the result becomes:</p>
<div class="language-css codeBlockContainer_SUlo theme-code-block" style="--prism-color:#D4D4D4;--prism-background-color:#212121"><div class="codeBlockContent_UJo7"><pre tabindex="0" class="prism-code language-css codeBlock_Rhtc thin-scrollbar" style="color:#D4D4D4;background-color:#212121"><code class="codeBlockLines_s0U2"><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">page,</span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">:root</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">--spacing</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> 8rpx</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token selector" style="color:rgb(215, 186, 125)">.h-2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">height</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> 16rpx</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">height</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(220, 220, 170)">calc</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token function" style="color:rgb(220, 220, 170)">var</span><span class="token punctuation" style="color:rgb(212, 212, 212)">(</span><span class="token plain">--spacing</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token plain"> * 2</span><span class="token punctuation" style="color:rgb(212, 212, 212)">)</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></div></code></pre></div></div>
<p>This mode helps with compatibility issues around <code>calc</code> and <code>rpx</code> on many device runtimes.</p>
<p>The default behavior keeps the original <code>calc()</code> declaration so the stylesheet can still follow standard CSS cascading rules. If your target mini app runtime prefers the later <code>calc()</code> line and overrides the precomputed fallback, you can explicitly specify which CSS variables should have their original <code>calc()</code> declarations removed.</p>
<blockquote>
<p>You can manually disable this feature by passing <code>cssCalc: false</code> to the plugin.</p>
</blockquote>
<p>If you want to remove the original <code>calc()</code> declaration that matches <code>--spacing</code>, pass:</p>
<div class="language-js codeBlockContainer_SUlo theme-code-block" style="--prism-color:#D4D4D4;--prism-background-color:#212121"><div class="codeBlockContent_UJo7"><pre tabindex="0" class="prism-code language-js codeBlock_Rhtc thin-scrollbar" style="color:#D4D4D4;background-color:#212121"><code class="codeBlockLines_s0U2"><div class="token-line" style="color:#D4D4D4"><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token literal-property property" style="color:#9CDCFE">cssCalc</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string" style="color:rgb(206, 145, 120)">'--spacing'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token comment" style="color:rgb(106, 153, 85)">// or more precisely</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token literal-property property" style="color:#9CDCFE">cssCalc</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">    </span><span class="token literal-property property" style="color:#9CDCFE">includeCustomProperties</span><span class="token operator" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">[</span><span class="token string" style="color:rgb(206, 145, 120)">'--spacing'</span><span class="token punctuation" style="color:rgb(212, 212, 212)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></div></code></pre></div></div>
<blockquote>
<p>Regular expressions are supported as well.</p>
</blockquote>
<p>That produces:</p>
<div class="language-css codeBlockContainer_SUlo theme-code-block" style="--prism-color:#D4D4D4;--prism-background-color:#212121"><div class="codeBlockContent_UJo7"><pre tabindex="0" class="prism-code language-css codeBlock_Rhtc thin-scrollbar" style="color:#D4D4D4;background-color:#212121"><code class="codeBlockLines_s0U2"><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">page,</span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token selector" style="color:rgb(215, 186, 125)">:root</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">--spacing</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> 8rpx</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token selector" style="color:rgb(215, 186, 125)">.h-2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(212, 212, 212)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain">  </span><span class="token property" style="color:#9CDCFE">height</span><span class="token punctuation" style="color:rgb(212, 212, 212)">:</span><span class="token plain"> 16rpx</span><span class="token punctuation" style="color:rgb(212, 212, 212)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#D4D4D4"><span class="token plain"></span><span class="token punctuation" style="color:rgb(212, 212, 212)">}</span><br></div></code></pre></div></div>
<p>This is one practical way to fix device compatibility issues around <code>calc</code> and <code>rpx</code>.</p>
<p>See the <a href="https://github.com/sonofmagic/weapp-tailwindcss/tree/main/packages/weapp-tailwindcss/src" target="_blank" rel="noopener noreferrer" class="">current source and option types</a> for the latest API shape.</p>
<h2 class="anchor anchorTargetStickyNavbar_CDd4" id="new-options">New options<a href="https://tw.icebreaker.top/en/blog/2025/9/v4.3-release#new-options" class="hash-link" aria-label="Direct link to New options" title="Direct link to New options" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_CDd4" id="px2rpx">px2rpx<a href="https://tw.icebreaker.top/en/blog/2025/9/v4.3-release#px2rpx" class="hash-link" aria-label="Direct link to px2rpx" title="Direct link to px2rpx" translate="no">​</a></h3>
<p>Adds a <code>px2rpx</code> option to control whether <code>px</code> units should be converted to <code>rpx</code>. The default is <code>false</code>.</p>
<p>Passing <code>true</code> converts every <code>px</code> unit to <code>rpx</code> at a <code>1:1</code> ratio.</p>
<p>If you need more advanced conversion behavior, pass an object. Its option shape follows <a href="https://www.npmjs.com/package/postcss-pxtransform" target="_blank" rel="noopener noreferrer" class="">https://www.npmjs.com/package/postcss-pxtransform</a></p>
<h3 class="anchor anchorTargetStickyNavbar_CDd4" id="loglevel">logLevel<a href="https://tw.icebreaker.top/en/blog/2025/9/v4.3-release#loglevel" class="hash-link" aria-label="Direct link to logLevel" title="Direct link to logLevel" translate="no">​</a></h3>
<p>Adds a <code>logLevel</code> option to control log output verbosity. The default is <code>info</code>.</p>]]></content:encoded>
            <author>hi@sonofmagic.top (icebreaker)</author>
        </item>
    </channel>
</rss>