<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Html/CSS Archives - Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/danh-muc/html-css/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/danh-muc/html-css/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Tue, 28 Nov 2023 06:10:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Html/CSS Archives - Tomoshare</title>
	<link>https://blog.tomosia.com.vn/danh-muc/html-css/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Sử dụng :where() và :is() trong CSS Selector &#8211; Ngắn gọn và mạnh mẽ</title>
		<link>https://blog.tomosia.com.vn/su-dung-where-va-is-trong-css-selector-ngan-gon-va-manh-me/</link>
					<comments>https://blog.tomosia.com.vn/su-dung-where-va-is-trong-css-selector-ngan-gon-va-manh-me/#comments</comments>
		
		<dc:creator><![CDATA[Dang Van Luan]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 06:10:35 +0000</pubDate>
				<category><![CDATA[Html/CSS]]></category>
		<category><![CDATA[css selector]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1998</guid>

					<description><![CDATA[<p>CSS (Cascading Style Sheets) ngày càng phát triển với những tính năng mới, và một số pseudo-classes mới&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/su-dung-where-va-is-trong-css-selector-ngan-gon-va-manh-me/">Sử dụng :where() và :is() trong CSS Selector &#8211; Ngắn gọn và mạnh mẽ</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p> CSS (Cascading Style Sheets) ngày càng phát triển với những tính năng mới, và một số pseudo-classes mới như <code>:where()</code> và <code>:is()</code> đã giúp làm cho việc chọn lựa và áp dụng kiểu cho các phần tử trở nên linh hoạt và dễ dàng hơn. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng <code>:where()</code> và <code>:is()</code> để tối ưu hóa CSS selector.</p>



<h3 id="i-tai-sao-chung-ta-can-where-va-is" class="wp-block-heading">I. <strong>Tại sao chúng ta cần <code>:where()</code> và <code>:is()</code>?</strong></h3>



<p>Trước khi có những pseudo-classes này, để áp dụng kiểu cho nhiều selector, chúng ta thường phải sử dụng một danh sách dài các selector, đôi khi dẫn đến mã CSS dài và khó đọc. Cùng xem xét một ví dụ:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="h1, h2, h3, h4, h5, h6 {
  color: blue;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">h1</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h2</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h3</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h4</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h5</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h6</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">color</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">blue</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Trong trường hợp này, chúng ta muốn áp dụng màu xanh cho tất cả các phần tử tiêu đề từ h1 đến h6. Tuy nhiên, khi cần loại bỏ một số phần tử khỏi danh sách, chúng ta phải lặp lại toàn bộ danh sách và loại bỏ chúng:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="h1, h2, h3, h5, h6 {
  color: blue;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">h1</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h2</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h3</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h5</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h6</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">color</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">blue</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Với <code>:where()</code> và <code>:is()</code>, chúng ta có cách tiếp cận mới giúp giảm sự lặp lại và làm cho mã CSS trở nên sáng sủa hơn.</p>



<h3 id="ii-su-dung-where-va-is" class="wp-block-heading">II. <strong>Sử Dụng <code>:where()</code> và <code>:is()</code></strong></h3>



<h4 id="1-su-dung-where" class="wp-block-heading">1. <strong>Sử dụng <code>:where()</code></strong></h4>



<p>Cú pháp của <code>:where()</code> rất đơn giản. Nó cho phép bạn nhóm các selector lại một cách hiệu quả mà không cần phải lặp lại toàn bộ danh sách:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code=":where(h1, h2, h3, h4, h5, h6) {
  color: blue;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">where</span><span style="color: #F286C4">(h1</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h2</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h3</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h4</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h5</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h6)</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">color</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">blue</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Câu lệnh trên sẽ có kết quả giống như ví dụ đầu tiên, áp dụng màu xanh cho tất cả các phần tử tiêu đề từ h1 đến h6</p>



<h4 id="2-su-dung-is" class="wp-block-heading">2. <strong>Sử dụng <code>:is()</code></strong></h4>



<p>Tương tự như <code>:where()</code>, <code>:is()</code> cung cấp một cách khác để nhóm các selector:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code=":is(h1, h2, h3, h4, h5, h6) {
  color: blue;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">is</span><span style="color: #F286C4">(h1</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h2</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h3</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h4</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h5</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> h6)</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">color</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">blue</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Cả hai cách tiếp cận đều tạo ra kết quả tương tự và giúp bạn làm cho mã CSS ngắn gọn hơn và dễ đọc hơn.</p>



<h3 id="iii-uu-diem-va-luu-y" class="wp-block-heading">III. <strong>Ưu điểm và Lưu ý</strong></h3>



<h4 id="1-ngan-gon-va-de-doc" class="wp-block-heading">1. <strong>Ngắn Gọn và Dễ Đọc:</strong></h4>



<p>Cả <code>:where()</code> và <code>:is()</code> giúp giảm sự lặp lại trong mã CSS, làm cho nó trở nên ngắn gọn và dễ đọc hơn.</p>



<h4 id="2-tich-hop-de-dang" class="wp-block-heading">2. <strong>Tích hợp Dễ Dàng:</strong></h4>



<p>Cả hai pseudo-classes này tích hợp tốt với các selector khác, giúp bạn duy trì tính tương thích và tính linh hoạt trong mã nguồn của mình.</p>



<h4 id="3-de-bao-tri" class="wp-block-heading">3. <strong>Dễ Bảo Trì:</strong></h4>



<p>Khi cần thêm hoặc loại bỏ các selector, bạn chỉ cần thực hiện thay đổi ở một địa điểm duy nhất, giúp dễ bảo trì hơn.</p>



<h4 id="4-trinh-duyet-ho-tro" class="wp-block-heading">4. <strong>Trình duyệt hỗ trợ:</strong></h4>



<p><strong>:where()</strong></p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="327" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-1024x327.png" alt="" class="wp-image-2030" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-1024x327.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-300x96.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-768x245.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-380x121.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-800x255.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support-1160x370.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/where_support.png 1382w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>:is()</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="354" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-1024x354.png" alt="" class="wp-image-2031" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-1024x354.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-300x104.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-768x266.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-380x131.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-800x277.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support-1160x401.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/is_support.png 1368w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="iv-ket-luan" class="wp-block-heading">IV. <strong>Kết Luận</strong></h3>



<p>Sử dụng <code>:where()</code> và <code>:is()</code> trong CSS selector mang lại những lợi ích đáng kể về sự ngắn gọn và dễ đọc. Đặc biệt, chúng là một công cụ hữu ích khi bạn cần áp dụng kiểu cho nhiều phần tử cùng loại một cách linh hoạt. Hãy tích hợp chúng vào công cụ lập trình CSS của bạn để trải nghiệm sự tiện lợi mà chúng mang lại.</p>
<p>The post <a href="https://blog.tomosia.com.vn/su-dung-where-va-is-trong-css-selector-ngan-gon-va-manh-me/">Sử dụng :where() và :is() trong CSS Selector &#8211; Ngắn gọn và mạnh mẽ</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/su-dung-where-va-is-trong-css-selector-ngan-gon-va-manh-me/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Khám Phá CSS Parent Selector :has()</title>
		<link>https://blog.tomosia.com.vn/kham-pha-css-parent-selector-has/</link>
					<comments>https://blog.tomosia.com.vn/kham-pha-css-parent-selector-has/#comments</comments>
		
		<dc:creator><![CDATA[Dang Van Luan]]></dc:creator>
		<pubDate>Tue, 28 Nov 2023 06:07:36 +0000</pubDate>
				<category><![CDATA[Html/CSS]]></category>
		<category><![CDATA[css selector]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2036</guid>

					<description><![CDATA[<p>CSS, ngôn ngữ định dạng trang web mạnh mẽ, ngày càng được cải tiến với những tính năng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/kham-pha-css-parent-selector-has/">Khám Phá CSS Parent Selector :has()</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>CSS, ngôn ngữ định dạng trang web mạnh mẽ, ngày càng được cải tiến với những tính năng mới giúp lập trình viên tối ưu hóa mã CSS của mình. Một trong những thêm mới gần đây là pseudo-class <code>:has()</code>, mang lại khả năng lựa chọn các phần tử dựa trên nội dung của chúng. Trong bài viết này, chúng ta sẽ chi tiết tìm hiểu về cú pháp và ứng dụng của <code>:has()</code>.</p>



<h3 id="i-gioi-thieu-ve-has" class="wp-block-heading">I. <strong>Giới Thiệu về :has()</strong></h3>



<p><code>:has()</code> là một pseudo-class mới trong CSS, cho phép bạn chọn các phần tử cha dựa trên nội dung của các phần tử con bên trong chúng. Cú pháp cơ bản như sau:</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="parent:has(child) {
  /* CSS styles */ 
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">parent</span><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">has</span><span style="color: #F286C4">(child)</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #7B7F8B">/* CSS styles */</span><span style="color: #F6F6F4"> </span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Với <code>:has()</code>, bạn có thể áp dụng kiểu cho các phần tử cha chứa một hoặc nhiều phần tử con cụ thể, làm cho việc chọn lựa và định dạng trang web trở nên linh hoạt hơn.</p>



<h3 id="ii-su-dung-cu-phap-has" class="wp-block-heading">II. <strong>Sử Dụng Cú Pháp :has()</strong></h3>



<h4 id="1-chon-parent-co-phan-tu-con-cu-the" class="wp-block-heading">1. <strong>Chọn Parent Có Phần Tử Con Cụ Thể</strong></h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="div:has(p) {
  background-color: #f0f0f0;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">div</span><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">has</span><span style="color: #F286C4">(p)</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">background-color</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">#f0f0f0</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Trong trường hợp này, tất cả các <code>div</code> chứa ít nhất một phần tử <code>p</code> sẽ có nền màu xám nhạt.</p>



<h4 id="2-ket-hop-nhieu-phan-tu-con" class="wp-block-heading">2. <strong>Kết Hợp Nhiều Phần Tử Con</strong></h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="article:has(h2, p) {
  border: 1px solid #ccc;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">article</span><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">has</span><span style="color: #F286C4">(h2</span><span style="color: #F6F6F4">,</span><span style="color: #F286C4"> p)</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">border</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">1</span><span style="color: #F286C4">px</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">solid</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">#ccc</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Câu lệnh trên sẽ chọn tất cả các phần tử <code>article</code> chứa ít nhất một phần tử <code>h2</code> hoặc <code>p</code> và áp dụng đường viền xám nhạt.</p>



<h4 id="3-su-dung-nested-has" class="wp-block-heading">3. <strong>Sử Dụng Nested :has()</strong></h4>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">CSS</span><span role="button" tabindex="0" data-code="section:has(article:has(h2)) {
  margin: 10px;
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">section</span><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">has</span><span style="color: #F286C4">(article</span><span style="color: #F286C4; font-style: italic">:</span><span style="color: #62E884; font-style: italic">has</span><span style="color: #F286C4">(h2))</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #97E1F1">margin</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #BF9EEE">10</span><span style="color: #F286C4">px</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<p>Trong trường hợp này, <code>section</code> sẽ được chọn nếu nó chứa ít nhất một <code>article</code> có chứa ít nhất một phần tử <code>h2</code>.</p>



<h3 id="iii-uu-diem-va-han-che" class="wp-block-heading">III. <strong>Ưu Điểm và Hạn Chế</strong></h3>



<h4 id="1-uu-diem-cua-has" class="wp-block-heading">1. <strong>Ưu Điểm của :has()</strong></h4>



<ul class="wp-block-list">
<li><strong>Linh Hoạt:</strong> Cho phép bạn chọn các phần tử cha dựa trên nội dung của phần tử con, mang lại sự linh hoạt cao khi định dạng trang web.</li>



<li><strong>Dễ Đọc:</strong> Làm cho mã CSS trở nên rõ ràng hơn, giảm sự phức tạp của selector.</li>
</ul>



<h4 id="2-han-che-va-luu-y" class="wp-block-heading">2. <strong>Hạn Chế và Lưu ý</strong></h4>



<ul class="wp-block-list">
<li><strong>Hạn Chế Sự Linh Hoạt:</strong> Mặc dù mạnh mẽ, nhưng <code>:has()</code> có thể hạn chế sự linh hoạt khi so sánh với một số phương pháp khác như JavaScript.</li>



<li><strong>Hỗ Trợ Trình Duyệt:</strong> Hiện tại, <code>:has()</code> chưa được hỗ trợ rộng rãi, vì vậy hãy kiểm tra hỗ trợ trình duyệt trước khi sử dụng.</li>
</ul>



<h4 id="3-trinh-duyet-ho-tro" class="wp-block-heading">3. Trình duyệt hỗ trợ</h4>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="422" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-1024x422.png" alt="" class="wp-image-2038" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-1024x422.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-300x124.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-768x317.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-380x157.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-800x330.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot-1160x478.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/11/has_supprot.png 1370w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 id="iv-ket-luan" class="wp-block-heading">IV. <strong>Kết Luận</strong></h3>



<p>Pseudo-class <code>:has()</code> mang lại một cách tiếp cận mới và thú vị cho việc chọn các phần tử cha dựa trên nội dung của phần tử con trong CSS. Tuy nhiên, đối với sự hỗ trợ và linh hoạt, cân nhắc kết hợp <code>:has()</code> với các phương pháp khác để đảm bảo tính ổn định và tương thích trình duyệt. Hãy thử nghiệm và tận dụng sức mạnh của <code>:has()</code> để tối ưu hóa mã CSS của bạn.</p>
<p>The post <a href="https://blog.tomosia.com.vn/kham-pha-css-parent-selector-has/">Khám Phá CSS Parent Selector :has()</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/kham-pha-css-parent-selector-has/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Tối ưu cách viết CSS</title>
		<link>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/</link>
					<comments>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/#comments</comments>
		
		<dc:creator><![CDATA[Anh Le]]></dc:creator>
		<pubDate>Thu, 12 Oct 2023 01:53:39 +0000</pubDate>
				<category><![CDATA[Html/CSS]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1177</guid>

					<description><![CDATA[<p>CSS có thể làm cho một trang web HTML nhàm chán thành các trang web sinh động, nhưng&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/toi-uu-cach-viet-css/">Tối ưu cách viết CSS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>CSS có thể làm cho một trang web HTML nhàm chán thành các trang web sinh động, nhưng việc sử dụng CSS không đúng cách cũng có thể khiến trang web của bạn gặp vấn đề ngay trước cả khi trang web của bạn được render. Ngoài tối ưu thuật toán, xử lý ở phần controller, model hoặc cơ sở dữ liệu thì CSS cũng cần được tối ưu hóa để giúp trang web chạy nhanh hơn.<br>Chính vì vậy, bài viết này sẽ đưa tới cho bạn các tips để tối ưu hóa CSS một cách hiệu quả.</p>



<h5 id="basic" class="wp-block-heading"><strong>Basic</strong></h5>



<p>CSS không phải nguyên nhân trực tiếp gây ra vấn đề khi load trang web, nhưng bạn vẫn nên tối ưu những phần nặng của dữ liệu mà CSS có thể chứa như: Xử dung CDN, xoá các tệp không xử dụng đến, thay đổi kích thước hình ảnh, xử dụng thumbnail, giảm thiểu số file css nếu có thể,&#8230;</p>



<p>Tuân thủ một số quy tắc trong style coding conventions cũng là một điều nên nhớ, dưới đây là một số quy tắc bạn có thể tham khảo:</p>



<ul class="wp-block-list">
<li>Lùi vào 2 space (khoảng trống) cho mỗi thuộc tính</li>



<li>Sử dụng ngoặc kép thay vì sử dụng ngoặc đơn (font-family: &#8220;Arial Black&#8221;, input[type=&#8221;checkbox&#8221;])</li>



<li>Đặt một dấu cách ở đằng sau dấu :</li>



<li>Đặt một dấu cách ở trước dấu {</li>



<li>Kết thúc định nghĩa các thuộc tính bằng một dấu chấm phẩy (mặc dù việc thêm dấu chấm phẩy là không bắt buộc nhé)</li>



<li>Sử dụng các cú pháp ngắn gọn nếu có thể ví dụ như (padding, margin&#8230;)</li>



<li>Chỉ khai báo mỗi dòng một thuộc tính (dễ nhìn, nếu lỗi có thể biết lỗi được ở dòng nào thuộc tính nào)</li>



<li>Code thêm những thuộc tính khác mà trình duyệt này hỗ trợ mà trình duyệt khác không hỗ trợ</li>



<li>Giữa các khối CSS nên có một khoảng trắng</li>



<li>Khuyến khích sử dụng mã màu (#fff)</li>



<li>&#8230;</li>
</ul>



<h5 id="css-pre-processors" class="wp-block-heading"><strong>CSS Pre-Processors</strong></h5>



<p>CSS Pre-Processors là một ngôn ngữ tiền xử lý CSS, các bạn có thể hiểu nó là một kiểu viết mở rộng, nâng cấp hơn so với CSS. Mục đích của CSS Pre-Processors được sinh ra nhằm mục đích đưa các đoạn code CSS trở nên giống hơn một ngôn ngữ lập trình, và cách viết này sẽ biên dịch lại thành các đoạn code CSS bình thường.</p>



<p>Để áp dụng các CSS Pre-Processors vào dự án của bạn thì có vài công cụ nổi tiếng giúp các bạn áp dụng vào dự án như: SCSS, SASS, LESS, Stylus&#8230; Trong bài này mình sẽ giới thiệu về SCSS/SASS.</p>



<p>Tất nhiên là phải có những lợi ích nhất định của CSS Pre-Processors thì nó mới được áp dụng vào các dự án như:</p>



<ul class="wp-block-list">
<li>Cải thiện thời gian viết CSS</li>



<li>Linh hoạt hơn và có khả năng sử dụng lại code</li>



<li>Dễ dàng bảo trì cũng như là phát triển</li>



<li>Cấu trúc viết code rõ ràng, dễ nhìn hơn rất nhiền</li>



<li>Hạn chế được những đoạn code trùng lặp, file code nhỏ gọn.</li>
</ul>



<h6 id="sass" class="wp-block-heading"><strong>SASS</strong></h6>



<p>SASS là viết tắt của Syntactically Awesome StyleSheets là một CSS Pre-Processors nổi tiếng được biết đến trong giới Front-end Developer. SASS được sinh ra bởi lập trình viên Ruby, nếu như bạn đã làm việc với Ruby thì ắt hẳn sẽ biết tới các template phổ biến như HAML hay SLIM.</p>



<p>Tại sao mà mình lại nhắc đến Ruby, nó liên quan gì đến CSS thì mình xin giải thích đó chính là đến từ cú pháp. Ví dụ như khi viết SLIM các bạn sẽ không cần các dấu đóng thẻ, hay dấu chấm phẩy, hay nhận biết các thẻ con bằng cách lùi dòng vào&#8230; Điều này chính là những kiểu viết của SASS.</p>



<p>Ví dụ như thế này</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".nav

  width: 100%

  height: 100%

  float: right

  p

    color: #e1e1e1

    font-size: 14px;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.nav</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  height: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: right</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  p</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    color: #e1e1e1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span></code></pre></div>



<h6 id="scss" class="wp-block-heading"><strong>SCSS</strong></h6>



<p>Một phần không nhỏ developer không thích cách viết của SASS lắm vì nó mang lại cảm giác đọc hơi rối cả khó hiểu, có lẽ chính vì thế nên đã có sự nâng cấp tuyệt vời đến từ SCSS.</p>



<p>SCSS hay còn gọi là Sassy CSS, có cú pháp giống với CSS hơn là SASS giúp chúng ta tiếp cận dễ hơn rất nhiều. Hiểu đơn giản thì SCSS là một phiên bản nâng cấp của SASS.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".nav {

  width: 100%;

  height: 100%;

  float: right;

  p {

    color: #e1e1e1

    font-size: 14px;

  }

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  height: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: right;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  p {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    color: #e1e1e1</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<h6 id="su-khac-biet-co-ban-cua-scss-va-sass" class="wp-block-heading"><strong>Sự khác biệt cơ bản của SCSS và SASS</strong></h6>



<p>Qua 2 phần giới thiệu ở trên thì phần nào các bạn cũng đã hiểu hiểu SCSS và SASS là gì và cách viết như thế nào. Ở phần này mình xin tóm tắt lại chút sự khác biệt để các bạn có cái nhìn tổng quát hơn.</p>



<p>SASS:</p>



<ul class="wp-block-list">
<li>Cú pháp ngắn gọn hơn</li>



<li>Sử dụng indent để thể hiện quy tắc xếp chồng (nested rules)</li>



<li>Khi kết thúc một property thì không cần dấu ; để kết thúc</li>



<li>Khai báo mixins bằng ký tự =</li>



<li>Sử dụng mixins bằng ký tự +</li>
</ul>



<p>SCSS</p>



<ul class="wp-block-list">
<li>Cú pháp gần với CSS hơn</li>



<li>Sử dụng cặp dấu {} để thể hiện quy tắc xếp chồng</li>



<li>Kết thúc 1 khai báo property CSS bằng dấu ;</li>



<li>Khai báo mixins bằng cú pháp @mixins ten-mixins</li>



<li>Sử dụng mixins bằng cú pháp @include ten-mixins</li>
</ul>



<h6 id="su-dung-variables" class="wp-block-heading"><strong>Sử dụng variables</strong></h6>



<p>Bây giờ mình bắt đầu giới thiệu những thứ hay ho để giúp bạn viết CSS chuyên nghiệp hơn, hay ho hơn.</p>



<p>Để bắt đầu thì mình xin giới thiệu về variables. Đến CSS mà còn có cả variables (biến) thì cũng hơi bị thú vị rồi đấy.</p>



<p>Giả sử như dự án của bạn dùng đến cả trăm chỗ có thể sử dụng cùng một giá trị màu chả hạn, đối với các mã màu đơn giản thì các bạn nhớ được thôi chứ ví dụ có những mà màu rắc rối giả sử như DEFQ13 chả hạn, thì nhớ làm sao được, nhà còn bao việc 😄</p>



<p>Để tối ưu hơn trong việc này chúng ta sẽ đặt cái mã màu này trong một biến, giúp chúng ta thuận tiện sử dụng hơn nhiều.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="$text-grey: #e1e1e1;

/* Sử dụng */

p {

  color: $text-grey;

}

div.container a {

  color: $text-grey;

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">$text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey: #e1e1e1;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/* Sử dụng */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">p {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  color: $text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div.container a {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  color: $text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">grey;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>&#8230;</p>



<p>Viết đơn giản không phải cầu kì.</p>



<h6 id="mixins" class="wp-block-heading"><strong>Mixins</strong></h6>



<p>Mình từng nói ở trên là CSS Pre-Processors giúp chúng ta có thể tái sử dụng code. Mixins chính là cách để giúp chúng ta có thể làm được việc này một cách đơn giản.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="@mixin bordered {

  border: 1px solid #ddd;
  
  &amp;:hover {
  
  border-color: #999;
  
  }

}

/*Sử dụng chỉ cần include mixins đã khai báo*/

div {

    @include bordered;

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">@</span><span style="color: #50FA7B; font-style: italic">mixin</span><span style="color: #F8F8F2"> bordered {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  border: 1px solid #ddd;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">&amp;</span><span style="color: #F8F8F2">:hover {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  border</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #</span><span style="color: #BD93F9">999</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/*Sử dụng chỉ cần include mixins đã khai báo*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    @</span><span style="color: #50FA7B; font-style: italic">include</span><span style="color: #F8F8F2"> bordered;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Thậm chí chúng ta có thể truyền cả tham số vào mixins.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="@mixin bordered($width) {

  border: $width solid #ddd;
  
  &amp;:hover {
  
    border-color: #999;
    
  }
  
}

/*Sử dụng chỉ cần include mixins đã khai báo*/

div {
  @include bordered(1px);
}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">@</span><span style="color: #50FA7B; font-style: italic">mixin</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">bordered</span><span style="color: #F8F8F2">($width) {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  border: $width solid #ddd;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">&amp;</span><span style="color: #F8F8F2">:hover {</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    border</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #</span><span style="color: #BD93F9">999</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/*Sử dụng chỉ cần include mixins đã khai báo*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">div {</span></span>
<span class="line"><span style="color: #F8F8F2">  @</span><span style="color: #50FA7B; font-style: italic">include</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B">bordered</span><span style="color: #F8F8F2">(1px);</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<h6 id="nested" class="wp-block-heading"><strong>Nested</strong></h6>



<p>Khi mà mới học lập trình HTML, CSS thì mình đã từng thế này, và mình nghĩ cũng nhiều bạn đã từng như mình.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;div class=&quot;container&quot;&gt;

    &lt;ul class=&quot;nav&quot;&gt;

        &lt;li class=&quot;item&quot;&gt;

            &lt;a class=&quot;item-children&quot;&gt;Hello&lt;/a&gt;

        &lt;/li&gt;

    &lt;/ul&gt;

&lt;/div&gt;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">div</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">container</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">ul</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">nav</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        &lt;</span><span style="color: #FF79C6">li</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">item</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            &lt;</span><span style="color: #FF79C6">a</span><span style="color: #F8F8F2"> </span><span style="color: #50FA7B; font-style: italic">class</span><span style="color: #FF79C6">=</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">item-children</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">&gt;Hello&lt;/</span><span style="color: #FF79C6">a</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        &lt;/</span><span style="color: #FF79C6">li</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    &lt;/</span><span style="color: #FF79C6">ul</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">div</span><span style="color: #F8F8F2">&gt;</span></span></code></pre></div>



<p>Xong khi viết CSS sẽ dạng dạng như thế này.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".container {

  width: 100%;

}

.container .nav {

  font-size: 14px;

}

.container .nav .item {

  float: left;

}

.container .nav .item .children {

  texx-decoration: none

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.container {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav .item {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  float: left;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.container .nav .item .children {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  texx</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">decoration: none</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Nhìn đoạn code trên có khiếp không, lặp đi lặp lại các selector, đó là chỉ với trường hợp mình có 4 item con con bên trong. Chả lẽ giờ có đến chục item con con bên trong các bạn cũng viết kiểu như thế này thì rõ ràng là không hề ổn chút nào. Lúc người khác đọc lại code phải dò dò xem đâu là cha của nó các kiểu con đà điểu thì sẽ rất mất thời gian.</p>



<p>Nếu như ai còn đang viết kiểu như thế mình khuyên nên bỏ đi và áp dụng ngay kiểu nested rules như sau đây.</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=".container {

    width: 100%;

    .nav {

        font-size: 14px;

        .item {

            float: left;

            .children {

                text-decoration: none;

            }

        }

    }

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">.container {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    .nav {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 14px;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        .item {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            float: left;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            .children {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">                text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">decoration: none;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">            }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Nhìn trông code có phải gọn gàng, dễ quản lí và chuyên nghiệp hơn chút rồi đấy. Hãy áp dụng nhé các bạn.</p>



<p>Ngoài ra còn rất nhiều các tính năng khác mà các bạn có thể lên trang chủ của nó tìm đọc nếu muốn.</p>



<h5 id="ki-thuat-oocss" class="wp-block-heading"><strong>Kĩ thuật OOCSS</strong></h5>



<p>OOCSS là viết tắt của Object-Oriented CSS, hướng đối tượng trong CSS. Cụ thể mà tính chất hướng đối tượng này đó là tính kế thừa.</p>



<p>Kĩ thuật này được sinh ra nhằm hạn chế việc trùng lặp code.</p>



<p>Khai báo class bổ trợ.</p>



<p>Nếu bạn nào đã sử dụng Bootstrap thì đây chính là kinh nghiệm khá hay mà chúng ta có thể học hỏi từ Bootstrap.</p>



<p>Viết cs ngắn gọn</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;!DOCTYPE html&gt;

&lt;html&gt;

  &lt;head&gt;
  
    &lt;style&gt;
    
    body {
      /* Thay vì viết từng thuộc tính */
    
      font-style: italic;
    
      font-weight: bold;
    
      font-size: .8em;
    
      line-height: 1.2;
    
      font-family: Arial, sans-serif;
    
      background-image: url(&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU&quot;);
  
      background-repeat: no-repeat;
  
      background-position: center center;
  
      background-attachment: fixed;
    
      background-color: #fff;
      /* thì chúng ta có thể viết gọn lại như sau */
  
      font: italic bold .8em/1.2 Arial, sans-serif;
    
      background: #fff url(&quot;https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU&quot;) no-repeat fixed center center;
    
    }
    
    h1 {
    
      color: green;
    
      text-align: center;
    
    }
    
    p {
    
      font-family: verdana;
    
      font-size: 20px;
    
      position: fixed;
    
      bottom: 0;
    
      text-align: center;
    
      width: 100%;
    
    }
    
    &lt;/style&gt;
  
  &lt;/head&gt;

  &lt;body&gt;
  
    &lt;h1&gt;Welcome to&lt;/h1&gt;
    
    &lt;p&gt;All Rights Reserved&lt;/p&gt;
  
  &lt;/body&gt;

&lt;/html&gt;" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">&lt;!</span><span style="color: #F8F8F2">DOCTYPE html</span><span style="color: #FF79C6">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;</span><span style="color: #FF79C6">html</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  &lt;</span><span style="color: #FF79C6">head</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">style</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    body </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4">/* Thay vì viết từng thuộc tính */</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">style: italic;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">weight: bold;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: .8em;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      line</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">height: </span><span style="color: #BD93F9">1.2</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">family: Arial, sans</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">serif;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">image: </span><span style="color: #50FA7B">url</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">);</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat: no</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">position: center center;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">attachment: fixed;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">color: #fff;</span></span>
<span class="line"><span style="color: #F8F8F2">      </span><span style="color: #6272A4">/* thì chúng ta có thể viết gọn lại như sau */</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">      font: italic bold .8em</span><span style="color: #FF79C6">/</span><span style="color: #BD93F9">1.2</span><span style="color: #F8F8F2"> Arial, sans</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">serif;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      background: #fff </span><span style="color: #50FA7B">url</span><span style="color: #F8F8F2">(</span><span style="color: #E9F284">&quot;</span><span style="color: #F1FA8C">https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSjnIfv9UzLhhQwAG_0mxil1Z5KyQT7xROTYA&amp;usqp=CAU</span><span style="color: #E9F284">&quot;</span><span style="color: #F8F8F2">) no</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">repeat fixed center center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    h1 </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      color: green;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">align: center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    p </span><span style="color: #FF79C6">{</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">family: verdana;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      font</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">size: 20px;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      position: fixed;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      bottom: </span><span style="color: #BD93F9">0</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      text</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">align: center;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">      width: </span><span style="color: #BD93F9">100</span><span style="color: #FF79C6">%</span><span style="color: #F8F8F2">;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    </span><span style="color: #FF79C6">}</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;/</span><span style="color: #FF79C6">style</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  &lt;/</span><span style="color: #FF79C6">head</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  &lt;</span><span style="color: #FF79C6">body</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">h1</span><span style="color: #F8F8F2">&gt;Welcome to&lt;/</span><span style="color: #FF79C6">h1</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">    </span></span>
<span class="line"><span style="color: #F8F8F2">    &lt;</span><span style="color: #FF79C6">p</span><span style="color: #F8F8F2">&gt;All Rights Reserved&lt;/</span><span style="color: #FF79C6">p</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"><span style="color: #F8F8F2">  </span></span>
<span class="line"><span style="color: #F8F8F2">  &lt;/</span><span style="color: #FF79C6">body</span><span style="color: #F8F8F2">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">&lt;/</span><span style="color: #FF79C6">html</span><span style="color: #F8F8F2">&gt;</span></span></code></pre></div>



<p>Lưu ý &amp; suy ngẫm</p>



<p>Một selector với trọng số lớn liệu có tốt không?</p>



<p> Ví dụ:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* Trọng số là 2,3,4 */

#main article.sports table#stats tr:nth-child(even) td:last-child {

  ...

}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">/* Trọng số là 2,3,4 */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">#main article.sports table#stats tr:nth</span><span style="color: #FF79C6">-</span><span style="color: #50FA7B">child</span><span style="color: #F8F8F2">(even) td:last</span><span style="color: #FF79C6">-</span><span style="color: #F8F8F2">child {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #FF79C6">...</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">}</span></span></code></pre></div>



<p>Với trọng số là 2,3,4, bạn sẽ rất khó để override nó, và sẽ làm cho code của bạn rối rắm và khó để maintain hay extend.</p>



<p>Bất kì khi nào bạn rơi vào tình huống không hiểu vì sao element của mình lại có style không như mong muốn, thì Specificity sẽ giúp bạn. Tuy nhiên thay vì ngồi đếm trọng số bằng tay, giờ đây với công cụ devtools mạnh mẽ của các browser thì việc xác định lỗi style là vô cùng đơn giản. Tuy nhiên các công cụ này cũng xây dựng trên nguyên lý CSS Specificity mà thôi chứ không có gì khác biệt đâu. Bạn có thể tham khảo hình ảnh bên dưới để hiểu hơn về cách đánh trọng số.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="791" height="1024" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-791x1024.png" alt="" class="wp-image-1235" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-791x1024.png 791w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-232x300.png 232w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-768x994.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-1187x1536.png 1187w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-380x492.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-800x1035.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1-1160x1501.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/specifishity-1.png 1275w" sizes="auto, (max-width: 791px) 100vw, 791px" /></figure>



<p>Specificity chỉ có ý nghĩa nếu một element có nhiều selector cùng trỏ (target) đến nó. Nói nôm na là nếu cuộc chiến mà chỉ có 1 người tham gia thì hiển nhiên người đó thắng rồi.</p>



<p>Trong CSS có việc kế thừa style từ các element cha. Tuy nhiên việc kế thừa này sẽ luôn xếp sau những selector trỏ (target) đích danh đến element nhé. Bạn để ý khi sử dụng devtools là thấy thôi.</p>



<p>Việc có nên sử dụng inline styles không vẫn là một vấn đề gây tranh cãi. Một số linter sẽ warning nếu bạn viết inline styles, nhưng bạn vẫn có thể tắt warning đó đi nếu muốn. Một trong những lý do là vì trọng số của nó quá cao sẽ dễ gây ra các lỗi không mong muốn, hoặc sẽ rất khó để override và buộc phải dùng đến !important. Một lý do khác nữa là với nhiều “chuyên gia” thì CSS nên đặt trong các file .css để dễ quản lý, chứ nếu nằm trong style (html) thì rối loạn lên hết?</p>



<p>Mặc dù trùm cuối !important vô cùng mạnh mẽ, việc dùng đến !important không phải là một giải pháp tốt và cần hạn chế sử dụng, giống như inline styles mà mình vừa đề cập đến. Trước khi buộc phải dùng đến !important, bạn hãy suy xét cẩn thận xem chúng ta có thể sử dụng CSS Specificity để đạt được mục đích hay không.</p>



<h5 id="bem" class="wp-block-heading">BEM</h5>



<p>Đây là một kĩ thuật để đặt tên cho class trong HTML/CSS. Cách đặt tên class với BEM sẽ làm code của chúng ta nhìn rất chuyên nghiệp và có logic hơn rất nhiều.</p>



<p>Việc áp dụng kĩ thuật này vào trong project sẽ giúp chúng ta dễ dàng maintain và phát triển, dễ dàng hơn với những người vào dự án sau này khi đọc lại code.</p>



<p>BEM là viết tắt của Block, Element và Modifier. Nguyên tắc để đặt tên class sẽ dựa trên 3 thành phần kia để chúng ta đặt tên class cho chuẩn chỉ.</p>



<p>Block: Một khối độc lập mang ý nghĩa riêng, mô tả rõ mục đích của nó. (header, container, menu&#8230;). Block sẽ chứa những định dạng chung để có thể tái sử dụng.</p>



<p>Element: Là một phần thuộc một khối và thực hiện một chức năng cụ thể, element này sẽ phụ thuộc vào block để đặt tên sao cho phải.</p>



<p>Modifier: Modifier sẽ dùng để thao tác nếu muốn thay đổi cách hiển thị của block hoặc element.</p>



<p>Ở đây mình không phải muốn giải thích hay giới thiệu chi tiết về 2 “phương pháp” này, mà chỉ muốn chỉ ra một vài điểm liên quan với Specificity thôi. Ngoài BEM và ITCSS ra còn có nhiều phương pháp khác nữa, nhưng cơ bản đều xây dựng trên Specificity cả.</p>



<p>BEM: mình mặc định bạn đã biết đến BEM, thì một vài tôn chỉ của nó có thể kể đến như:</p>



<p>Tránh sử dụng id (#foo): lý do thì như mình đã chia sẻ, id có trọng số lớn và khá khó để override, nên việc cố gắng override nó sẽ dễ đẩy CSS của bạn đến một tương lai không mấy sáng sủa.</p>



<p>Tránh nested selector, cố gắng làm phẳng selector: cũng cùng lý do, nested selector cũng làm tăng trọng số của selector. </p>



<p>Ví dụ BEM sẽ khuyến khích:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* BEM thích điều này, trọng số chỉ là 0,1,0 nhưng vẫn rất specific

và khó bị conflict */



.block {}

.block__elem1 {}

.block__elem2 {}

.block__elem3 {}

/* Trọng số sẽ là 0,2,0, cũng không quá tệ, nhưng BEM không khuyến khích

và nó cũng rất dễ bị conflict. */

.block {}

.block .elem1 {}

.block .elem2 {}

.block .elem3 {}" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #6272A4">/* BEM thích điều này, trọng số chỉ là 0,1,0 nhưng vẫn rất specific</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">và khó bị conflict */</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem1 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem2 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block__elem3 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">/* Trọng số sẽ là 0,2,0, cũng không quá tệ, nhưng BEM không khuyến khích</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6272A4">và nó cũng rất dễ bị conflict. */</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem1 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem2 {}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F8F8F2">.block .elem3 {}</span></span></code></pre></div>



<h5 id="tong-ket" class="wp-block-heading"><strong>Tổng kết</strong></h5>



<p>Trên đây là một số kiến thức nhỏ mình đã tìm hiểu được, hi vọng nó sẽ giúp ích cho bạn trong dự án.</p>
<p>The post <a href="https://blog.tomosia.com.vn/toi-uu-cach-viet-css/">Tối ưu cách viết CSS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/toi-uu-cach-viet-css/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
