PageSourceSearch

https://johnnywang1994.github.io/book/assets/learn-tailwindcss.html-BxoHVgW7.js

js johnnywang1994.github.io collected 2026-10-03 09:24:43 UTC 54,005 bytes, 205 lines download raw bytes

1import{_ as p,c as l,b as s,d as a,a as t,e as c,r as i,o}from"./app-BgYE7jZN.js";const u={};function r(d,n){const e=i("SocialBlock");return o(),l("div",null,[n[0]||(n[0]=s("h1",{id:"差點錯過的-tailwindcss-入門學習筆記",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#差點錯過的-tailwindcss-入門學習筆記"},[s("span",null,"差點錯過的 Tailwindcss 入門學習筆記")])],-1)),n[1]||(n[1]=s("h6",{id:"tags-css-tailwindcss-2024",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#tags-css-tailwindcss-2024"},[s("span",null,[a("tags: "),s("code",null,"CSS"),a(),s("code",null,"tailwindcss"),a(),s("code",null,"2024")])])],-1)),t(e,{hashtags:"css,tailwindcss,2024"}),n[2]||(n[2]=c(`<p>本篇主要只記載一些我個人覺得比較特殊需要筆記的內容~並不是整份文件喔!</p><h2 id="start" tabindex="-1"><a class="header-anchor" href="#start"><span>Start</span></a></h2><h3 id="install" tabindex="-1"><a class="header-anchor" href="#install"><span>Install</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line">$ <span class="token function">npm</span> <span class="token function">install</span> <span class="token parameter variable">-D</span> tailwindcss postcss autoprefixer</span>
2<span class="line">$ npx tailwindcss init <span class="token punctuation">[</span>--ts<span class="token operator">|</span>--esm<span class="token punctuation">]</span></span>
3<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="configure" tabindex="-1"><a class="header-anchor" href="#configure"><span>Configure</span></a></h3><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// for TS</span></span>
4<span class="line"><span class="token keyword">import</span> type <span class="token punctuation">{</span> Config <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;tailwindcss&#39;</span></span>
5<span class="line"></span>
6<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span></span>
7<span class="line">  <span class="token literal-property property">content</span><span class="token operator">:</span> <span class="token punctuation">[</span></span>
8<span class="line">    <span class="token string">&#39;./index.html&#39;</span><span class="token punctuation">,</span></span>
9<span class="line">    <span class="token string">&#39;./src/**/*.{vue,js,ts,jsx,tsx,mdx}&#39;</span><span class="token punctuation">,</span></span>
10<span class="line">  <span class="token punctuation">]</span><span class="token punctuation">,</span></span>
11<span class="line">  <span class="token literal-property property">theme</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
12<span class="line">    <span class="token literal-property property">extend</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
13<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
14<span class="line">  <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span></span>
15<span class="line"><span class="token punctuation">}</span> satisfies Config</span>
16<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// postcss.config</span></span>
17<span class="line">module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span></span>
18<span class="line">  <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
19<span class="line">    <span class="token literal-property property">tailwindcss</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
20<span class="line">    <span class="token literal-property property">autoprefixer</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
21<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
22<span class="line"><span class="token punctuation">}</span></span>
23<span class="line"></span>
24<span class="line"><span class="token comment">// use with preprocessor</span></span>
25<span class="line">module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span></span>
26<span class="line">  <span class="token literal-property property">plugins</span><span class="token operator">:</span> <span class="token punctuation">{</span></span>
27<span class="line">    <span class="token string-property property">&#39;postcss-import&#39;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
28<span class="line">    <span class="token string-property property">&#39;tailwindcss/nesting&#39;</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
29<span class="line">    <span class="token literal-property property">tailwindcss</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
30<span class="line">    <span class="token literal-property property">autoprefixer</span><span class="token operator">:</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span></span>
31<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span></span>
32<span class="line"><span class="token punctuation">}</span></span>
33<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="import" tabindex="-1"><a class="header-anchor" href="#import"><span>
33Import</span></a></h3><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* global.css */</span></span>
34<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> base<span class="token punctuation">;</span></span></span>
35<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> components<span class="token punctuation">;</span></span></span>
36<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> utilities<span class="token punctuation">;</span></span></span>
37<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">/* entrypoint of your js file */</span></span>
38<span class="line"><span class="token keyword">import</span> <span class="token string">&#39;./global.css&#39;</span></span>
39<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="core-concepts" tabindex="-1"><a class="header-anchor" href="#core-concepts"><span>Core Concepts</span></a></h2><h3 id="states" tabindex="-1"><a class="header-anchor" href="#states"><span>States</span></a></h3><h4 id="pseudo-classes" tabindex="-1"><a class="header-anchor" href="#pseudo-classes"><span>Pseudo-classes</span></a></h4><ul><li><code>hover</code>, <code>active</code>, <code>focus</code></li><li><code>first</code>, <code>last</code>, <code>odd</code>, <code>even</code></li><li><code>focus</code>, <code>disabled</code>, <code>invalid</code>, <code>checked</code></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-descendants" target="_blank" rel="noopener noreferrer"><code>has</code>, <code>group-has-*</code>, <code>peer-has-*</code></a></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-parent-state" target="_blank" rel="noopener noreferrer"><code>group</code>, <code>group-hover</code>...</a></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-sibling-state" target="_blank" rel="noopener noreferrer"><code>peer</code>, <code>peer-invalid</code>...</a></li></ul><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>li</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>first:pt-0 last:pb-0<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>li</span><span class="token punctuation">&gt;</span></span></span>
40<span class="line"></span>
41<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>label</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>has-[:checked]:bg-indigo-50 has-[:checked]:text-indigo-900 has-[:checked]:ring-indigo-200 ..<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
42<span class="line">  Google Pay</span>
43<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>radio<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>checked:border-indigo-500 ...<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></span>
44<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>label</span><span class="token punctuation">&gt;</span></span></span>
45<span class="line"></span>
46<span class="line"><span class="token comment">&lt;!-- 可以藉由 group 搭配 group-has-* 做到,當同 group 內達成特定條件後套用樣式 --&gt;</span></span>
47<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>group ...<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
48<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>...<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></span>
49<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h4</span><span class="token punctuation">&gt;</span></span>Spencer Sharp<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h4</span><span class="token punctuation">&gt;</span></span></span>
50<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>hidden group-has-[a]:block ...<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
51<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>my-icon.svg<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></span>
52<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
53<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>p</span><span class="token punctuation">&gt;</span></span>Product Designer at <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a</span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>...<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>planeteria.tech<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>p</span><span class="token punctuation">&gt;</span></span></span>
54<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
55<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="pseudo-elements" tabindex="-1"><a class="header-anchor" href="#pseudo-elements"><span>Pseudo-elements</span></a></h4><ul><li><code>before</code>, <code>after</code></li><li><code>placeholder</code></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#file-input-buttons" target="_blank" rel="noopener noreferrer"><code>file</code></a></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#list-markers" target="_blank" rel="noopener noreferrer"><code>marker</code></a></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#highlighted-text" target="_blank" rel="noopener noreferrer"><code>selection</code></a></li></ul><h4 id="media-queries" tabindex="-1"><a class="header-anchor" href="#media-queries"><span>Media queries</span></a></h4><ul><li><code>md</code>, <code>lg</code>...</li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#prefers-color-scheme" target="_blank" rel="noopener noreferrer"><code>dark</code></a></li><li><a href="https://tailwindcss.com/docs/hover-focus-and-other-states#prefers-reduced-motion" target="_blank" rel="noopener noreferrer"><code>motion-reduce</code>, <code>motion-safe</code></a></li><li><code>portrait</code>, <code>landscape</code></li><li><code>print</code></li></ul><h3 id="responsive-design" tabindex="-1"><a class="header-anchor" href="#responsive-design"><span>Responsive Design</span></a></h3><ul><li><a href="https://tailwindcss.com/docs/responsive-design" target="_blank" rel="noopener noreferrer">Ref</a></li></ul><table><thead><tr><th>
55Breakpoint prefix</th><th>Minimum width</th></tr></thead><tbody><tr><td><code>sm</code></td><td>640px</td></tr><tr><td><code>md</code></td><td>768px</td></tr><tr><td><code>lg</code></td><td>1024px</td></tr><tr><td><code>xl</code></td><td>1280px</td></tr><tr><td><code>2xl</code></td><td>1536px</td></tr></tbody></table><h3 id="dark-mode" tabindex="-1"><a class="header-anchor" href="#dark-mode"><span>Dark Mode</span></a></h3><p>By default this uses the <code>prefers-color-scheme</code> CSS media feature, but you can also build sites that support toggling dark mode manually using the <code>class</code> strategy.</p><ul><li><a href="https://tailwindcss.com/docs/dark-mode" target="_blank" rel="noopener noreferrer">Ref</a></li></ul><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line">module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span></span>
56<span class="line">  <span class="token literal-property property">darkMode</span><span class="token operator">:</span> <span class="token string">&#39;class&#39;</span><span class="token punctuation">,</span></span>
57<span class="line">  <span class="token comment">// ...</span></span>
58<span class="line"><span class="token punctuation">}</span></span>
59<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!-- Dark mode not enabled --&gt;</span></span>
60<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span></span>
61<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
62<span class="line">  <span class="token comment">&lt;!-- Will be white --&gt;</span></span>
63<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-white dark:bg-black<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
64<span class="line">    <span class="token comment">&lt;!-- ... --&gt;</span></span>
65<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
66<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
67<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
68<span class="line"></span>
69<span class="line"><span class="token comment">&lt;!-- Dark mode enabled --&gt;</span></span>
70<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>dark<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
71<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span></span>
72<span class="line">  <span class="token comment">&lt;!-- Will be black --&gt;</span></span>
73<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-white dark:bg-black<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
74<span class="line">    <span class="token comment">&lt;!-- ... --&gt;</span></span>
75<span class="line">  <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
76<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span></span>
77<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span></span>
78<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="reusing-styles" tabindex="-1"><a class="header-anchor" href="#reusing-styles"><span>Reusing Styles</span></a></h3><p>Extracting classes with <code>@apply</code></p><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!-- Before extracting a custom class --&gt;</span></span>
79<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
80<span class="line">  Save changes</span>
81<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span>
82<span class="line"></span>
83<span class="line"><span class="token comment">&lt;!-- After extracting a custom class --&gt;</span></span>
84<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>btn-primary<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
85<span class="line">  Save changes</span>
86<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span></span>
87<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> base<span class="token punctuation">;</span></span></span>
88<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> components<span class="token punctuation">;</span></span></span>
89<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span>
89 utilities<span class="token punctuation">;</span></span></span>
90<span class="line"></span>
91<span class="line"><span class="token atrule"><span class="token rule">@layer</span> components</span> <span class="token punctuation">{</span></span>
92<span class="line">  <span class="token selector">.btn-primary</span> <span class="token punctuation">{</span></span>
93<span class="line">    <span class="token atrule"><span class="token rule">@apply</span> py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md <span class="token property">hover</span><span class="token punctuation">:</span>bg-blue-700 <span class="token property">focus</span><span class="token punctuation">:</span>outline-none <span class="token property">focus</span><span class="token punctuation">:</span>ring-2 <span class="token property">focus</span><span class="token punctuation">:</span>ring-blue-400 <span class="token property">focus</span><span class="token punctuation">:</span>ring-opacity-75<span class="token punctuation">;</span></span></span>
94<span class="line">  <span class="token punctuation">}</span></span>
95<span class="line"><span class="token punctuation">}</span></span>
96<span class="line"></span>
97<span class="line"><span class="token atrule"><span class="token rule">@layer</span> utilities</span> <span class="token punctuation">{</span></span>
98<span class="line">  <span class="token selector">.content-auto</span> <span class="token punctuation">{</span></span>
99<span class="line">    <span class="token property">content-visibility</span><span class="token punctuation">:</span> auto<span class="token punctuation">;</span></span>
100<span class="line">  <span class="token punctuation">}</span></span>
101<span class="line"><span class="token punctuation">}</span></span>
102<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="css-variable-without-var" tabindex="-1"><a class="header-anchor" href="#css-variable-without-var"><span>CSS Variable without var()</span></a></h4><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token comment">&lt;!-- old --&gt;</span></span>
103<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-[var(--brand-color)] hover:bg-[var(--brand-hover-color)]<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span></span>
104<span class="line"><span class="token comment">&lt;!-- now --&gt;</span></span>
105<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-[--brand-color] hover:bg-[--brand-hover-color]<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
106<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="custom-styles" tabindex="-1"><a class="header-anchor" href="#custom-styles"><span>Custom Styles</span></a></h3><ul><li><a href="https://tailwindcss.com/docs/adding-custom-styles" target="_blank" rel="noopener noreferrer">Ref</a></li></ul><h4 id="using-arbitrary-values" tabindex="-1"><a class="header-anchor" href="#using-arbitrary-values"><span>Using arbitrary values</span></a></h4><div class="language-html line-numbers-mode" data-highlighter="prismjs" data-ext="html"><pre><code class="language-html"><span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-[#bada55] text-[22px] before:content-[&#39;Festivus&#39;]<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
107<span class="line">  <span class="token comment">&lt;!-- ... --&gt;</span></span>
108<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
109<span class="line"></span>
110<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>bg-[url(&#39;/what_a_rush.png&#39;)]<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
111<span class="line">  <span class="token comment">&lt;!-- ... --&gt;</span></span>
112<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
113<span class="line"></span>
114<span class="line"><span class="token comment">&lt;!-- white space --&gt;</span></span>
115<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>grid grid-cols-[1fr_500px_2fr]<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span></span>
116<span class="line">  <span class="token comment">&lt;!-- ... --&gt;</span></span>
117<span class="line"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
118<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>What is Layer?</p><ul><li><code>base</code>: for things like reset rules or default styles applied to plain HTML elements.</li><li><code>components</code>: for class-based styles that you want to be able to override with utilities.</li><li><code>utilities</code>: for small, single-purpose classes that should always take precedence over any other styles.</li></ul></blockquote><h4 id="removing-unused-custom-css" tabindex="-1"><a class="header-anchor" href="#removing-unused-custom-css"><span>Removing unused custom CSS</span></a></h4><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> base<span class="token punctuation">;</span></span></span>
119<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> components<span class="token punctuation">;</span></span></span>
120<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span>
120 utilities<span class="token punctuation">;</span></span></span>
121<span class="line"></span>
122<span class="line"><span class="token atrule"><span class="token rule">@layer</span> components</span> <span class="token punctuation">{</span></span>
123<span class="line">  <span class="token comment">/* This won&#39;t be included in your compiled CSS unless you actually use it */</span></span>
124<span class="line">  <span class="token selector">.card</span> <span class="token punctuation">{</span></span>
125<span class="line">    <span class="token comment">/* ... */</span></span>
126<span class="line">  <span class="token punctuation">}</span></span>
127<span class="line"><span class="token punctuation">}</span></span>
128<span class="line"></span>
129<span class="line"><span class="token comment">/* This will always be included in your compiled CSS */</span></span>
130<span class="line"><span class="token selector">.card</span> <span class="token punctuation">{</span></span>
131<span class="line">  <span class="token comment">/* ... */</span></span>
132<span class="line"><span class="token punctuation">}</span></span>
133<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>In under-the-hood, frameworks like Vue and Svelte are processing every single <code>&lt;style&gt;</code> block independently, and running your PostCSS plugin chain against each one in isolation. That means if you have 10 components that each have a <code>&lt;style&gt;</code> block, Tailwind is being run 10 separate times, and each run has zero knowledge about the other runs. Because of this, Tailwind can’t take the styles you define in a <code>@layer</code> and move them to the corresponding <code>@tailwind</code> directive</p></blockquote><h3 id="functions-directives" tabindex="-1"><a class="header-anchor" href="#functions-directives"><span>Functions &amp; Directives</span></a></h3><h4 id="directives" tabindex="-1"><a class="header-anchor" href="#directives"><span>Directives</span></a></h4><ul><li><code>@tailwind</code></li><li><code>@layer</code></li><li><code>@apply</code></li></ul><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> base<span class="token punctuation">;</span></span></span>
134<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> components<span class="token punctuation">;</span></span></span>
135<span class="line"><span class="token atrule"><span class="token rule">@tailwind</span> utilities<span class="token punctuation">;</span></span></span>
136<span class="line"></span>
137<span class="line"><span class="token atrule"><span class="token rule">@layer</span> base</span> <span class="token punctuation">{</span></span>
138<span class="line">  <span class="token selector">h1</span> <span class="token punctuation">{</span></span>
139<span class="line">    <span class="token atrule"><span class="token rule">@apply</span> text-2xl<span class="token punctuation">;</span></span></span>
140<span class="line">  <span class="token punctuation">}</span></span>
141<span class="line">  <span class="token selector">h2</span> <span class="token punctuation">{</span></span>
142<span class="line">    <span class="token atrule"><span class="token rule">@apply</span> text-xl<span class="token punctuation">;</span></span></span>
143<span class="line">  <span class="token punctuation">}</span></span>
144<span class="line"><span class="token punctuation">}</span></span>
145<span class="line"></span>
146<span class="line"><span class="token atrule"><span class="token rule">@layer</span> components</span> <span class="token punctuation">{</span></span>
147<span class="line">  <span class="token selector">.btn-blue</span> <span class="token punctuation">{</span></span>
148<span class="line">    <span class="token atrule"><span class="token rule">@apply</span> bg-blue-500 <span class="token property">hover</span><span class="token punctuation">:</span>
148bg-blue-700 text-white font-bold py-2 px-4 rounded<span class="token punctuation">;</span></span></span>
149<span class="line">  <span class="token punctuation">}</span></span>
150<span class="line"><span class="token punctuation">}</span></span>
151<span class="line"></span>
152<span class="line"><span class="token atrule"><span class="token rule">@layer</span> utilities</span> <span class="token punctuation">{</span></span>
153<span class="line">  <span class="token selector">.filter-none</span> <span class="token punctuation">{</span></span>
154<span class="line">    <span class="token property">filter</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span></span>
155<span class="line">  <span class="token punctuation">}</span></span>
156<span class="line">  <span class="token selector">.filter-grayscale</span> <span class="token punctuation">{</span></span>
157<span class="line">    <span class="token property">filter</span><span class="token punctuation">:</span> <span class="token function">grayscale</span><span class="token punctuation">(</span>100%<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
158<span class="line">  <span class="token punctuation">}</span></span>
159<span class="line"><span class="token punctuation">}</span></span>
160<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>Any rules inlined with @apply will have !important removed by default to avoid specificity issues:</p></blockquote><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* Input */</span></span>
161<span class="line"><span class="token selector">.foo</span> <span class="token punctuation">{</span></span>
162<span class="line">  <span class="token property">color</span><span class="token punctuation">:</span> blue <span class="token important">!important</span><span class="token punctuation">;</span></span>
163<span class="line"><span class="token punctuation">}</span></span>
164<span class="line"></span>
165<span class="line"><span class="token selector">.bar</span> <span class="token punctuation">{</span></span>
166<span class="line">  <span class="token atrule"><span class="token rule">@apply</span> foo<span class="token punctuation">;</span></span></span>
167<span class="line"><span class="token punctuation">}</span></span>
168<span class="line"></span>
169<span class="line"><span class="token comment">/* Output */</span></span>
170<span class="line"><span class="token selector">.foo</span> <span class="token punctuation">{</span></span>
171<span class="line">  <span class="token property">color</span><span class="token punctuation">:</span> blue <span class="token important">!important</span><span class="token punctuation">;</span></span>
172<span class="line"><span class="token punctuation">}</span></span>
173<span class="line"></span>
174<span class="line"><span class="token selector">.bar</span> <span class="token punctuation">{</span></span>
175<span class="line">  <span class="token property">color</span><span class="token punctuation">:</span> blue<span class="token punctuation">;</span></span>
176<span class="line"><span class="token punctuation">}</span></span>
177<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="functions" tabindex="-1"><a class="header-anchor" href="#functions"><span>Functions</span></a></h4><ul><li><code>theme</code>, <code>screen</code></li></ul><div class="language-css line-numbers-mode" data-highlighter="prismjs" data-ext="css"><pre><code class="language-css"><span class="line"><span class="token comment">/* use dot in number */</span></span>
178<span class="line"><span class="token selector">.content-area</span> <span class="token punctuation">{</span></span>
179<span class="line">  <span class="token property">height</span><span class="token punctuation">:</span> <span class="token function">calc</span><span class="token punctuation">(</span>100vh - <span class="token function">theme</span><span class="token punctuation">(</span><span class="token string">&#39;spacing[2.5]&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
180<span class="line"><span class="token punctuation">}</span></span>
181<span class="line"></span>
182<span class="line"><span class="token selector">.btn-blue</span> <span class="token punctuation">{</span></span>
183<span class="line">  <span class="token property">background-color</span><span class="token punctuation">:</span> <span class="token function">theme</span><span class="token punctuation">(</span><span class="token string">&#39;colors.blue.500&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
184<span class="line"><span class="token punctuation">}</span></span>
185<span class="line"></span>
186<span class="line"><span class="token atrule"><span class="token rule">@media</span> <span class="token function">screen</span><span class="token punctuation">(</span>sm<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
187<span class="line">  <span class="token comment">/* ... */</span></span>
188<span class="line"><span class="token punctuation">}</span></span>
189<span class="line"><span class="token comment">/* equal to */</span></span>
190<span class="line"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">min-width</span><span class="token punctuation">:</span> 640px<span class="token punctuation">)</span></span> <span class="token punctuation">{</span></span>
191<span class="line">  <span class="token comment">/* ... */</span></span>
192<span class="line"><span class="token punctuation">}</span></span>
193<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果我們一邊在用 sass 又需要使用 <code>screen</code> 這種功能的話,可以像下面這樣結合 sass mixin 處理</p><div class="language-scss line-numbers-mode" data-highlighter="prismjs" data-ext="scss"><pre><code class="language-scss"><span class="line"><span class="token keyword">@mixin</span> <span class="token function">rwd</span><span class="token punctuation">(</span><span class="token variable">$size</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
194<span class="line">  @media <span class="token punctuation">(</span><span class="token property">min-width</span><span class="token punctuation">:</span> <span class="token function">theme</span><span class="token punctuation">(</span><span class="token string">&quot;screens.#{$size}&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
195<span class="line">    <span class="token keyword">@content</span><span class="token punctuation">;</span></span>
196<span class="line">  <span class="token punctuation">}</span></span>
197<span class="line"><span class="token punctuation">}</span></span>
198<span class="line"></span>
199<span class="line"><span class="token comment">// 這樣我們就可以在 nested 結構下使用 tailwind 的變數了</span></span>
200<span class="line"><span class="token selector">h1 </span><span class="token punctuation">{</span></span>
201<span class="line">  <span class="token keyword">@include</span> <span class="token function">rwd</span><span class="token punctuation">(</span>sm<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
202<span class="line">    <span class="token property">color</span><span class="token punctuation">:</span> red<span class="token punctuation">;</span></span>
203<span class="line">  <span class="token punctuation">}</span></span>
204<span class="line"><span class="token punctuation">}</span></span>
205<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,52)),t(e,{hashtags:"css,tailwindcss,2022"})])}const m=p(u,[["render",r]]),v=JSON.parse('{"path":"/articles/css/learn-tailwindcss.html","title":"差點錯過的 Tailwindcss 入門學習筆記","lang":"zh-TW","frontmatter":{}
205,"git":{"updatedTime":1748788505000,"contributors":[{"name":"johnnywang1994","username":"johnnywang1994","email":"[email protected]","commits":2,"url":"https://github.com/johnnywang1994"},{"name":"johnnywang","username":"johnnywang","email":"[email protected]","commits":9,"url":"https://github.com/johnnywang"},{"name":"JohnnyWang","username":"JohnnyWang","email":"[email protected]","commits":3,"url":"https://github.com/JohnnyWang"},{"name":"Lindy Liao","username":"","email":"[email protected]","commits":1}],"changelog":[{"hash":"f01bfa128b4d33fbeddb8abb1697b5391b273d28","time":1748788505000,"email":"[email protected]","author":"Lindy Liao","message":"UPD"},{"hash":"4e8b29c5a84b2c1f65f747a0221c74ccb00a52b2","time":1713517902000,"email":"[email protected]","author":"johnnywang","message":"UPD"},{"hash":"19ca78bf291fca56fe7e392524923775549f779c","time":1710772220000,"email":"[email protected]","author":"johnnywang","message":"✨ UPD"},{"hash":"b38ce0de9a5a727edf42006e665818677481bf64","time":1709902936000,"email":"[email protected]","author":"johnnywang","message":"UPD"},{"hash":"485a42005213f6724c9b210e8f9c9d59e950113a","time":1706619219000,"email":"[email protected]","author":"johnnywang","message":"🔧 updare"},{"hash":"05130fb3c05e2122288c5024834dd8dff3c27120","time":1704630173000,"email":"[email protected]","author":"johnnywang","message":"UPD: add astro-theme-flash-issue"},{"hash":"d918375ea95adeb84d4429d7b3615e50f6d8e9a6","time":1690461705000,"email":"[email protected]","author":"Johnny","message":"Develop (#11)","coAuthors":[{"name":"johnnywang","email":"[email protected]"}]},{"hash":"5b65a916a3283374e8f0786f8795805cbbe86676","time":1662693866000,"email":"[email protected]","author":"JohnnyWang","message":"UPD: update sonarcube memo"},{"hash":"38ab8687092ea20fcda95f2504fdd7a5be74aabe","time":1660306990000,"email":"[email protected]","author":"JohnnyWang","message":"UPD: add vue react state compare"},{"hash":"28b405a579026b66500f99e1b33a7e5dce48deff","time":1659156892000,"email":"[email protected]","author":"JohnnyWang","message":"UPD"},{"hash":"397d28ec1d3beab4b951899804abd7337ad16899","time":1650967141000,"email":"[email protected]","author":"johnnywang","message":"UPD: update tailwind"},{"hash":"2287a5e44df7f0da34e58048e2f8a4a2842dc157","time":1649426726000,"email":"[email protected]","author":"johnnywang","message":"UPD: update tailwindcss"},{"hash":"253baea042cc914a59f5bec9500cfa2d53d3418f","time":1649425524000,"email":"[email protected]","author":"johnnywang","message":"UPD: update tailwindcss"},{"hash":"b5e237626958145f9b102c9d9fe6bfd8f986d47a","time":1648811257000,"email":"[email protected]","author":"johnnywang1994","message":"UPD: add tailwind-basic"}]},"filePathRelative":"articles/css/learn-tailwindcss.md"}');export{m as comp,v as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.