{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/integrate-tailwind-css-with-react-application","result":{"data":{"markdownRemark":{"id":"c7993308-f93f-504f-ac0e-eb72d937b20c","html":"<p><a href=\"https://tailwindcss.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Tailwind CSS</a> là 1 <strong>low-level</strong> CSS framework rất dễ tùy biến, không như những framework, UI Kits khác khi tập trung vào các <strong>pre-design components</strong> (buttons, cards, modals…) có thể giúp bạn phát triển nhanh ban đầu nhưng sau đó sẽ rất mất công để custom styling cho các component đó. Tailwind tập trung vào low-level utility classes (<strong>utility-first</strong>) giúp bạn tự build hoàn toàn design của mình mà không phải lo lắng về việc <strong>override</strong> các <strong>style</strong> có sẵn.</p>\n<p><img src=\"/media/tailwindcss.png\" alt=\"Tailwind CSS example\"></p>\n<p><small style=\"padding: 0px 30px\">Khá giống với <strong>Bootstrap</strong> nhưng bộ utility class của <strong>Tailwind CSS</strong> phong phú hơn rất nhiều</small></p>\n<p>Bài này mình sẽ hướng dẫn anh em cách để tích hợp Tailwind CSS vào React app nhé  😄 😄</p>\n<h2 id=\"tạo-react-app\" style=\"position:relative;\"><a href=\"#t%E1%BA%A1o-react-app\" aria-label=\"tạo react app permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Tạo react app</h2>\n<p>Cách đơn giản nhất để tạo react app là sử dụng <a href=\"https://create-react-app.dev/docs/getting-started/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">create-react-app</a> script với <code class=\"language-text\">npx</code></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">npx create-react-app my-app <span class=\"token operator\">&amp;&amp;</span> <span class=\"token builtin class-name\">cd</span> my-app</code></pre></div>\n<p>Sử dụng <code class=\"language-text\">npx</code> anh em có thể chạy <code class=\"language-text\">create-react-app</code> script mà không cần phải cài <strong>package</strong> này</p>\n<h2 id=\"thêm-dependencies\" style=\"position:relative;\"><a href=\"#th%C3%AAm-dependencies\" aria-label=\"thêm dependencies permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Thêm dependencies</h2>\n<p>Cài đặt các <strong>dependency</strong> sau để set up <strong>Tailwind CSS</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">yarn</span> <span class=\"token function\">add</span> tailwindcss postcss-cli autoprefixer -D\n<span class=\"token comment\">## hoặc npm install tailwindcss postcss-cli autoprefixer --save-dev</span></code></pre></div>\n<p><small>Chỉ cần thêm vào <strong>devDependencies</strong> thôi nhé</small></p>\n<p>Ở đây ngoài <strong>Tailwind CSS</strong> chúng ta cài thêm:</p>\n<ul>\n<li><a href=\"https://github.com/postcss/postcss\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PostCSS</a>: 1 công cụ để phân tích và chuyển đổi <strong>styling</strong> bằng các <strong>JS plugin</strong>, giúp bạn gợi ý <strong>CSS</strong>, hỗ trợ <strong>variables</strong> và <strong>mixins</strong>, biên dịch các CSS mới…</li>\n<li><a href=\"https://github.com/postcss/autoprefixer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Autoprefixer</a>: 1 plugin của <strong>PostCSS</strong> hỗ trợ việc thêm các <a href=\"https://www.lifewire.com/css-vendor-prefixes-3466867\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">vendor prefix</a>(<code class=\"language-text\">-webkit-</code>, <code class=\"language-text\">-moz-</code>, <code class=\"language-text\">-ms-</code>, <code class=\"language-text\">-o-</code>,…) bằng cách lấy thông tin từ <a href=\"https://caniuse.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Can I Use</a> để CSS bạn viết có thể tương thích ở nhiều trình duyệt khác nhau</li>\n</ul>\n<h2 id=\"config-postcss\" style=\"position:relative;\"><a href=\"#config-postcss\" aria-label=\"config postcss permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Config PostCSS</h2>\n<p>PostCSS giúp quản lý và cấu hình việc build CSS.</p>\n<p>Tạo file config:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">touch</span> postcss.config.js</code></pre></div>\n<p>Thêm config sau:</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">module<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    plugins<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'tailwindcss'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'autoprefixer'</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Quá trình <strong>build</strong> sử dụng 2 <strong>plugin</strong> là <code class=\"language-text\">tailwindcss</code> và <code class=\"language-text\">autoprefixer</code></p>\n<h2 id=\"injecting-tailwind-css\" style=\"position:relative;\"><a href=\"#injecting-tailwind-css\" aria-label=\"injecting tailwind css permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Injecting Tailwind CSS</h2>\n<p>Tạo 1 <strong>sub-folder</strong> là <strong>styles</strong> trong folder <strong>src</strong>. Trong folder <strong>styles</strong> tạo file <strong>tailwind.css</strong></p>\n<p>Hoặc dùng <strong>command line</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">mkdir</span> src/styles <span class=\"token operator\">&amp;&amp;</span> <span class=\"token function\">touch</span> src/styles/tailwind.css</code></pre></div>\n<p><strong>Import</strong> các <strong>module</strong> sau của Tailwind CSS</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token atrule\"><span class=\"token rule\">@tailwind</span> base<span class=\"token punctuation\">;</span></span>\n\n<span class=\"token atrule\"><span class=\"token rule\">@tailwind</span> components<span class=\"token punctuation\">;</span></span>\n\n<span class=\"token atrule\"><span class=\"token rule\">@tailwind</span> utilities<span class=\"token punctuation\">;</span></span></code></pre></div>\n<p><small>tailwind.css</small></p>\n<blockquote>\n<p><strong>Folder</strong> chứa file <strong>tailwind.css</strong> các bạn có thể đặt tùy ý theo <strong>project</strong> của mình nhé, có thể là <code class=\"language-text\">src/static</code>, <code class=\"language-text\">src/assets</code>, <code class=\"language-text\">src/styles</code> …</p>\n</blockquote>\n<h2 id=\"thêm-build-script\" style=\"position:relative;\"><a href=\"#th%C3%AAm-build-script\" aria-label=\"thêm build script permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Thêm build script</h2>\n<p>Mở file <code class=\"language-text\">package.json</code>, thêm <strong>build script</strong> sau (vào object <code class=\"language-text\">scripts</code>):</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token property\">\"build:css\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"postcss src/styles/tailwind.css -o src/styles/main.css\"</span></code></pre></div>\n<p>Script này sẽ sử dụng <a href=\"https://github.com/postcss/postcss-cli\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">PostCSS CLI</a> để build css dựa trên những <strong>config</strong> trong file <strong>tailwind.css</strong> với output (flag <code class=\"language-text\">-o</code>) là file <strong>main.css</strong></p>\n<p>Anh em có thể tùy ý chọn tên file và vị trí, ở đây mình để cả file <strong>input</strong> chứa <strong>config</strong> và <strong>output</strong> trong cùng 1 folder là <code class=\"language-text\">src/styles</code></p>\n<p>Bây giờ anh em có thể tự <strong>trigger</strong> build bằng lệnh:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">yarn</span> build:css\n<span class=\"token comment\"># hoặc npm run build:css</span></code></pre></div>\n<p>Sau khi config và build xong, project của bạn sẽ trông như thế này:</p>\n<p><img src=\"/media/tailwind-project.png\" alt=\"Project structure\"></p>\n<p>Để tiện hơn thì các bạn nên tích hợp <code class=\"language-text\">build:css</code> command vào script <code class=\"language-text\">start</code> và <code class=\"language-text\">build</code> của <strong>project</strong>, như vậy sẽ đảm bảo CSS luôn đc build lại theo những update mới nhất của mình mỗi lần <strong>start project</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token property\">\"scripts\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token property\">\"start\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run build:css &amp;&amp; react-scripts start\"</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token property\">\"build\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"npm run build:css &amp;&amp; react-scripts build\"</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token property\">\"test\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"react-scripts test\"</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token property\">\"eject\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"react-scripts eject\"</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token property\">\"build:css\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"postcss src/styles/tailwind.css -o src/styles/main.css\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><small>Tất cả <strong>scripts</strong> sau khi hoàn thiện</small></p>\n<p>Bây giờ để build CSS và start project thì chỉ cần <code class=\"language-text\">yarn start</code> là đủ.</p>\n<h2 id=\"sử-dụng-trong-react-component\" style=\"position:relative;\"><a href=\"#s%E1%BB%AD-d%E1%BB%A5ng-trong-react-component\" aria-label=\"sử dụng trong react component permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Sử dụng trong react component</h2>\n<p><strong>Import</strong> CSS đã build vào file start của <strong>project</strong> (của mình là <code class=\"language-text\">index.js</code>):</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token string\">'./styles/main.css'</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// ... other imports</span></code></pre></div>\n<p><small>index.js</small></p>\n<p>Tạo 1 component cơ bản:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"language-jsx\"><code class=\"language-jsx\"><span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">App</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>flex justify-center pt-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>max-w-sm w-full lg:max-w-full lg:flex shadow-lg<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>h-48 lg:h-auto lg:w-48 flex-none bg-cover rounded-t lg:rounded-t-none lg:rounded-l text-center overflow-hidden<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">style</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> backgroundImage<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">url('https://image-us.24h.com.vn/upload/1-2020/images/2020-02-06/kodfd-1580928361-474-width640height480.jpg')</span><span class=\"token template-punctuation string\">`</span></span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span> <span class=\"token attr-name\">title</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Woman holding a mug<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>border-r border-b border-l border-gray-400 lg:border-l-0 lg:border-t lg:border-gray-400 bg-white rounded-b lg:rounded-b-none lg:rounded-r p-4 flex flex-col justify-between leading-normal<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>mb-8<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-sm text-gray-600 flex items-center<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Latest News</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-gray-900 font-bold text-xl mb-2<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Messi is moving to Manchester City</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-gray-700 text-base<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatibus quia, nulla! Maiores et perferendis eaque, exercitationem praesentium nihil.</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>flex items-center<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>w-10 h-10 rounded-full mr-4<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcRG2WOlZ4KLuNN1ksjNOmh6oZ091IUhJiZD7w&amp;usqp=CAU<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">alt</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Avatar of Jonathan Reinink<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-sm<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-gray-900 leading-none<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Jonathan Reinink</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">className</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-gray-600<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Aug 18</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n\t</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> App<span class=\"token punctuation\">;</span></code></pre></div>\n<p><small>App.js</small></p>\n<p>Kết quả sẽ trông như thế này:</p>\n<p><img src=\"/media/messi.jpg\" alt=\"Tailwind css result\"></p>\n<h2 id=\"kết-bài\" style=\"position:relative;\"><a href=\"#k%E1%BA%BFt-b%C3%A0i\" aria-label=\"kết bài permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Kết bài</h2>\n<p>Hi vọng anh em có thể tích hợp và sử dụng <strong>Tailwind CSS</strong> trong <strong>project</strong> của mình qua <a href=\"/category//tutorial\">tutorial</a> này, cá nhân mình thấy đây là 1 <strong>framework</strong> khá đơn giản và dễ sử dụng, chất lượng ổn.</p>\n<p>Anh em để lại nhận xét cho mình ở dưới comment nhé :D</p>\n<h2 id=\"tham-khảo\" style=\"position:relative;\"><a href=\"#tham-kh%E1%BA%A3o\" aria-label=\"tham khảo permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Tham khảo</h2>\n<ul>\n<li><a href=\"https://tailwindcss.com/docs/installation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Tailwind CSS Documentation</a></li>\n<li><a href=\"https://create-react-app.dev/docs/getting-started/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Create React App</a></li>\n<li><a href=\"https://codingthesmartway.com/using-tailwind-css-with-react/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://codingthesmartway.com/using-tailwind-css-with-react/</a></li>\n<li><a href=\"https://www.smashingmagazine.com/2020/02/tailwindcss-react-project/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://www.smashingmagazine.com/2020/02/tailwindcss-react-project/</a></li>\n</ul>","fields":{"slug":"/posts/integrate-tailwind-css-with-react-application","tagSlugs":["/tag/integration/","/tag/tailwind-css/","/tag/postcss/","/tag/react/"]},"frontmatter":{"date":"2020-08-30T22:12:03.284Z","description":"Tailwind CSS là 1 low-level CSS framework rất dễ tùy biến, không như các framework khác khi tập trung vào các pre-design components như buttons, cards, modals... có thể giúp bạn phát triển nhanh ban đầu nhưng sau đó sẽ rất mất công để custom các component có sẵn, Tailwind tập trung vào low-level utility classes...","tags":["integration","tailwind-css","postcss","react"],"title":"Tích hợp Tailwind CSS vào React application","socialImage":"/media/css.jpg","headerImage":"/media/css.jpg"},"timeToRead":6}},"pageContext":{"slug":"/posts/integrate-tailwind-css-with-react-application"}}}