<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: A Vòong Hair Salon</title>
    <description>The latest articles on DEV Community by A Vòong Hair Salon (@avoonghairsalon).</description>
    <link>https://dev.to/avoonghairsalon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1165003%2Fe02b3940-e6c2-4862-8d1a-a69515d98a5e.jpg</url>
      <title>DEV Community: A Vòong Hair Salon</title>
      <link>https://dev.to/avoonghairsalon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/avoonghairsalon"/>
    <language>en</language>
    <item>
      <title>Ảnh mẫu tóc trên mobile: giữ trọn phom tóc với srcset và sizes</title>
      <dc:creator>A Vòong Hair Salon</dc:creator>
      <pubDate>Mon, 09 Nov 2026 08:56:37 +0000</pubDate>
      <link>https://dev.to/avoonghairsalon/anh-mau-toc-tren-mobile-giu-tron-phom-toc-voi-srcset-va-sizes-5b85</link>
      <guid>https://dev.to/avoonghairsalon/anh-mau-toc-tren-mobile-giu-tron-phom-toc-voi-srcset-va-sizes-5b85</guid>
      <description>&lt;p&gt;Một ảnh mẫu tóc có thể nhìn ổn trên máy tính nhưng mất phần đuôi khi được đặt vào thẻ ảnh trên điện thoại. Với album của một salon như &lt;a href="https://avoonghairsalon.com/" rel="noopener noreferrer"&gt;A Vòong Hair Salon&lt;/a&gt;, tôi tách bài toán thành hai phần: &lt;strong&gt;giữ đúng bố cục&lt;/strong&gt; và &lt;strong&gt;chọn tệp vừa kích thước hiển thị&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Dùng cùng một bố cục cho các bản ảnh
&lt;/h2&gt;

&lt;p&gt;Ví dụ, xuất cùng một ảnh tỷ lệ 4:5 ở các chiều rộng 360, 720 và 1080 px. Hãy kiểm tra ảnh gốc còn đủ đỉnh đầu và phần ngọn tóc. Nếu cắt lại từng bản với một bố cục khác, ảnh có thể đổi vị trí khi trình duyệt chọn tệp khác.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;figure&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hair-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
    &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"toc-layer-720.webp"&lt;/span&gt;
    &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"
      toc-layer-360.webp 360w,
      toc-layer-720.webp 720w,
      toc-layer-1080.webp 1080w
    "&lt;/span&gt;
    &lt;span class="na"&gt;sizes=&lt;/span&gt;&lt;span class="s"&gt;"(min-width: 452px) 420px, calc(100vw - 32px)"&lt;/span&gt;
    &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"720"&lt;/span&gt;
    &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"900"&lt;/span&gt;
    &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Tóc layer dài, các tầng chuyển nhẹ và phần đuôi còn đầy"&lt;/span&gt;
    &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt;
    &lt;span class="na"&gt;decoding=&lt;/span&gt;&lt;span class="s"&gt;"async"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;figcaption&amp;gt;&lt;/span&gt;Mẫu layer dài, nhìn từ phía sau.&lt;span class="nt"&gt;&amp;lt;/figcaption&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/figure&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="nc"&gt;.hair-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;420px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100vw&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.hair-card&lt;/span&gt; &lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mỗi giá trị &lt;code&gt;w&lt;/code&gt; trong &lt;code&gt;srcset&lt;/code&gt; phải khớp chiều rộng thật của tệp. &lt;code&gt;sizes&lt;/code&gt; mô tả chiều rộng hiển thị trong bố cục này. Nếu đưa thẻ vào một cột hẹp hơn, cập nhật &lt;code&gt;sizes&lt;/code&gt; cho sát chiều rộng thực tế. Dùng &lt;code&gt;loading="lazy"&lt;/code&gt; cho ảnh nằm dưới vùng nhìn đầu tiên. Với ảnh chính xuất hiện ngay khi tải trang, bỏ thuộc tính này.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Kiểm tra bằng DevTools
&lt;/h2&gt;

&lt;p&gt;Mở Device Toolbar, thử chiều rộng 360 và 390 px, rồi chạy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;photo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.hair-card img&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;displayedWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBoundingClientRect&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;chosenFile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;photo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentSrc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;devicePixelRatio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;devicePixelRatio&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dùng Network để kiểm tra tệp thực sự tải và dung lượng của nó. Khi thử từng cấu hình, tải lại trang với bộ nhớ đệm tắt để tránh nhầm ảnh đã có sẵn với lựa chọn mới. Cuối cùng, nhìn lại đỉnh đầu và phần đuôi trên cả hai kích thước. Nếu ảnh bị cắt, chỉnh bố cục ảnh gốc trước khi tăng độ phân giải.&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>responsive</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
