<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/feed-premium.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" xmlns:media="http://search.yahoo.com/mrss/" xmlns:podcast="https://podcastindex.org/namespace/1.0" version="2.0">
  <channel>
    <feedpress:locale>en</feedpress:locale>
    <atom:link rel="hub" href="https://feedpress.superfeedr.com/"/>
    <title>CSS Weekly</title>
    <link>https://css-weekly.com</link>
    <description>CSS Weekly - Articles, Videos, Issues, and Quick Tips about CSS and frontend development</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 21 Apr 2026 06:00:45 GMT</lastBuildDate>
    <atom:link href="https://feedpress.me/cssweekly" rel="self" type="application/rss+xml"/>
    <item>
      <title>Use CSS Weekly Archives To Find the Best CSS Content &amp; Tools</title>
      <link>https://feedpress.me/link/24028/17322124/use-css-weekly-archives-to-find-the-best-css-content-tools</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/use-css-weekly-archives-to-find-the-best-css-content-tools</guid>
      <description>Discover how to quickly find high‑quality CSS articles, tutorials, and frontend tools using the CSS Weekly Archives.</description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/use-css-weekly-archives-to-find-the-best-css-content-tools/images/use-css-weekly-archives-to-find-the-best-css-content-tools.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Discover how to quickly find high‑quality CSS articles, tutorials, and frontend tools using the CSS Weekly Archives.</p><div><div><iframe src="https://www.youtube.com/embed/NEDhCrx-9Bc" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=NEDhCrx-9Bc" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Discover how to quickly find high‑quality CSS articles, tutorials, and frontend tools using the CSS Weekly Archives.</p><h2> Chapters</h2><p>00:00 How search works in CSS Weekly Archives<br>01:22 How to search through the whole CSS Weekly archives<br>02:04 Why you should use CSS Weekly Archives to find top CSS content</p><img src="https://feedpress.me/link/24028/17322124.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Frontend News #22: x86 CPU in CSS, pointer-box-offset Property</title>
      <link>https://feedpress.me/link/24028/17317255/frontend-news-22-x86-cpu-in-css-pointer-box-offset-property-detecting-at-rule-support</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/frontend-news-22-x86-cpu-in-css-pointer-box-offset-property-detecting-at-rule-support</guid>
      <description>Find out how to detect at-rule support in CSS, how the pointer-box-offset property works, and more.</description>
      <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/frontend-news-22-x86-cpu-in-css-pointer-box-offset-property-detecting-at-rule-support/images/frontend-news-22-x86-cpu-in-css-pointer-box-offset-property-detecting-at-rule-support.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Find out how to detect at-rule support in CSS, how the pointer-box-offset property works, and more.</p><div><div><iframe src="https://www.youtube.com/embed/Lp3VNE7XGB8" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=Lp3VNE7XGB8" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Find out how to detect at-rule support in CSS, how the pointer-box-offset property works, what the different and creative ways are to select the HTML element, how it’s possible to recreate the x86 CPU architecture in CSS, and more.</p><p><strong><a href="https://cssw.io/debugbear-fix-perf-issues"> Identify and fix your web performance issues with DebugBear</a></strong></p><h2> Chapters</h2><p>00:00 About this episode<br>00:25 <a href="https://www.bram.us/2026/03/15/at-rule/">Detect at-rule support in CSS</a><br>01:54 <a href="https://cssw.io/debugbear-fix-perf-issues">Fix your web performance issues with DebugBear</a><br>02:29 <a href="https://robinrendle.com/notes/pointer-box-offset/">pointer-box-offset</a><br>03:35 <a href="https://github.com/w3c/csswg-drafts/issues/4708">Increase pointer target size on GitHub</a><br>03:58 <a href="https://css-tricks.com/the-different-ways-to-select-html-in-css/">The Different Ways to Select HTML in CSS</a><br>06:04 <a href="https://github.com/tw93/Mole">Mole</a><br>07:36 <a href="https://lyra.horse/x86css/">x86 CPU made in CSS</a></p><img src="https://feedpress.me/link/24028/17317255.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Claude Code's Source Code Leaked! (Let’s Have Fun With It!)</title>
      <link>https://feedpress.me/link/24028/17312153/claude-codes-source-code-leaked-lets-have-fun-with-it</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/claude-codes-source-code-leaked-lets-have-fun-with-it</guid>
      <description>Claude Code's source code has just been leaked via a map file in their npm registry.</description>
      <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/claude-codes-source-code-leaked-lets-have-fun-with-it/images/claude-codes-source-code-leaked-lets-have-fun-with-it.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Claude Code's source code has just been leaked via a map file in their npm registry.</p><div><div><iframe src="https://www.youtube.com/embed/dDNH-3D8fQ8" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=dDNH-3D8fQ8" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Claude Code's source code has just been leaked via a map file in their npm registry.</p><p>This might be very bad for them, but for us, it's a fantastic chance to have fun and potentially build something really cool. 😎</p><p><em>PS. Don't take this too seriously.</em></p><img src="https://feedpress.me/link/24028/17312153.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #638</title>
      <link>https://feedpress.me/link/24028/17305538/issue-638</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-638</guid>
      <description>Learn how corner-shape property works, what’s possible with customizable select, how to create a folding corner effect with CSS, and more.</description>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-638/images/cssweekly-issue638-css-art-cat-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn how corner-shape property works, what’s possible with customizable select, how to create a folding corner effect with CSS, and more.</p><h2>Headlines</h2><p><a href="https://www.smashingmagazine.com/2026/03/beyond-border-radius-css-corner-shape-property-ui/ ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/beyond-border-radius-css-corner-shape-property-ui.jpg" alt="Beyond border-radius: What The CSS corner-shape Property Unlocks For Everyday UI"></a></p><h3><a href="https://www.smashingmagazine.com/2026/03/beyond-border-radius-css-corner-shape-property-ui/ ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Beyond border-radius: What The CSS corner-shape Property Unlocks For Everyday UI</a></h3><p>Brecht De Ruyte showcases how the new <code>corner-shape</code> property opens the door to beveled, scooped, and squircle corners.</p><p><a href="https://www.smashingmagazine.com/2026/03/beyond-border-radius-css-corner-shape-property-ui/ ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://css-tricks.com/abusing-customizable-selects/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/customizable-selects.jpg" alt="Stunning Customizable Selects"></a></p><h3><a href="https://css-tricks.com/abusing-customizable-selects/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Stunning Customizable Selects</a></h3><p>Patrick Brosset goes over a few demos demonstrating what’s possible with the new customizable <code>&#x3C;select></code> feature.</p><p><a href="https://css-tricks.com/abusing-customizable-selects/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/autonoma-find-your-first-bug3.jpg" alt="One CSS change broke checkout. Nobody noticed until users did."></a></p><h3><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">One CSS change broke checkout. Nobody noticed until users did.</a></h3><p>You rename a class, push to prod, and something breaks silently three pages away. Sound familiar? Autonoma spawns AI agents that test every user flow like a real person, catching overlapping buttons, broken interactions, and visual regressions before your users do.</p><p><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/ZlsFs6k4loc?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/frontend-news-21-multi-column-layouts-heading-pseudo-class-scaling-elements.jpg" alt="Frontend News #21: Multi-Column Layouts, :heading Pseudo-Class"></a></p><h3><a href="https://youtu.be/ZlsFs6k4loc?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Frontend News #21: Multi-Column Layouts, :heading Pseudo-Class</a></h3><p>Find out how to create multi-column layouts using CSS, how the new <code>:heading</code> pseudo-class works, how to scale content with layout, and more.</p><p><a href="https://youtu.be/ZlsFs6k4loc?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://kittygiraudel.com/2026/03/05/folded-corner-with-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Folded Corner with CSS</a></h3><p>Kitty Giraudel gives a nice walkthrough of creating a folding corner effect with CSS.</p><p><a href="https://kittygiraudel.com/2026/03/05/folded-corner-with-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://una.im/contrast-color?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Automated accessible text with contrast-color()</a></h3><p>Una Kravets shows how <code>contrast-color()</code> enables the browser to pick the most readable text color for any background.</p><p><a href="https://una.im/contrast-color?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.bram.us/2026/03/19/more-easy-light-dark-mode-switching-light-dark-is-about-to-support-images/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">More Easy Light-Dark Mode Switching: light-dark() is about to support images!</a></h3><p>Bramus Van Damme shares the news that <code>light-dark()</code> is being extended to support images.</p><p><a href="https://www.bram.us/2026/03/19/more-easy-light-dark-mode-switching-light-dark-is-about-to-support-images/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.smashingmagazine.com/2026/03/dropdowns-scrollable-containers-why-break-how-fix/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Dropdowns Inside Scrollable Containers: Why They Break And How To Fix Them Properly</a></h3><p>Godstime Aburu offers practical solutions to fix problems with dropdowns in scrollable panels.</p><p><a href="https://www.smashingmagazine.com/2026/03/dropdowns-scrollable-containers-why-break-how-fix/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/two-circles-one-arrow-and-anchor-positioning/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Two Circles, One Arrow, and Anchor Positioning</a></h3><p>Temani Afif explores a less common use case of Anchor Positioning.</p><p><a href="https://frontendmasters.com/blog/two-circles-one-arrow-and-anchor-positioning/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/debugbear-optimize-page-speed-and-core-web-vitals.png" alt="Optimize page speed and Core Web Vitals"></a></p><h3><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Optimize page speed and Core Web Vitals</a></h3><p>Wondering why your website is slow? DebugBear provides comprehensive performance monitoring and in-depth technical reports to help you speed up your website.</p><p><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://basewatch.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">BaseWatch</a></h3><p>Filippo Tinnirello built a handy app that will notify you when CSS properties reach baseline browser support.</p><p><a href="https://basewatch.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://comicss.art/games/11/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CroSSword</a></h3><p>Alvaro Montoro created a CSS-themed crossword puzzle featuring 89 different CSS terms: from properties to values, keywords and functions.</p><p><a href="https://comicss.art/games/11/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/alvaromontoro/pen/MYeVvgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-638/images/css-art-cat-looking-at-the-stars.jpg" alt="CSS Art: Cat Looking at the Stars"></a></p><h3><a href="https://codepen.io/alvaromontoro/pen/MYeVvgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Art: Cat Looking at the Stars</a></h3><p>Alvaro Montoro created a lovely illustration of a cat looking at the stars in HTML and CSS.</p><p><a href="https://codepen.io/alvaromontoro/pen/MYeVvgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-638&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17305538.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #637</title>
      <link>https://feedpress.me/link/24028/17293750/issue-637</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-637</guid>
      <description>Learn how to use border-shape to define custom border shapes for elements, how to style lists, how to improve your typography using text-indent keywords, and more.</description>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-637/images/cssweekly-issue637-border-shape-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn how to use border-shape to define custom border shapes for elements, how to style lists, how to improve your typography using text-indent keywords, and more.</p><h2>Headlines</h2><p><a href="https://una.im/border-shape/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/border-shape-the-future-of-the-non-rectangular-web.jpg" alt="border-shape: The Future of the Non-rectangular Web"></a></p><h3><a href="https://una.im/border-shape/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">border-shape: The Future of the Non-rectangular Web</a></h3><p>Una Kravets introduces <code>border-shape</code>, a powerful upcoming CSS primitive that defines a custom border shape for an element.</p><p><a href="https://una.im/border-shape/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/an-in-depth-guide-to-customising-lists-with-css.jpg" alt="An In-Depth Guide to Customising Lists With CSS"></a></p><h3><a href="https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">An In-Depth Guide to Customising Lists With CSS</a></h3><p>Richard Rutter created an extensive guide to styling lists, covering <code>list-style</code>, <code>list-item</code>, <code>::marker</code>, <code>counters()</code>, <code>counter()</code>, <code>@counter-style</code>, <code>symbolic</code>, <code>symbols()</code>, <code>symbols</code>, and more to push your HTML and CSS lists to the next level.</p><p><a href="https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/browserstack-accessibility?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/what-if-your-ide-flagged-accessibility-issues-the-same-way-it-flags-a-missing-semicolon.jpg" alt="What if your IDE flagged accessibility issues the same way it flags a missing semicolon?"></a></p><h3><a href="https://cssw.io/browserstack-accessibility?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">What if your IDE flagged accessibility issues the same way it flags a missing semicolon?</a></h3><p>BrowserStack's Accessibility DevTools does exactly that, catching WCAG violations as you code and routing fix suggestions through Copilot, Claude, or Cursor right where you're already working.</p><p>No context switching, no separate audit cycles. IBM research puts the cost of fixing accessibility post-release at 25x more than catching it in development. It's free and takes under a minute to install.</p><p><a href="https://cssw.io/browserstack-accessibility?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/rUOS-zaVrAE?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/css-text-indent-keywords.jpg" alt="CSS text-indent Keywords?"></a></p><h3><a href="https://youtu.be/rUOS-zaVrAE?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS text-indent Keywords?</a></h3><p>A brief guide on how to use CSS <code>text-indent</code> keywords, <code>each-line</code> and <code>hanging</code> to improve your typography.</p><p><a href="https://youtu.be/rUOS-zaVrAE?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://youtu.be/-OYOxjM5lww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/frontent-news-20-future-of-masonry-layouts.jpg" alt="Frontend News #20: CSS Grid Lanes, ::search-text Pseudo-Element"></a></p><h3><a href="https://youtu.be/-OYOxjM5lww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Frontend News #20: CSS Grid Lanes, ::search-text Pseudo-Element</a></h3><p>Find out how to create native masonry layouts using CSS <code>grid-lanes</code>, how a single emoji character causes massive performance issues, how to style in-page search results, how the Geolocation HTML element works, and more.</p><p><a href="https://youtu.be/-OYOxjM5lww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://frontendmasters.com/blog/virtual-scroll-driven-3d-scenes/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Virtual Scroll-Driven 3D Scenes</a></h3><p>Gunnar Bachelor examines the limitations of traditional DOM-based scrolling options, demonstrates how virtual scrolling enables more controlled scroll-driven interactions, and shows how to implement it responsibly.</p><p><a href="https://frontendmasters.com/blog/virtual-scroll-driven-3d-scenes/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/potentially-coming-to-a-browser-near-you/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Potentially Coming to a Browser :near() You</a></h3><p>Daniel Schwarz has several ideas for how we could use <code>:near()</code>, a proposed pseudo-class that detects when the pointer is near an element.</p><p><a href="https://css-tricks.com/potentially-coming-to-a-browser-near-you/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://tympanus.net/codrops/2026/03/02/sticky-grid-scroll-building-a-scroll-driven-animated-grid/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Sticky Grid Scroll: Building a Scroll-Driven Animated Grid</a></h3><p>Theo Plawinski shows how to build a structured scroll-driven image grid where movement unfolds progressively within a sticky layout.</p><p><a href="https://tympanus.net/codrops/2026/03/02/sticky-grid-scroll-building-a-scroll-driven-animated-grid/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.smashingmagazine.com/2026/03/getting-started-popover-api/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Getting Started With The Popover API</a></h3><p>Godstime Aburu gives a nice introduction to the Popover API.</p><p><a href="https://www.smashingmagazine.com/2026/03/getting-started-popover-api/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/popover-api-or-dialog-api-which-to-choose/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Popover API or Dialog API: Which to Choose?</a></h3><p>Zell Liew goes over the differences between Popover API and Dialog API in terms of accessibility.</p><p><a href="https://css-tricks.com/popover-api-or-dialog-api-which-to-choose/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/web-day-out.png" alt="Understand what web browsers are capable of at Web Day Out"></a></p><h3><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Understand what web browsers are capable of at Web Day Out</a></h3><p>The last few years have seen leaps in HTML, CSS, and JavaScript. If you haven’t kept up, <strong>Web Day Out</strong> is for you.</p><p>Join us on <strong>12 March</strong> for a conference about what you can do in web browsers today. Featuring talks from Rachel Andrew, Manuel Matuzović, Harry Roberts &#x26; more.</p><p>Use code <strong>CSSWEEKLY_10</strong> for 10% off.</p><p><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://github.com/tanstack/hotkeys?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Hotkeys</a></h3><p>Hotkeys is a type-safe, cross-platform hotkey library with sequence detection, key state tracking, hotkey recording, and framework adapters for React and more.</p><p><a href="https://github.com/tanstack/hotkeys?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://github.com/TrigenSoftware/masonry-grid?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Masonry Grid</a></h3><p>A fast, lightweight, and responsive masonry grid layout library in vanilla JavaScript.</p><p><a href="https://github.com/TrigenSoftware/masonry-grid?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://madcss.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-637/images/march-mad-css.jpg" alt="March Mad CSS"></a></p><h3><a href="https://madcss.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">March Mad CSS</a></h3><p>March Mad CSS is the Ultimate CSS Tournament featuring 16 of the most elite CSS developers from around the world who will battle it out for the chance to be dubbed the INAUGURAL MADCSS CHAMPIONS OF THE WORLD.</p><p><a href="https://madcss.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-637&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17293750.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Frontend News #21: Multi-Column Layouts, :heading Pseudo-Class, Scaling Elements</title>
      <link>https://feedpress.me/link/24028/17287362/frontend-news-21-multi-column-layouts-heading-pseudo-class-scaling-elements</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/frontend-news-21-multi-column-layouts-heading-pseudo-class-scaling-elements</guid>
      <description>Learn how multi-column layouts are becoming usable, how the new :heading pseudo-class works, how to scale content with layout, and more.</description>
      <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/frontend-news-21-multi-column-layouts-heading-pseudo-class-scaling-elements/images/frontend-news-21-multi-column-layouts-heading-pseudo-class-scaling-elements.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Learn how multi-column layouts are becoming usable, how the new :heading pseudo-class works, how to scale content with layout, and more.</p><div><div><iframe src="https://www.youtube.com/embed/ZlsFs6k4loc" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=ZlsFs6k4loc" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Find out how to create multi-column layouts using CSS, how the new :heading pseudo-class works, how to scale content with layout using <code>zoom</code> property, and more.</p><p><strong><a href="https://cssw.io/vue-school-freeweekend"> Get free access to the entire course library from Vue School</a></strong></p><h2> Chapters / Links</h2><p>00:00 Intro<br>00:30 <a href="https://developer.chrome.com/blog/multicol-wrapping">Support for wrapped columns in multi-column layout</a><br>02:05 <a href="https://cssw.io/vue-school-freeweekend">Vue School Free Weekend</a><br>02:45 <a href="https://www.alwaystwisted.com/articles/styling-with-the-heading-pseudo-class">Style Headings using the CSS :heading pseudo-class</a><br>04:22 <a href="https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/">How to scale elements and their layout with CSS "zoom"</a><br>05:34 <a href="https://jgthms.com/picknplace.js/">Picknplace.js</a><br>06:34 <a href="https://voxjong.com/">VoxJong - CSS Mahjong Solitaire</a></p><img src="https://feedpress.me/link/24028/17287362.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>CSS text-indent Keywords?</title>
      <link>https://feedpress.me/link/24028/17287363/css-text-indent-keywords</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/css-text-indent-keywords</guid>
      <description>A brief guide on how to use CSS text-indent keywords, each-line and hanging to improve your typography.</description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/css-text-indent-keywords/images/css-text-indent-keywords.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>A brief guide on how to use CSS text-indent keywords, each-line and hanging to improve your typography.</p><div><div><iframe src="https://www.youtube.com/embed/rUOS-zaVrAE" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=rUOS-zaVrAE" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>A brief guide on how to use CSS <code>text-indent</code> keywords, <code>each-line</code> and <code>hanging</code> to improve your typography.</p><h2> Chapters</h2><p>00:00 Intro &#x26; demo setup<br>00:24 How text-indent each-line keyword works<br>00:57 How text-indent hanging keyword works<br>01:34 Browser support for each-line and hanging keywords</p><h2> Demo</h2><p><a href="https://codepen.io/ZoranJambor/pen/yyayYoK?editors=0100&#x26;layout=left" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/yyayYoK?editors=0100&#x26;layout=left</a></p><img src="https://feedpress.me/link/24028/17287363.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Frontend News #20: CSS Grid Lanes, ::search-text Pseudo-Element, HTML Geolocation Element</title>
      <link>https://feedpress.me/link/24028/17280489/frontend-news-20-css-grid-lanes-search-text-pseudo-element-html-geolocation-element</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/frontend-news-20-css-grid-lanes-search-text-pseudo-element-html-geolocation-element</guid>
      <description>Find out how to create native masonry layouts, how to style in-page search results, and more.</description>
      <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/frontend-news-20-css-grid-lanes-search-text-pseudo-element-html-geolocation-element/images/frontend-news-20-css-grid-lanes-search-text-pseudo-element-html-geolocation-element.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Find out how to create native masonry layouts, how to style in-page search results, and more.</p><div><div><iframe src="https://www.youtube.com/embed/-OYOxjM5lww" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=-OYOxjM5lww" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Find out how to create native masonry layouts using CSS <code>grid-lanes</code>, how a single emoji character causes massive performance issues, how to style in-page search results, how the <code>&#x3C;geolocation></code> HTML element works, and more.</p><p><strong><a href="https://cssw.io/backlog-jira-alternative"> Try Backlog as your Jira alternative</a></strong></p><h2> Links / Chapters</h2><p>00:00 Intro<br>00:23 <a href="https://webkit.org/blog/17660/introducing-css-grid-lanes/">Introducing CSS Grid Lanes</a><br>01:47 <a href="https://cssw.io/backlog-jira-alternative">Backlog</a><br>02:25 <a href="https://css-tricks.com/how-to-style-the-new-search-text-and-other-highlight-pseudo-elements/">How to Style the New ::search-text</a><br>03:44 <a href="https://allenpike.com/2026/a-broken-heart/">A Broken Heart</a><br>05:05 <a href="https://matuzo.at/blog/2026/geolocation-element">Introduction to the new HTML element geolocation</a><br>06:18 <a href="https://codepen.io/stolinski/pen/XJdEyLK">Bubble Color Picker</a></p><img src="https://feedpress.me/link/24028/17280489.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #636</title>
      <link>https://feedpress.me/link/24028/17279510/issue-636</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-636</guid>
      <description>Learn what Interop 2026 entails, how to avoid common CSS mistakes, how to use Touch ID for SUDO, how to build flexible typographic scales, and more.</description>
      <pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-636/images/cssweekly-issue636-interop-2026-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn what Interop 2026 entails, how to avoid common CSS mistakes, how to use Touch ID for SUDO, how to build flexible typographic scales, and more.</p><h2>Headlines</h2><p><a href="https://webkit.org/blog/17818/announcing-interop-2026/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-636/images/announcing-interop-2026.jpg" alt="Announcing Interop 2026"></a></p><h3><a href="https://webkit.org/blog/17818/announcing-interop-2026/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Announcing Interop 2026</a></h3><p>Yulun Wu and Jen Simmons announce Interop 2026, continuing the mission of improving cross-browser interoperability.</p><p><a href="https://webkit.org/blog/17818/announcing-interop-2026/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://www.youtube.com/watch?v=J_cnZa6UzVI&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-636/images/5-css-fouls-that-i-see-way-too-often.jpg" alt="<small>►</small> 5 CSS Fouls That I See Way Too Often"></a></p><h3><a href="https://www.youtube.com/watch?v=J_cnZa6UzVI&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> 5 CSS Fouls That I See Way Too Often</a></h3><p>Kevin Powell outlines some common CSS mistakes.</p><p><a href="https://www.youtube.com/watch?v=J_cnZa6UzVI&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p>Web Performance: A Deep Dive</p><p>😮 <a href="https://cssw.io/http-prioritization-4"><strong>Does your CDN handle HTTP priorities correctly?</strong></a> – Even when the browser correctly prioritizes resources on a page, many web servers simply don’t listen.</p><p>🚀 <a href="https://cssw.io/improve-web-performance-4"><strong>How to improve website performance</strong></a> – Learn to identify and fix the most common page speed issues based on request waterfalls.</p><p>🕵️‍♀️ <a href="https://cssw.io/website-speed-test-4"><strong>Test your website speed</strong></a> – Measure website performance, get targeted insights, and check real user metrics collected from Chrome users.</p><p>🏡 <a href="https://cssw.io/lighthouse-discrepancies-4"><strong>Why do Lighthouse scores vary so much across tools?</strong></a> – Learn how simulated throttling and different test environments result in score discrepancies even when testing the same website.</p><p>🍞 <a href="https://cssw.io/long-animation-frames-4"><strong>Identify slow scripts with the Long Animation Frames API</strong></a> – Use browser APIs to debug slow user interactions for real users.</p><p>🎥 <a href="https://cssw.io/devtools-throttling-4"><strong>DevTools network throttling: a look under the hood</strong></a> – This video explains how Chrome implements network throttling and what the results can and can’t tell you.</p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly Blog</a></h2><p><a href="https://css-weekly.com/videos/how-to-use-touch-id-for-sudo-on-macos?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-636/images/how-to-use-touch-id-for-sudo-on-macos.png" alt="How To Use Touch ID for SUDO on macOS"></a></p><h3><a href="https://css-weekly.com/videos/how-to-use-touch-id-for-sudo-on-macos?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How To Use Touch ID for SUDO on macOS</a></h3><p>A hands-on guide to setting up macOS to use Touch ID for <code>sudo</code>—so you don't have to type your password every time manually.</p><p><a href="https://css-weekly.com/videos/how-to-use-touch-id-for-sudo-on-macos?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://www.alwaystwisted.com/articles/building-typographic-scales-with-headings-sibling-index-and-pow?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Building Typographic Scales in CSS with :heading(), sibling-index(), and pow()</a></h3><p>Stuart Robson shows how to build flexible, mathematical typographic scales using <code>:heading()</code>, <code>sibling-index()</code>, and <code>pow()</code> for cleaner CSS design systems.</p><p><a href="https://www.alwaystwisted.com/articles/building-typographic-scales-with-headings-sibling-index-and-pow?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://developer.chrome.com/blog/implementing-corner-shape?hl=en&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">The Corner Cases of Implementing CSS corner-shape in Blink</a></h3><p>Noam Rosenthal shares the story about the complexity of implementing the <code>corner-shape</code> feature.</p><p><a href="https://developer.chrome.com/blog/implementing-corner-shape?hl=en&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://utilitybend.com/blog/css-animation-triggers-playing-animations-on-scroll-without-scrubbing-its-a-match?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Animation Triggers: Playing animations on scroll without scrubbing. It's a match!</a></h3><p>Brecht De Ruyte shows how CSS <code>scroll-triggered</code> animations let you use scroll position to determine when animations play.</p><p><a href="https://utilitybend.com/blog/css-animation-triggers-playing-animations-on-scroll-without-scrubbing-its-a-match?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/spiral-scrollytelling-in-css-with-sibling-index/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Spiral Scrollytelling in CSS With sibling-index()</a></h3><p>Lee Meyer demonstrates how to arrange text in a spiral that animates as a vortex on scroll.</p><p><a href="https://css-tricks.com/spiral-scrollytelling-in-css-with-sibling-index/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/anchored-menus-and-a-lesson-in-scoping/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Anchored Menus and a Lesson in Scoping</a></h3><p>Chris Coyier explains how <code>anchor-scope</code> can be useful for button/menu setups that will appear multiple times on the same page.</p><p><a href="https://frontendmasters.com/blog/anchored-menus-and-a-lesson-in-scoping/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-636/images/web-day-out.png" alt="Understand what web browsers are capable of at Web Day Out"></a></p><h3><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Understand what web browsers are capable of at Web Day Out</a></h3><p>The last few years have seen leaps in HTML, CSS, and JavaScript. If you haven’t kept up, <strong>Web Day Out</strong> is for you.</p><p>Join us on <strong>12 March</strong> for a conference about what you can do in web browsers today. Featuring talks from Rachel Andrew, Manuel Matuzović, Harry Roberts &#x26; more.</p><p>Use code <strong>CSSWEEKLY_10</strong> for 10% off.</p><p><a href="https://cssw.io/webdayout?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://svgconverter.online/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">SVG Converter</a></h3><p>An online SVG converter with color palette customization that can convert both JPG and PNG files to SVG.</p><p><a href="https://svgconverter.online/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://buttonyui.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Buttony UI</a></h3><p>A nice collection of customizable, animated buttons for your web projects.</p><p><a href="https://buttonyui.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/cbolson/pen/JoKBeaW?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-636/images/picket-fence-animation-using-scroll-animations.jpg" alt="Picket Fence Animation Using Scroll Animations"></a></p><h3><a href="https://codepen.io/cbolson/pen/JoKBeaW?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Picket Fence Animation Using Scroll Animations</a></h3><p>Chris Bolson created a stunning demo that showcases the power of  scroll-driven animations.</p><p><a href="https://codepen.io/cbolson/pen/JoKBeaW?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-636&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17279510.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>How To Use Touch ID for SUDO on macOS</title>
      <link>https://feedpress.me/link/24028/17275725/how-to-use-touch-id-for-sudo-on-macos</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/how-to-use-touch-id-for-sudo-on-macos</guid>
      <description>A hands-on guide to setting up macOS to use Touch ID for sudo—so you don't have to type your password every time manually.</description>
      <pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/how-to-use-touch-id-for-sudo-on-macos/images/how-to-use-touch-id-for-sudo-on-macos.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>A hands-on guide to setting up macOS to use Touch ID for sudo—so you don't have to type your password every time manually.</p><div><div><iframe src="https://www.youtube.com/embed/KVCKc1-gHvI" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=KVCKc1-gHvI" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>On macOS 14 (Sonoma) and newer, you can use Touch ID for sudo. There is already a template file on your system that you can use to enable this.</p><p>Copy the template file <code>/etc/pam.d/sudo_local.template</code> to <code>/etc/pam.d/sudo_local</code>, then edit it and uncomment the specified line to enable Touch ID for sudo.</p><br><pre><code class="language-bash">sudo cp /etc/pam.d/sudo_local.template /etc/pam.d/sudo_local
sudo nano /etc/pam.d/sudo_local
</code></pre><p>Uncomment the line stated in the file. Once you do, the file should look like this:</p><pre><code class="language-bash"># sudo_local: local config file which survives system update and is included fo$
# uncomment following line to enable Touch ID for sudo
auth       sufficient     pam_tid.so
</code></pre><p>Save the file, and as soon as you open another terminal window, you can use Touch ID for sudo.</p><p>Note that this works only on your local machine, so you can't use it if you SSH into a remote server.</p><p>There is an additional limitation on macOS where this doesn't work when you're recording the screen — you'll still be asked for your password. However, there is a way to bypass this limitation if you enter this into the terminal nd run it:</p><br><pre><code class="language-bash">  defaults write com.apple.security.authorization ignoreArd -bool TRUE`
</code></pre><h2> Links</h2><ul><li><a href="https://support.apple.com/en-us/109030">What's new for enterprise in macOS Sonoma</a></li></ul><img src="https://feedpress.me/link/24028/17275725.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #635</title>
      <link>https://feedpress.me/link/24028/17275488/issue-635</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-635</guid>
      <description>Learn how CSS is used in the real world, how powerful the customizable select can be, how to easily target recently selected elements from the Elements Panel in the Console of Chrome DevTools, and more.</description>
      <pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-635/images/cssweekly-issue635-nice-select-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn how CSS is used in the real world, how powerful the customizable select can be, how to easily target recently selected elements from the Elements Panel in the Console of Chrome DevTools, and more.</p><h2>Headlines</h2><p><a href="https://www.projectwallace.com/the-css-selection/2026?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/the-css-selection.jpg" alt="The CSS Selection"></a></p><h3><a href="https://www.projectwallace.com/the-css-selection/2026?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">The CSS Selection</a></h3><p>Bart Veneman analyzes real-world CSS usage across 100,000 websites.</p><p><a href="https://www.projectwallace.com/the-css-selection/2026?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://nerdy.dev/nice-select?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/nice-select.jpg" alt="Nice Select"></a></p><h3><a href="https://nerdy.dev/nice-select?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Nice Select</a></h3><p>Adam Argyle showcases how powerful customizable <code>&#x3C;select></code> can be.</p><p><a href="https://nerdy.dev/nice-select?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/vue-school-freeweekend?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/8-hours-of-free-learning-with-1-source-of-vuejs-learning.jpg" alt="48 hours of free learning with Vue School Free Weekend"></a></p><h3><a href="https://cssw.io/vue-school-freeweekend?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">48 hours of free learning with Vue School Free Weekend</a></h3><p>Get free access to the entire course library from the #1 source of Vue.js learning and build real production-ready skills in a weekend. Learn Vue 3, Nuxt, Pinia, TypeScript, authentication, UI patterns, and modern tooling.</p><p><a href="https://cssw.io/vue-school-freeweekend?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://css-weekly.com/videos/chrome-devtools-tips-target-recent-elements-in-console?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/chrome-devtools-tips-target-recent-elements-in-console.jpg" alt="<small>►</small> Chrome DevTools Tips: Target Recent Elements in Console"></a></p><h3><a href="https://css-weekly.com/videos/chrome-devtools-tips-target-recent-elements-in-console?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> Chrome DevTools Tips: Target Recent Elements in Console</a></h3><p>A Chrome Developer Tools quick tip outlining how to easily target recently selected elements from the Elements Panel in the Console.</p><p><a href="https://css-weekly.com/videos/chrome-devtools-tips-target-recent-elements-in-console?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://www.smashingmagazine.com/2026/02/css-scope-alternative-naming-conventions/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS @scope: An Alternative To Naming Conventions And Heavy Abstractions</a></h3><p>Blake Lundquist explores how the new <code>@scope</code> rule can help you keep CSS maintainable in a world of increasingly complex interfaces.</p><p><a href="https://www.smashingmagazine.com/2026/02/css-scope-alternative-naming-conventions/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/how-to-create-a-css-only-elastic-text-effect/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How to Create a CSS-Only Elastic Text Effect</a></h3><p>Temani Afif explores tricks to achieve a fancy text effect with just CSS.</p><p><a href="https://frontendmasters.com/blog/how-to-create-a-css-only-elastic-text-effect/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://dev.to/madsstoumann/re-creating-a-pantone-color-deck-in-css-3108?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Re-Creating a Pantone Color Deck in CSS</a></h3><p>Mads Stoumann shows how to build a fully interactive color fan deck where the spread adapts to the container width, cards know their position among their siblings, and clicking a card to "focus" it is handled entirely by the browser’s native <code>&#x3C;details></code> element.</p><p><a href="https://dev.to/madsstoumann/re-creating-a-pantone-color-deck-in-css-3108?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/trying-to-make-the-perfect-pie-chart-in-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Trying to Make the Perfect Pie Chart in CSS</a></h3><p>Juan Diego Rodríguez explores how to create a semantic pie chart with flexible markup that avoids using a JavaScript library.</p><p><a href="https://css-tricks.com/trying-to-make-the-perfect-pie-chart-in-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://webkit.org/blog/17808/interop-2025-review/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Interop 2025: A Year of Convergence</a></h3><p>Nicole Sullivan gives a nice overview of Interop 2025.</p><p><a href="https://webkit.org/blog/17808/interop-2025-review/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/debugbear-optimize-page-speed-and-core-web-vitals.png" alt="Optimize page speed and Core Web Vitals"></a></p><h3><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Optimize page speed and Core Web Vitals</a></h3><p>Wondering why your website is slow? DebugBear provides comprehensive performance monitoring and in-depth technical reports to help you speed up your website.</p><p><a href="https://cssw.io/debugbear-core-web-vitals?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://allsvgicons.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">All SVG Icons</a></h3><p>AllSVGIcons is a free online library of high-quality SVG icons that you can download and use in your projects right away.</p><p><a href="https://allsvgicons.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://circlecropimage.net/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Circle Crop Image</a></h3><p>An online app that transforms any image into a perfect circle instantly — ideal for profile pictures, social media, and design projects.</p><p><a href="https://circlecropimage.net/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/thebabydino/pen/MYeVLZw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-635/images/video-text-wrapping-selectable-stylable-from-css.jpg" alt="Video Text - Wrapping, Selectable, Stylable From CSS"></a></p><h3><a href="https://codepen.io/thebabydino/pen/MYeVLZw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Video Text - Wrapping, Selectable, Stylable From CSS</a></h3><p>Ana Tudor created a stunning demo that turns boring headlines into a dynamic video where the text wraps naturally, is selectable, can be copied, supports any backdrop, and is easily stylable with CSS.</p><p><a href="https://codepen.io/thebabydino/pen/MYeVLZw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-635&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17275488.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Chrome DevTools Tips: Target Recent Elements in Console</title>
      <link>https://feedpress.me/link/24028/17272933/chrome-devtools-tips-target-recent-elements-in-console</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/chrome-devtools-tips-target-recent-elements-in-console</guid>
      <description>A Chrome Developer Tools quick tip outlining how to easily target recently selected elements from the Elements Panel in the Console.</description>
      <pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/chrome-devtools-tips-target-recent-elements-in-console/images/chrome-devtools-tips-target-recent-elements-in-console.png" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>A Chrome Developer Tools quick tip outlining how to easily target recently selected elements from the Elements Panel in the Console.</p><div><div><iframe src="https://www.youtube.com/embed/ArfowJtfy3A" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=ArfowJtfy3A" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>To target the currently selected element in the Elements Panel, you can use the <code>$0</code> selector in the Console.</p><p>To target the previously selected element, you can use the <code>$1</code> selector — and you can target the history of selected elements with <code>$2</code>, <code>$3</code>, and <code>$4</code>.</p><img src="https://feedpress.me/link/24028/17272933.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #634</title>
      <link>https://feedpress.me/link/24028/17270228/issue-634</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-634</guid>
      <description>Learn how to easily solve annoying problems using CSS, how to visually connect related elements using Anchor Positioning, what Too Early Breakpoints are, and more.</description>
      <pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-634/images/cssweekly-issue634-css-optical-illusions-clean.png" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn how to easily solve annoying problems using CSS, how to visually connect related elements using Anchor Positioning, what Too Early Breakpoints are, and more.</p><h2>Headlines</h2><p><a href="https://www.youtube.com/watch?v=dQ8_F4LPCs8&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-634/images/css-properties-that-solve-annoying-problems.jpg" alt="<small>►</small> CSS Properties That Solve Annoying Problems"></a></p><h3><a href="https://www.youtube.com/watch?v=dQ8_F4LPCs8&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> CSS Properties That Solve Annoying Problems</a></h3><p>Kevin Powell shares a few fantastic CSS tips that you’ll surely find useful.</p><p><a href="https://www.youtube.com/watch?v=dQ8_F4LPCs8&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://rolandfranke.nl/frontend-stories/drawing-connections-with-css-anchor-positioning/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-634/images/drawing-connections-with-css-anchor-positioning.png" alt="Drawing Connections with CSS Anchor Positioning"></a></p><h3><a href="https://rolandfranke.nl/frontend-stories/drawing-connections-with-css-anchor-positioning/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Drawing Connections with CSS Anchor Positioning</a></h3><p>Roland Franke provides a practical exploration of CSS Anchor Positioning and the <code>anchor()</code> function for visually connecting related elements without extra markup.</p><p><a href="https://rolandfranke.nl/frontend-stories/drawing-connections-with-css-anchor-positioning/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/debugbear-fix-perf-issues?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-634/images/debugbear-deliver-an-excellent-user-experience.png" alt="Identify and fix web performance issues with DebugBear"></a></p><h3><a href="https://cssw.io/debugbear-fix-perf-issues?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Identify and fix web performance issues with DebugBear</a></h3><p>Is your website slower than it should be? DebugBear provides in-depth web performance analytics based on synthetic tests and real user monitoring.</p><p>Detect pages with critical issues, get in-depth technical reports to identify solutions, and measure how performance impacts conversion rates.</p><p><a href="https://cssw.io/debugbear-fix-perf-issues?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://ishadeed.com/article/too-early-breakpoint/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">The Too Early Breakpoint</a></h3><p>Ahmad Shadeed shares opinion on why you shouldn't switch to the smallest design too early.</p><p><a href="https://ishadeed.com/article/too-early-breakpoint/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://v7.robweychert.com/blog/2026/01/v7-typographic-scales-and-technical-pens/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Typographic scales and technical pens</a></h3><p>Rob Weychert shows how to create a flexible system for consistent stroke widths across type sizes.</p><p><a href="https://v7.robweychert.com/blog/2026/01/v7-typographic-scales-and-technical-pens/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/performance-optimized-video-embeds-with-zero-javascript/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Performance-Optimized Video Embeds with Zero JavaScript</a></h3><p>Stefan Bauer explores an approach of using a closed <code>details</code> element to prevent the embed from loading until that <code>details</code> element is opened.</p><p><a href="https://frontendmasters.com/blog/performance-optimized-video-embeds-with-zero-javascript/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.debugbear.com/blog/jpeg-xl-image-format?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">What is JPEG XL and do we really need another image format?</a></h3><p>Aaron T. Grogg explains what JPEG XL is, how it compares to other image formats like AVIF and WebP, and whether you should use it on your websites.</p><p><a href="https://www.debugbear.com/blog/jpeg-xl-image-format?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://adrianroselli.com/2026/01/live-region-support.html?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Live Region Support</a></h3><p>Adrian Roselli outlines the best way to use live regions, covering how they are exposed to the audience who experiences them — screen reader users.</p><p><a href="https://adrianroselli.com/2026/01/live-region-support.html?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/europdf?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-634/images/europdf.png" alt="Creating PDFs can be tedious … but what if you could create them using HTML and CSS?"></a></p><h3><a href="https://cssw.io/europdf?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Creating PDFs can be tedious … but what if you could create them using HTML and CSS?</a></h3><p>Did you know CSS has powerful features specifically for paged media? Running headers, page numbers, custom page sizes – it’s all at your fingertips! With EuroPDF, powered by the industry-leading PrinceXML rendering engine, you can easily take advantage of these features to create stunning PDFs.</p><p><a href="https://cssw.io/europdf?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://ilamy.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">ilamy Calendar</a></h3><p>A powerful, full-featured React calendar component library built with TypeScript, Tailwind CSS, and modern React patterns. Features multiple calendar views, drag-and-drop support, recurring events, and comprehensive internationalization.</p><p><a href="https://ilamy.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://github.com/ultroned/xray-react?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">X-Ray React</a></h3><p>Xray-react is a development tool that reveals the component structure of your React UI.</p><p><a href="https://github.com/ultroned/xray-react?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://alvaromontoro.github.io/CSS-Optical-Illusions/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-634/images/css-optical-illusions1.png" alt="CSS Optical Illusions"></a></p><h3><a href="https://alvaromontoro.github.io/CSS-Optical-Illusions/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Optical Illusions</a></h3><p>Alvaro Montoro created a stunning collection of optical illusions with pure CSS. No JavaScript, no animations—just clever use of colors, patterns, and gradients to trick your brain.</p><p><a href="https://alvaromontoro.github.io/CSS-Optical-Illusions/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-634&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17270228.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #633</title>
      <link>https://feedpress.me/link/24028/17265551/issue-633</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-633</guid>
      <description>Understand the fundamentals of CSS Layout, learn how stacking contexts work, why you should use the HTML autocomplete attribute on fields for 2FA, and more.</description>
      <pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-633/images/cssweekly-issue633-css-layout-fundamentals1-clean.png" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Understand the fundamentals of CSS Layout, learn how stacking contexts work, why you should use the HTML autocomplete attribute on fields for 2FA, and more.</p><h2>Headlines</h2><p><a href="https://polypane.app/blog/understanding-the-fundamentals-of-css-layout/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/understanding-the-fundamentals-of-css-layout1.jpg" alt="Understanding the fundamentals of CSS Layout"></a></p><h3><a href="https://polypane.app/blog/understanding-the-fundamentals-of-css-layout/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Understanding the fundamentals of CSS Layout</a></h3><p>Kilian Valkhof gives a fantastic deep dive into the fundamentals of CSS layout.</p><p><a href="https://polypane.app/blog/understanding-the-fundamentals-of-css-layout/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://www.smashingmagazine.com/2026/01/unstacking-css-stacking-contexts/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/unstacking-css-stacking-contexts.jpg" alt="Unstacking CSS Stacking Contexts"></a></p><h3><a href="https://www.smashingmagazine.com/2026/01/unstacking-css-stacking-contexts/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Unstacking CSS Stacking Contexts</a></h3><p>Gabriel Shoyombo explains how stacking contexts works, what controls the stacking order, and practical approaches to “unstack” elements when needed.</p><p><a href="https://www.smashingmagazine.com/2026/01/unstacking-css-stacking-contexts/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p>12 Top Web Design Tools and Resources for 2026 – AI and Creative Picks</p><p>🤖 <a href="https://theme.co/csai/?utm_medium=Display&#x26;utm_source=Content&#x26;utm_campaign=AI&#x26;utm_content=baw"><strong>Power Up Builds with CSAI + Pro + Cornerstone</strong></a> — Bring AI directly into WordPress and the Cornerstone Builder to generate copy, code, images, and more without leaving the builder. The ultimate all-in-one solution for building impressive, custom websites.</p><p>⚡ <a href="https://creativethemes.com/blocksy/pricing/?utm_source=baw27.01.26&#x26;utm_medium=baw27.01.26&#x26;utm_campaign=baw27.01.26&#x26;utm_id=baw27.01.26"><strong>Design Faster with Blocksy</strong></a> — A lightweight, modular WordPress theme that gives designers speed, flexibility, and full WooCommerce support out of the box.</p><p>🧠 <a href="https://ai.mobirise.com/?utm_source=baw_ny26&#x26;utm_medium=baw_article&#x26;utm_campaign=baw_ny26"><strong>Build Instantly with Mobirise AI</strong></a> — Generate complete websites from a single prompt using an AI-powered, no-code builder made for rapid launches and prototyping.</p><p>🎨 <a href="https://undsgn.com/uncode/?utm_source=css-weekly.com&#x26;utm_medium=newsletter&#x26;utm_campaign=toptoolsresources26"><strong>Create High-End Sites with Uncode</strong></a> — A creative WordPress theme packed with advanced layouts, animations, and design tools for premium client projects.</p><p>🔤 <a href="https://www.whatfontis.com/?utm_source=top_web_design_tools&#x26;utm_medium=listing&#x26;utm_campaign=top15_2026_pro_ai"><strong>Identify Fonts with WhatFontIs</strong></a> — Upload any image and instantly get accurate font matches, usable alternatives, and licensing details in seconds.</p><p>✨ <a href="https://www.sliderrevolution.com/?utm_source=css-weekly.com&#x26;utm_medium=newsletter&#x26;utm_campaign=toptoolsandresources2026a"><strong>Animate with Slider Revolution</strong></a> — Design stunning sliders, hero sections, and interactive animations using a powerful visual editor and modern templates.</p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">Quick Tips</a></h2><p><a href="https://css-weekly.com/how-to-debug-starting-style-at-rule-in-chrome-devtools?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/how-to-debug-starting-style-at-rule-in-chrome-devtools.png" alt="How to debug @starting-style at-rule in Chrome DevTools"></a></p><h3><a href="https://css-weekly.com/how-to-debug-starting-style-at-rule-in-chrome-devtools?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How to debug @starting-style at-rule in Chrome DevTools</a></h3><p>A quick tip showing how to debug the Starting Style at-rule in Chrome DevTools.</p><p><a href="https://css-weekly.com/how-to-debug-starting-style-at-rule-in-chrome-devtools?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://bsky.app/profile/cssweekly.com/post/3mdigw2i3js2y?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/use-html-autocomplete-attribute-for-one-time-codes-and-web-authentication.png" alt="Use HTML “autocomplete” attribute for one-time codes and web authentication"></a></p><h3><a href="https://bsky.app/profile/cssweekly.com/post/3mdigw2i3js2y?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Use HTML “autocomplete” attribute for one-time codes and web authentication</a></h3><p>A short reminder that you should use the HTML autocomplete attribute on fields for 2FA, one-time codes, and web authentication.</p><p><a href="https://bsky.app/profile/cssweekly.com/post/3mdigw2i3js2y?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://www.joshtumath.uk/posts/2026-01-27-try-text-scaling-support-in-chrome-canary/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Try text scaling support in Chrome Canary</a></h3><p>Josh Tumath explains what the "text-scaling” meta tag is, and how you can use it to improve accessibility.</p><p><a href="https://www.joshtumath.uk/posts/2026-01-27-try-text-scaling-support-in-chrome-canary/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://nerdy.dev/anchor-interpolated-morphing?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Anchor Interpolated Morph (AIM)</a></h3><p>Adam Argyle gives an introduction to a new CSS transition technique: Anchor Interpolated Morphing (AIM).</p><p><a href="https://nerdy.dev/anchor-interpolated-morphing?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.debugbear.com/blog/web-performance-user-experience?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How Web Performance Impacts User Experience</a></h3><p>Matt Zeunert explains how website speed impacts user experience and how you can measure performance and business outcomes.</p><p><a href="https://www.debugbear.com/blog/web-performance-user-experience?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://matuzo.at/blog/2026/lowering-specificity-of-multiple-rules?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Lowering the specificity of multiple rules at once</a></h3><p>Manuel Matuzović shares a tip on how to easily lower the specificity of multiple rules using cascade layers.</p><p><a href="https://matuzo.at/blog/2026/lowering-specificity-of-multiple-rules?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/responsive-hexagon-grid-using-modern-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Responsive Hexagon Grid Using Modern CSS</a></h3><p>Temani Afif demonstrates how to create a repeating grid of hexagons using modern CSS features.</p><p><a href="https://css-tricks.com/responsive-hexagon-grid-using-modern-css/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Friends</a></h2><p><a href="https://cssw.io/webweekly?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/web-weekly.png" alt="CSS Weekly covers CSS. Web Weekly covers the rest."></a></p><h3><a href="https://cssw.io/webweekly?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Weekly covers CSS. Web Weekly covers the rest.</a></h3><p>HTML, JavaScript APIs, browser updates, and web standards — stay up-to-date with the web platform! No <code>npm install</code> required.</p><p><a href="https://cssw.io/webweekly?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://www.alwaystwisted.com/relicss/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">ReliCSS</a></h3><p>ReliCSS is a client-side CSS analyzer that detects outdated CSS hacks, IE6-9 patterns, and deprecated vendor prefixes.</p><p><a href="https://www.alwaystwisted.com/relicss/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.avatune.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Avatune</a></h3><p>Avatune is a production-ready avatar system with AI-powered generation and framework-native components. Works seamlessly with React, Vue, Svelte, and Vanilla JavaScript.</p><p><a href="https://www.avatune.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/VicioBonura/pen/azNjeWO?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-633/images/css-animated-light-and-shadow.jpg" alt="CSS Animated Light &#x26; Shadow"></a></p><h3><a href="https://codepen.io/VicioBonura/pen/azNjeWO?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Animated Light &#x26; Shadow</a></h3><p>Vicio Bonura created a stunning, animated shadow effect using CSS.</p><p><a href="https://codepen.io/VicioBonura/pen/azNjeWO?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-633&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17265551.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[How to debug <code>@starting-style</code> at-rule in Chrome DevTools]]></title>
      <link>https://feedpress.me/link/24028/17263204/how-to-debug-starting-style-at-rule-in-chrome-devtools</link>
      <guid isPermaLink="true">https://css-weekly.com/how-to-debug-starting-style-at-rule-in-chrome-devtools</guid>
      <description>Learn how to debug the Starting Style at-rule in Chrome DevTools.</description>
      <pubDate>Sun, 25 Jan 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/blog/how-to-debug-starting-style-at-rule-in-chrome-devtools/images/how-to-debug-starting-style-at-rule-in-chrome-devtools-clean.png" type="image/jpeg"/>
      <category>Article</category>
      <content:encoded><![CDATA[<p>Learn how to debug the Starting Style at-rule in Chrome DevTools.</p><p><img src="https://css-weekly.com/blog/how-to-debug-starting-style-at-rule-in-chrome-devtools/images/debug-starting-style-chrome-devtools.jpg" alt="Chrome DevTools Elements Panel with starting-style labels" title="On elements with @starting-style, you can see a clickable label (1). When you toggle it (2), the @starting-style rule will appear in the Styles pane (3)."></p><p>In Chrome 143+, you can find a label “starting-style” in the Elements Panel, on elements where the starting style at-rule is applied.</p><p>When you click it, the transition will be triggered, allowing you to see what it looks like, and the <code>@starting-style</code> rule will appear in the Styles pane, allowing you to easily tweak, edit, or debug its CSS.</p><p>Toggling the label in the Elements Panel again will trigger the transition with the changes from DevTools applied.</p><h2> Demo</h2><p><a href="https://codepen.io/ZoranJambor/pen/eYaEwez" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/eYaEwez</a></p><h2> Links</h2><ul><li><a href="https://css-weekly.com/videos/stunning-staggered-css-animationtransition-on-page-load">Stunning Staggered CSS Transition on Page Load</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style">Starting Style at-rule on MDN</a></li></ul><img src="https://feedpress.me/link/24028/17263204.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #632</title>
      <link>https://feedpress.me/link/24028/17259621/issue-632</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-632</guid>
      <description>Find out what the current state of the web is, how we should redefine the Pixel Perfect concept, how to be more productive in Chrome DevTools Elements Panel, and more.</description>
      <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-632/images/cssweekly-issue632-2025-web-almanac-clean.png" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Find out what the current state of the web is, how we should redefine the Pixel Perfect concept, how to be more productive in Chrome DevTools Elements Panel, and more.</p><h2>Headlines</h2><p><a href="https://almanac.httparchive.org/en/2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/the-2025-web-almanac.png" alt="The 2025 Web Almanac"></a></p><h3><a href="https://almanac.httparchive.org/en/2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">The 2025 Web Almanac</a></h3><p>HTTP Archive’s annual state of the web report is out — it’s a comprehensive, data-backed view of the web, built with trusted experts, across 15 chapters on content, user experience, publishing, and distribution.</p><p><a href="https://almanac.httparchive.org/en/2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://www.smashingmagazine.com/2026/01/rethinking-pixel-perfect-web-design/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/rethinking-pixel-perfect-web-design.jpg" alt="Rethinking “Pixel Perfect” Web Design"></a></p><h3><a href="https://www.smashingmagazine.com/2026/01/rethinking-pixel-perfect-web-design/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Rethinking “Pixel Perfect” Web Design</a></h3><p>Amit Sheen takes a hard look at the “Pixel Perfect” legacy concept, explaining why it’s failing us and redefining what “perfection” actually looks like in a multi-device, fluid world.</p><p><a href="https://www.smashingmagazine.com/2026/01/rethinking-pixel-perfect-web-design/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p>Top WordPress Plugins to Supercharge Your Site in 2026</p><p>🎨 <a href="https://www.brizy.io/wordpress?utm_source=listing&#x26;utm_medium=advertorial&#x26;utm_campaign=wp2026&#x26;utm_id=baw"><strong>Build Stunning Pages with Brizy</strong></a> – Drag-and-drop editor for responsive pages without coding. Comes with pre-made blocks, icons, and a White Label option for agencies.</p><p>🕒 <a href="https://wpamelia.com/?utm_source=css-weekly.com&#x26;utm_medium=newsletter&#x26;utm_campaign=baw_top_wp_plugins_2026"><strong>Simplify Bookings with Amelia</strong></a> – Automate appointments and events with an intuitive interface, packages, and client-friendly design.</p><p>📊 <a href="https://wpdatatables.com/?utm_source=css-weekly.com&#x26;utm_medium=newsletter&#x26;utm_campaign=baw_top_wp_plugins_2026"><strong>Create Dynamic Tables &#x26; Charts with wpDataTables</strong></a> – Handle millions of rows with filtering, sorting, WooCommerce integration, and responsive layouts.</p><p>🌟 <a href="https://www.sliderrevolution.com/?utm_source=css-weekly.com&#x26;utm_medium=newsletter&#x26;utm_campaign=topplugins2026a"><strong>Level Up Visuals with Slider Revolution</strong></a> – Design stunning sliders, hero sections, and animations using 250+ templates and a visual editor.</p><p>✨ <a href="https://layerslider.com/?utm_source=baw&#x26;utm_medium=content&#x26;utm_campaign=top-wp-plugins-2026"><strong>Build Modern Websites with LayerSlider</strong></a> - Create sliders, popups, rich animations and websites with effortless editing, and access to millions of visual assets.</p><p>🗺️ <a href="https://mapsvg.com/?utm_source=baw&#x26;utm_medium=article&#x26;utm_campaign=top_plugins_nov_2025"><strong>Interactive Maps with MapSVG</strong></a> – Build color-coded, data-driven maps with custom objects, filtering, and image attachments.</p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/yBKNOfEM4jA?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/chrome-devtools-elements-panel-tips-and-tricks1.png" alt="<small>►</small> Chrome DevTools Elements Panel Tips &#x26; Tricks"></a></p><h3><a href="https://youtu.be/yBKNOfEM4jA?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> Chrome DevTools Elements Panel Tips &#x26; Tricks</a></h3><p>In this guide, you’ll learn how to hide inspect element popups that sometimes obscure your view, how to work with CSS classes effectively, and how to keep interactive elements, such as dropdowns, from disappearing while DevTools are focused.</p><p><a href="https://youtu.be/yBKNOfEM4jA?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://youtu.be/ar_jI23j1CM?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/automate-your-testing-workflows-using-browserstacks-ai-agents.jpg" alt="<small>►</small> Automate Your Testing Workflows Using BrowserStack’s AI Agents"></a></p><h3><a href="https://youtu.be/ar_jI23j1CM?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> Automate Your Testing Workflows Using BrowserStack’s AI Agents</a></h3><p>Find out how to use BrowserStack’s AI agents to automate your testing workflows. In this hands-on guide, you’ll see how to easily use the Test Case Generator Agent to turn user stories into detailed, structured test cases in seconds, and then convert those cases into automated tests with the Low-Code Authoring Agent.</p><p><a href="https://youtu.be/ar_jI23j1CM?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://tympanus.net/codrops/2026/01/20/animating-responsive-grid-layout-transitions-with-gsap-flip/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Animating Responsive Grid Layout Transitions with GSAP Flip</a></h3><p>Iqbal Muthahhary explores how to use GSAP’s Flip plugin to animate dynamic grid layout changes, showing how grid items can resize and rearrange fluidly.</p><p><a href="https://tympanus.net/codrops/2026/01/20/animating-responsive-grid-layout-transitions-with-gsap-flip/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://blog.logrocket.com/css-in-2026/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS in 2026: The New Features Reshaping Frontend Development</a></h3><p>Jemima Abu shows how she replaced 150+ lines of JavaScript with just a few new CSS features.</p><p><a href="https://blog.logrocket.com/css-in-2026/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/view-transitions-playing-video/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">View Transitions &#x26; Playing Video</a></h3><p>Chris Coyier explores how to keep audio &#x26; video playing during a View Transition.</p><p><a href="https://frontendmasters.com/blog/view-transitions-playing-video/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How to Favicon in 2026: Three files that fit most needs</a></h3><p>Andrey Sitnik gives an exhaustive guide to favicons in 2025, including steps for static HTML and Webpack. TLDR: prefer SVG over PNG, trust browsers to downscale, drop obscure formats.</p><p><a href="https://evilmartians.com/chronicles/how-to-favicon-in-2021-six-files-that-fit-most-needs?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/i-learned-the-first-rule-of-aria-the-hard-way/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">I Learned The First Rule of ARIA the Hard Way</a></h3><p>Hashim Quraishi explains how semantic HTML does a lot more accessibility work than we usually give it credit for — and that ARIA is easy to abuse when we use it both as a shortcut and as a supplement.</p><p><a href="https://css-tricks.com/i-learned-the-first-rule-of-aria-the-hard-way/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/debugbear-website-speed-test?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/debugbear-website-speed-test.png" alt="Check page speed and Google Core Web Vitals for your website"></a></p><h3><a href="https://cssw.io/debugbear-website-speed-test?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Check page speed and Google Core Web Vitals for your website</a></h3><p>DebugBear’s free website speed test delivers a comprehensive performance report for your website, based on custom-built analysis, Lighthouse scores, and Google CrUX metrics based on real visitor experience.</p><p>Diagnose page speed issues with tailored recommendations and a detailed network request waterfall that shows how different resources impact rendering progress.</p><p><a href="https://cssw.io/debugbear-website-speed-test?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://browserscore.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Browser Score</a></h3><p>An interactive tool by Lea Verou that shows how your browser stacks up in terms of support for web platform features.</p><p><a href="https://browserscore.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://github.com/pengzhanbo/caniuse-embed?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CanIUse Embed</a></h3><p>An interactive, configurable, and responsive embed that shows Baseline status or browser support for web platform features.</p><p><a href="https://github.com/pengzhanbo/caniuse-embed?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/designfenix/pen/OPyapww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-632/images/text-frame-border-animation-rotation-css-svg.jpg" alt="Text Frame Border Animation Rotation"></a></p><h3><a href="https://codepen.io/designfenix/pen/OPyapww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Text Frame Border Animation Rotation</a></h3><p>Fernando Cohen created a stunning, organic animated frame using CSS &#x26; SVG.</p><p><a href="https://codepen.io/designfenix/pen/OPyapww?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-632&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com" target="_blank">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17259621.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #631</title>
      <link>https://feedpress.me/link/24028/17255561/issue-631</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-631</guid>
      <description>See the overview of best CSS features that landed in Chrome in 2025, learn what the future of CSS Masonry looks like, what the practical use cases for overflow: clip are, and more.</description>
      <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-631/images/cssweekly-issue631-css-wrapped-2025-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>See the overview of best CSS features that landed in Chrome in 2025, learn what the future of CSS Masonry looks like, what the practical use cases for overflow: clip are, and more.</p><h2>Headlines</h2><p><a href="https://chrome.dev/css-wrapped-2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/css-wrapped-2025.jpg" alt="CSS Wrapped 2025"></a></p><h3><a href="https://chrome.dev/css-wrapped-2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">CSS Wrapped 2025</a></h3><p>The Chrome CSS/UI DevRel team created another edition of CSS Wrapped, showcasing 22 powerful new CSS features that landed in Chrome in 2025.</p><p><a href="https://chrome.dev/css-wrapped-2025/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://webkit.org/blog/17660/introducing-css-grid-lanes/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/introducing-css-grid-lanes-clean.jpg" alt="Introducing CSS Grid Lanes"></a></p><h3><a href="https://webkit.org/blog/17660/introducing-css-grid-lanes/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Introducing CSS Grid Lanes</a></h3><p>Jen Simmons, Elika Etemad, and Brandon Stewart introduce the future of masonry layouts on the web.</p><p><a href="https://webkit.org/blog/17660/introducing-css-grid-lanes/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/backlog-jira-alternative?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/backlog-2026-01-15-22.png" alt="Looking for a Jira alternative your team will actually enjoy?"></a></p><h3><a href="https://cssw.io/backlog-jira-alternative?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Looking for a Jira alternative your team will actually enjoy?</a></h3><p>Backlog is a project management tool built for teams who want structure—without the overwhelm.</p><p>If Jira feels heavy or complex, Backlog offers a cleaner, more intuitive experience with all the essentials: kanban boards, Gantt charts, issues, sprints, docs, version control, and more.</p><p><a href="https://cssw.io/backlog-jira-alternative?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://youtube.com/@cssweekly?sub_confirmation=1" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/epLoRe4k4qQ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/practical-use-cases-for-overflow-clip.jpg" alt="<small>►</small> Practical Use-Cases for “overflow: clip;”"></a></p><h3><a href="https://youtu.be/epLoRe4k4qQ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> Practical Use-Cases for “overflow: clip;”</a></h3><p>A brief guide outlining the difference between <code>overflow: hidden</code> and <code>overflow: clip</code>, along with practical use cases when you’ll find <code>overflow: clip</code> life-saving.</p><p><a href="https://youtu.be/epLoRe4k4qQ?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://youtu.be/PjZYyZWukBw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/frontend-news-19-better-scrollbars.jpg" alt="<small>►</small> Frontend News #19: CSS overscroll-behavior, scrollbar-gutter, text-grow Properties"></a></p><h3><a href="https://youtu.be/PjZYyZWukBw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>►</small> Frontend News #19: CSS overscroll-behavior, scrollbar-gutter, text-grow Properties</a></h3><p>Find out how <code>overscroll-behavior: contain</code> is changing, how to use the scrollbar-gutter CSS property, what the new <code>text-grow</code> property does, how to analyze your CSS, and more.</p><p><a href="https://youtu.be/PjZYyZWukBw?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://frontendmasters.com/blog/the-deep-card-conundrum/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">The Deep Card Conundrum</a></h3><p>Amit Sheen demonstrates how to create a stunning 3D card with layers of depth.</p><p><a href="https://frontendmasters.com/blog/the-deep-card-conundrum/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.bram.us/2026/01/15/100vw-horizontal-overflow-no-more/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)</a></h3><p>Bramus Van Damme explains that in Chrome 145+, <code>100vw</code> will automatically subtract the size of the (vertical) scrollbar from it if you have forced the <code>html</code> element to always show a vertical scrollbar (using <code>overflow[-y]: scroll</code>) or if you reserve space for it (using <code>scrollbar-gutter: stable</code>).</p><p><a href="https://www.bram.us/2026/01/15/100vw-horizontal-overflow-no-more/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://una.im/scroll-state-scrolled/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Directional CSS with scroll-state(scrolled)</a></h3><p>Una Kravets gives an introduction to the new <code>scroll-state</code> query feature that lets you apply styles based on the last scroll direction of your user’s scroll.</p><p><a href="https://una.im/scroll-state-scrolled/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://calendar.perfplanet.com/2025/how-to-load-css-fast/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How to Load CSS (Fast)</a></h3><p>Yoav Weiss shows a clever, creative way to ship only critical/necessary CSS for each page type (home, search, etc.) while avoiding duplicate code in the CSS bundles.</p><p><a href="https://calendar.perfplanet.com/2025/how-to-load-css-fast/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://piccalil.li/blog/accessible-faux-nested-interactive-controls/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Accessible Faux-Nested Interactive Controls</a></h3><p>Eric Bailey shows how to create a user interface pattern with a large clickable element (such as a card) and clickable controls within that card.</p><p><a href="https://piccalil.li/blog/accessible-faux-nested-interactive-controls/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>What Have I Been up To</h2><p><a href="https://aideveloperweekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/aideveloperweekly-screenshot4.png" alt="AI Developer Newsletter"></a></p><h3><a href="https://aideveloperweekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">AI Developer Newsletter</a></h3><p>I’ve launched a new, proper website for my latest project, AI Developer. There you’ll find articles, tips, videos, past newsletter issues, and more.</p><p>Check it out, and subscribe today—AI Developer Newsletter Issue #2 is landing in a few days. ;)</p><p><a href="https://aideveloperweekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://web-platform-dx.github.io/web-features-explorer/newly-available/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Web Platform Features Explorer</a></h3><p>Web Platform Features Explorer is an online tool that lets you discover new features and APIs and stay up to date with changes.</p><p><a href="https://web-platform-dx.github.io/web-features-explorer/newly-available/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://github.com/ddoemonn/react-beautiful-color?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">React-Beautiful-Color</a></h3><p>React-Beautiful-Color is a flexible and beautiful color picker for React built with compound components for maximum customization.</p><p><a href="https://github.com/ddoemonn/react-beautiful-color?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/ZoranJambor/pen/ogLLLgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-631/images/mesmerizing-corner-shapes-using-superellipse—css-only.jpg" alt="Mesmerizing Corner Shapes using superellipse() — CSS Only"></a></p><h3><a href="https://codepen.io/ZoranJambor/pen/ogLLLgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Mesmerizing Corner Shapes using superellipse() — CSS Only</a></h3><p>I’ve created a pure CSS animation that showcases the power of the <code>corner-shape</code> CSS property and its <code>superellipse()</code> function.</p><p><a href="https://codepen.io/ZoranJambor/pen/ogLLLgr?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-631&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thanks for reading! If you find the content valuable, please consider <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener noreferrer">supporting the newsletter on Patreon</a>.</p><p>Happy coding,<br><br><a href="https://zoranjambor.com">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17255561.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Automate Your Testing Workflows Using BrowserStack’s AI Agents</title>
      <link>https://feedpress.me/link/24028/17255562/automate-your-testing-workflows-using-browserstacks-ai-agents</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/automate-your-testing-workflows-using-browserstacks-ai-agents</guid>
      <description>Find out how to use BrowserStack’s AI agents to automate your testing workflows. </description>
      <pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/automate-your-testing-workflows-using-browserstacks-ai-agents/images/automate-your-testing-workflows-using-browserstacks-ai-agents-clean.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Find out how to use BrowserStack’s AI agents to automate your testing workflows. </p><div><div><iframe src="https://www.youtube.com/embed/ar_jI23j1CM" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=ar_jI23j1CM" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>In this hands-on guide, you’ll see how to easily use the Test Case Generator Agent to turn user stories into detailed, structured test cases in seconds, and then convert those cases into automated tests with the Low-Code Authoring Agent.</p><p><strong><a href="https://cssw.io/browserstack-ai-agents"> Try BrowserStack for free</a></strong><br><br><strong><a href="https://baseline-status-for-video.css-weekly.com/"> Baseline Status for Video</a></strong></p><h2> Chapters</h2><p>00:00 Why you should automate your testing workflows<br>00:58 How to opt-in to BrowserStack AI<br>01:36 Overview of the demo project<br>03:09 Overview of BrowserStack AI Agents<br>03:31 How to use the Test Case Generator Agent to create structured test cases<br>06:03 How to use the Low-Code Authoring Agent to create automated tests<br>09:10 How to record a test flow using the Low-Code Automation<br>10:03 How to use AI to control recording flow in the Low-Code Automation<br>12:14 Why you should start using BrowserStack AI today</p><img src="https://feedpress.me/link/24028/17255562.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Chrome DevTools Elements Panel Tips &amp; Tricks</title>
      <link>https://feedpress.me/link/24028/17255563/chrome-devtools-elements-panel-tips-tricks</link>
      <guid isPermaLink="true">https://css-weekly.com/videos/chrome-devtools-elements-panel-tips-tricks</guid>
      <description>Find out how to become more productive when working with the Elements panel in Chrome DevTools.</description>
      <pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/videos/chrome-devtools-elements-panel-tips-tricks/images/chrome-devtools-elements-panel-tips-tricks.jpg" type="image/jpeg"/>
      <category>Video</category>
      <content:encoded><![CDATA[<p>Find out how to become more productive when working with the Elements panel in Chrome DevTools.</p><div><div><iframe src="https://www.youtube.com/embed/yBKNOfEM4jA" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=yBKNOfEM4jA" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>Find out how to become more productive when working with the Elements panel in Chrome DevTools.</p><p>In this guide, you’ll learn how to hide inspect element popups that sometimes obscure your view, how to work with CSS classes effectively, and how to keep interactive elements, such as dropdowns, from disappearing while DevTools are focused.</p><h2> Chapters</h2><p>00:00 How to hide Inspect Element popups while hovering<br>01:06 How to hover over elements with pointer-events: none;<br>01:39 How to highlight all elements a CSS selector matches<br>02:07 How to work with CSS classes in the elements panel effectively<br>03:32 How to prevent dropdowns from disappearing while the DevTools are focused<br>05:26 How to use Command Palette in Chrome DevTools</p><img src="https://feedpress.me/link/24028/17255563.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #630</title>
      <link>https://feedpress.me/link/24028/17255567/issue-630</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-630</guid>
      <description>Learn what upcoming CSS Masonry means for web developers, how to adjust perceived font weight in dark mode, how to create an adaptive SVG favicon, and more.</description>
      <pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-630/images/cssweekly-issue630-css-masonry1-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn what upcoming CSS Masonry means for web developers, how to adjust perceived font weight in dark mode, how to create an adaptive SVG favicon, and more.</p><p><a href="https://www.smashingmagazine.com/2025/12/masonry-things-you-wont-need-library-anymore/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/masonry-things-you-wont-need-library-anymore-1.jpg" alt="Masonry: Things You Won’t Need A Library For Anymore"></a></p><h3><a href="https://www.smashingmagazine.com/2025/12/masonry-things-you-wont-need-library-anymore/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Masonry: Things You Won’t Need A Library For Anymore</a></h3><p>Patrick Brosset takes a deep dive into what CSS Masonry means for web developers and how you could make use of it in your own work.</p><p><a href="https://www.smashingmagazine.com/2025/12/masonry-things-you-wont-need-library-anymore/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://nerdy.dev/adjust-perceived-typepace-weight-for-dark-mode-without-layout-shift?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/adjust-perceived-typepace-weight-for-dark-mode-without-layout-shift.jpg" alt="Using CSS To Fix the Irradiation Illusion"></a></p><h3><a href="https://nerdy.dev/adjust-perceived-typepace-weight-for-dark-mode-without-layout-shift?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Using CSS To Fix the Irradiation Illusion</a></h3><p>Adam Argyle explains how to adjust perceived font weight in dark mode without the layout shift, using variable fonts and the GRAD axis.</p><p><a href="https://nerdy.dev/adjust-perceived-typepace-weight-for-dark-mode-without-layout-shift?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/get-certified-cyber-monday?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/get-certified-cyber-monday-2025.jpg" alt="Last Chance: Get Certified with up to 50% OFF"></a></p><h3><a href="https://cssw.io/get-certified-cyber-monday?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Last Chance: Get Certified with up to 50% OFF</a></h3><p>Your final opportunity this year to get certified in Vue, React, Angular, or JS with up to 50% off. Start the new year with validated skills and a credential that stands out. Offer ends soon.</p><p><a href="https://cssw.io/get-certified-cyber-monday?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="https://www.youtube.com/c/CSSWeekly" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/5ByMihLrNrI?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/how-to-create-adaptive-svg-favicon.jpg" alt="<small>▶</small> How To Create an Adaptive SVG Favicon Using the prefers-color-scheme Media Query"></a></p><h3><a href="https://youtu.be/5ByMihLrNrI?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>▶</small> How To Create an Adaptive SVG Favicon Using the prefers-color-scheme Media Query</a></h3><p>Find out how to create an adaptive favicon that automatically switches to a light/dark color scheme using SVG icon format and prefers-color-scheme media query.</p><p><a href="https://youtu.be/5ByMihLrNrI?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://youtu.be/PWXh8Uh5HM4?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/frontend-news-18-self-destructing-css-throttle-specific-requests-in-chrome-devtools.jpg" alt="<small>▶</small> Frontend News #18: Self-Destructing CSS, Throttle Specific Requests In Chrome DevTools"></a></p><h3><a href="https://youtu.be/PWXh8Uh5HM4?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>▶</small> Frontend News #18: Self-Destructing CSS, Throttle Specific Requests In Chrome DevTools</a></h3><p>Find out why you should use the self-destructing CSS pattern when working with web components, how to throttle specific requests in Chrome DevTools, and more.</p><p><a href="https://youtu.be/PWXh8Uh5HM4?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://webkit.org/blog/17620/grid-how-grid-template-areas-offer-a-visual-solution-for-your-code/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Grid: How grid-template-areas Offer a Visual Solution for Your Code</a></h3><p>Saron Yitbarek gives a short introduction on how to use <code>grid-template-areas</code> to visually place elements on a grid.</p><p><a href="https://webkit.org/blog/17620/grid-how-grid-template-areas-offer-a-visual-solution-for-your-code/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://web.dev/articles/baseline-in-action-dialog-popover?hl=en&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Dialog and Popover: Baseline Layered UI Patterns</a></h3><p>David A. Herron shows how to build UI patterns for modal windows and prompts using the &#x3C;dialog> and popover web features</p><p><a href="https://web.dev/articles/baseline-in-action-dialog-popover?hl=en&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.youtube.com/watch?v=qUhtlnL48yA&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>▶</small> How To Use Web Components, and Why You’d Want To</a></h3><p>Kevin Powell gives a nice introduction to Web Components.</p><p><a href="https://www.youtube.com/watch?v=qUhtlnL48yA&#x26;utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://css-tricks.com/scrollytelling-on-steroids-with-scroll-state-queries/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Scrollytelling on Steroids With Scroll-State Queries</a></h3><p>Lee Meyer outlines some common use cases for scroll-based styling.</p><p><a href="https://css-tricks.com/scrollytelling-on-steroids-with-scroll-state-queries/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://calendar.perfplanet.com/2025/exploring-large-html-documents-on-the-web/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Exploring Large HTML Documents On The Web</a></h3><p>Matt Zeunert looks at examples of large HTML documents around the web and peeks into the code to see what’s making them so big.</p><p><a href="https://calendar.perfplanet.com/2025/exploring-large-html-documents-on-the-web/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise/" target="_blank" rel="noopener noreferrer">Sponsored Link</a></h2><p><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/piccalilli-black-friday-2025-1.png" alt="Save £60 on all Piccalilli courses and get a 50% discount coupon to use any time"></a></p><h3><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Save £60 on all Piccalilli courses and get a 50% discount coupon to use any time</a></h3><p>Every purchase of Complete CSS, Mindful Design and JavaScript for Everyone during this period gets you a 50% discount coupon that you can use at any time, on any course.</p><p>That means if you buy one course for £189 (down from £249), you get the next one for £124.50, saving over £180 against the full, £498 price of both courses!</p><p><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://ui.indie-starter.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Indie UI</a></h3><p>Indie UI is a collection of styled UI components, built with React.js, shadcn, and Framer Motion for animation.</p><p><a href="https://ui.indie-starter.dev/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://shadcnthemer.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">ShadcnThemer</a></h3><p>Shadcn Themer is a web application that lets you create, customize, and share themes for shadcn/ui.</p><p><a href="https://shadcnthemer.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/pimskie/pen/OPMQVjP?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-630/images/chrome-css-scroll-based-animations.jpg" alt="Chrome: CSS Scroll Based Animations"></a></p><h3><a href="https://codepen.io/pimskie/pen/OPMQVjP?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Chrome: CSS Scroll Based Animations</a></h3><p>Pim van Die created a stunning demo that showcases the power of scroll-based animations.</p><p><a href="https://codepen.io/pimskie/pen/OPMQVjP?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-630&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thank you so much for reading!</p><p>If you want to support this newsletter and my work, check out:<br>• <a href="https://stickers.css-weekly.com/" target="_blank" rel="noopener">CSS Stickers</a><br>• <a href="https://buymeacoffee.com/cssweekly" target="_blank" rel="noopener">CSS Weekly on Buy Me a Coffee</a><br>• <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener">CSS Weekly on Patreon</a><br>• <a href="https://youtube.com/@cssweekly" target="_blank" rel="noopener">CSS Weekly YouTube Channel</a><br>• <a href="https://masteringlinting.com/" target="_blank" rel="noopener">Mastering Linting</a><br>Happy coding,<br><a href="https://bsky.app/profile/cssweekly.com" target="_blank" rel="noopener noreferrer">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17255567.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Issue #629</title>
      <link>https://feedpress.me/link/24028/17255569/issue-629</link>
      <guid isPermaLink="true">https://css-weekly.com/issue-629</guid>
      <description>Learn the new range syntax for CSS style queries and the if() function, the exciting new things you can do with subgrid, and more.</description>
      <pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/issues/issue-629/images/cssweekly-issue629-hypnotic-css-animation-clean.jpg" type="image/jpeg"/>
      <category>Newsletter</category>
      <content:encoded><![CDATA[<p>Learn the new range syntax for CSS style queries and the if() function, the exciting new things you can do with subgrid, and more.</p><p><a href="https://una.im/range-style-queries/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/range-style-queries.png" alt="Range Syntax for Style Queries"></a></p><h3><a href="https://una.im/range-style-queries/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Range Syntax for Style Queries</a></h3><p>Una Kravets explains how to use the new range syntax for CSS style queries and the <code>if()</code> function.</p><p><a href="https://una.im/range-style-queries/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://www.joshwcomeau.com/css/subgrid/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/brand-new-layouts-with-css-subgrid.png" alt="Brand New Layouts with CSS Subgrid"></a></p><h3><a href="https://www.joshwcomeau.com/css/subgrid/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Brand New Layouts with CSS Subgrid</a></h3><p>Joshua Comeau demonstrates some of the exciting new things you can do with subgrid, and, along the way, explains the basic mechanics of subgrid.</p><p><a href="https://www.joshwcomeau.com/css/subgrid/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise" target="_blank" rel="noopener noreferrer">From Our Sponsor</a></h2><p><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/piccalilli-black-friday-2025.png" alt="Save £60 on all Piccalilli courses and get a 50% discount coupon to use any time"></a></p><h3><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Save £60 on all Piccalilli courses and get a 50% discount coupon to use any time</a></h3><p>Every purchase of Complete CSS, Mindful Design and JavaScript for Everyone during this period gets you a 50% discount coupon that you can use at any time, on any course. That means if you buy one course for £189 (down from £249), you get the next one for £124.50, saving over £180 against the full, £498 price of both courses!</p><p><a href="https://cssw.io/piccalilli-black-friday-2025?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="https://www.youtube.com/c/CSSWeekly" target="_blank" rel="noopener noreferrer">CSS Weekly on YouTube</a></h2><p><a href="https://youtu.be/ignpBW4O_K0?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/how-to-easily-create-modern-css-first-forms-in-wordpress.jpg" alt="<small>▶</small> How to Easily Create Modern, CSS-First Forms in WordPress"></a></p><h3><a href="https://youtu.be/ignpBW4O_K0?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>▶</small> How to Easily Create Modern, CSS-First Forms in WordPress</a></h3><p>Learn how to build stylable forms in WordPress using the IvyForms plugin easily. Along the way, you’ll learn how to use Chrome DevTools Changes drawer, how to tweak colors consistently using OKLCH color format, how to apply additional CSS in WordPress theme editor, and more.</p><p><a href="https://youtu.be/ignpBW4O_K0?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><p><a href="https://youtu.be/x_ZAEY4bV6w?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/how-to-add-additional-css-to-a-wordpress-theme-when-customize-is-missing.jpg" alt="<small>▶</small> How To Add Additional CSS to a WordPress Theme When “Customize” Is Missing"></a></p><h3><a href="https://youtu.be/x_ZAEY4bV6w?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><small>▶</small> How To Add Additional CSS to a WordPress Theme When “Customize” Is Missing</a></h3><p>Learn two simple (but confusing) ways to add Additional CSS to WordPress, even if your theme is missing the “Appearance – Customize” option.</p><p><a href="https://youtu.be/x_ZAEY4bV6w?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Articles &#x26; Tutorials</h2><h3><a href="https://markodenic.com/introduction-to-css-if-statements-and-conditional-logic/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Introduction to CSS if Statements and Conditional Logic</a></h3><p>Matt Lawrence gives a nice, detailed guide to conditional logic in CSS.</p><p><a href="https://markodenic.com/introduction-to-css-if-statements-and-conditional-logic/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://frontendmasters.com/blog/how-to-create-3d-images-in-css-with-the-layered-pattern/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">How to Create 3D Images in CSS with the Layered Pattern</a></h3><p>Sunkanmi Fafowora shows how to stack multiple items into layers, adjusting the Z position and colors of each item based on its index value to create an illusion of 3D.</p><p><a href="https://frontendmasters.com/blog/how-to-create-3d-images-in-css-with-the-layered-pattern/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.stefanjudis.com/today-i-learned/light-dark-isnt-the-same-as-prefers-color-scheme/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">light-dark() Isn’t Always the Same As prefers-color-scheme</a></h3><p>Stefan Judis explains why the new <code>light-dark()</code> CSS function isn’t a drop-in replacement for <code>prefers-color-scheme</code> media queries.</p><p><a href="https://www.stefanjudis.com/today-i-learned/light-dark-isnt-the-same-as-prefers-color-scheme/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://cloudfour.com/thinks/responsive-letter-spacing/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Responsive Letter Spacing</a></h3><p>Tyler Sticka outlines an interesting approach to responsive letter spacing.</p><p><a href="https://cloudfour.com/thinks/responsive-letter-spacing/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://www.smashingmagazine.com/2025/11/keyframes-tokens-standardizing-animation-across-projects/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Keyframes Tokens: Standardizing Animation Across Projects</a></h3><p>Amit Sheen explains how to consolidate and standardize keyframes to turn animations into a clear, predictable system.</p><p><a href="https://www.smashingmagazine.com/2025/11/keyframes-tokens-standardizing-animation-across-projects/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2><a href="http://css-weekly.com/advertise/" target="_blank" rel="noopener noreferrer">CSS Weekly Black Friday Deal</a></h2><p><a href="https://stickers.css-weekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/css-stickers-1.jpg" alt="Get Your CSS Stickers Pack for 40% Off — This Week Only"></a></p><h3><a href="https://stickers.css-weekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Get Your CSS Stickers Pack for 40% Off — This Week Only</a></h3><p>If you still haven’t gotten your CSS Stickers pack, now is your chance to get it with a massive 40% discount. If you jump on this deal, you won’t only get an awesome stickers pack, but you’ll also support my work and CSS Weekly—thanks. Use the coupon code BLACKFRIDAY2025 at checkout.</p><p><a href="https://stickers.css-weekly.com/?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Tools</h2><h3><a href="https://github.com/Stanko/monorail?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Monorail</a></h3><p>A tool that allows you to turn any CSS keyframe animation into an interactive graph. You might find it useful for animation debugging or breaking down complex animations.</p><p><a href="https://github.com/Stanko/monorail?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><h3><a href="https://github.com/aniftyco/awesome-tailwindcss?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Awesome Tailwind CSS</a></h3><p>A collection of high-quality resources related to Tailwind CSS.</p><p><a href="https://github.com/aniftyco/awesome-tailwindcss?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Inspiration</h2><p><a href="https://codepen.io/cbolson/pen/PwNQWNa?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/issues/issue-629/images/hypnotic-animation-using-sibling-index-corner-shape.jpg" alt="Hypnotic Animation Using sibling-Index() + corner-shape"></a></p><h3><a href="https://codepen.io/cbolson/pen/PwNQWNa?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Hypnotic Animation Using sibling-Index() + corner-shape</a></h3><p>Chris Bolson created a mesmerizing animation by combining sibling-index() and corner-shape.</p><p><a href="https://codepen.io/cbolson/pen/PwNQWNa?utm_source=CSS-Weekly&#x26;utm_campaign=Issue-629&#x26;utm_medium=rss" target="_blank" rel="noopener noreferrer">Read more →</a></p><br><hr><br><h2>Until Next Week</h2><p>Thank you so much for reading!</p><p>If you want to support this newsletter and my work, check out:<br>• <a href="https://stickers.css-weekly.com/" target="_blank" rel="noopener">CSS Stickers</a><br>• <a href="https://buymeacoffee.com/cssweekly" target="_blank" rel="noopener">CSS Weekly on Buy Me a Coffee</a><br>• <a href="https://patreon.com/cssweekly" target="_blank" rel="noopener">CSS Weekly on Patreon</a><br>• <a href="https://youtube.com/@cssweekly" target="_blank" rel="noopener">CSS Weekly YouTube Channel</a><br>• <a href="https://masteringlinting.com/" target="_blank" rel="noopener">Mastering Linting</a><br>Happy coding,<br><a href="https://bsky.app/profile/cssweekly.com" target="_blank" rel="noopener noreferrer">Zoran Jambor</a></p><img src="https://feedpress.me/link/24028/17255569.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Top 5 CSS Navigation Menu Mistakes</title>
      <link>https://feedpress.me/link/24028/17256030/top-5-css-navigation-menu-mistakes</link>
      <guid isPermaLink="true">https://css-weekly.com/top-5-css-navigation-menu-mistakes</guid>
      <description>Find out how to improve the UI of your navigation menus with a few lines of CSS.</description>
      <pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/og-image.jpeg" type="image/jpeg"/>
      <category>Article</category>
      <content:encoded><![CDATA[<p>Find out how to improve the UI of your navigation menus with a few lines of CSS.</p><p>Along the way, you'll learn how to create a delayed closing effect for the dropdown menu, utilize the <code>:has()</code> pseudo-class to simplify your HTML structure, and more.</p><div><div><iframe src="https://www.youtube.com/embed/p_hXB12BWQM" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=p_hXB12BWQM" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>This article is a result of my subjective experience of noticing problems with the navigation menus of products and apps I've been using in the past few weeks. The same patterns and problems are repeated often, and I outline them here.</p><p><strong>Note</strong> This guide is focused on the UI of the navigation menus for the sake of<br>brevity and clarity. One of the most important aspects of any interactive<br>component, including navigation menus, is accessibility, and I will cover this<br>in a follow-up guide.</p><h2>Demo &#x26; Setup</h2><p>The navigation Menu HTML structure is straightforward. The top-level navigation menu is designated with the class <code>.menu</code> and dropdown with <code>.submenu</code>. I’ve applied some basic styling—you’ll find the relevant demo code in the <code>@layer demo { ... }</code> at the top of CSS.</p><p>The final demo, with all tips from this article applied:</p><p><a href="https://codepen.io/ZoranJambor/pen/VYwNJPp/9a005c9b6e41f35dc5db10a45667f73f?editors=0000" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/VYwNJPp/9a005c9b6e41f35dc5db10a45667f73f?editors=0000</a></p><p><em>The HTML here is cleaned up for the sake of brevity. I would heavily rely on classes instead of cascade in a real-world project to reduce specificity.</em></p><p>The dropdown is styled horizontally to make the mistakes more apparent in this simple demo—I'm not suggesting that the horizontal pattern is better or preferable to a classic, vertical one.</p><h2>Mistake #1: Small target areas</h2><p>The target area of text-only menus is often too small, making the interactions with navigation items cumbersome, especially on touch devices.</p><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/small-target-areas.png" alt="A screenshot of a navigation menu showcasing too small target areas." title="The target area of anchor links covers only text itself, requiring more precision and focus from users."></p><p>The way to fix this mistake is to add additional padding around the anchor links, thus expanding the interactive, clickable area.</p><pre><code class="language-css">/**
 * Expand the target area
 * for links by adding padding.
 */
.menu a {
  padding-inline: 1rem;
  padding-block: 0.5rem;
}
</code></pre><p>Once you apply additional padding, the perceived gap between items will increase, so make sure to adjust it, keeping in mind that there always should be a space between menu items.</p><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/expanded-target-areas.png" alt="A screenshot of a navigation menu showcasing expanded target area." title="After adding padding to anchor links, the target area is expanded (yellow highlight) and much more forgiving."></p><h2>Mistake #2: Not using <code>gap</code> with Flexbox</h2><p>Navigation menus are most often created using Flexbox, as it provides an easy way to adjust positioning and alignment, but the Flexbox is not utilized fully, and the spacing between items is added using <code>margin</code>.</p><p>Patterns I see in this case, which all work but are unnecessary:</p><pre><code class="language-css">/* Using an owl selector to add margin only on subsequent items. */
.menu > * + * {
  margin-left: 1rem;
}

/* Using :not() to avoid adding margin to the last (or first) item. */
.menu > li:not(:last-child) {
  margin-right: 1rem;
}

/* Resetting the margin on last/first item to zero. */
.menu > li {
  margin-right: 1rem;
}
.menu > li:last-child {
  margin-right: 0;
}
</code></pre><p>Instead, you can use the <code>gap</code> property with Flexbox to add spacing only between items without.</p><pre><code class="language-css">/**
 * You can use the `gap` property
 * with Flexbox.
 */
.menu {
  display: flex;
  gap: 1rem;
}
</code></pre><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/gap-property.png" alt="A screenshot of a navigation menu showcasing gaps between menu items." title="The &#x60;gap&#x60; property for Flexbox will add spaces only between Flexbox items."></p><p>Note that the <code>gap</code> property did not work with Flexbox initially when Flexbox was first released, so you had to resort to a different solution, but this is now in the Baseline and has worked in all modern browsers since April 2021.</p><br><hr><br><aside class="sponsorship"><span>// From Our Sponsor</span><br><br><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/ads/images/autonoma-stop-shipping-bugs1.png" alt="Autonoma — Stop shipping bugs" width="580" height="245"></a><div><h3><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">One CSS change broke checkout. Nobody noticed until users did.</a></h3><div><p>You rename a class, push to prod, and something breaks silently three pages away. Sound familiar? Autonoma spawns AI agents that test every user flow like a real person, catching overlapping buttons, broken interactions, and visual regressions before your users do.<img src="https://www.vpdae.com/open/24fe2e6f.gif?opens=1" width="1" height="1"></p><div><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">Find your first bug</a></div></div></div></aside><br><hr><br><h2>Mistake #3: Unforgiving target areas for dropdowns</h2><p>Similar to the first point, navigation menus with dropdowns should have forgiving target areas, and this specifically means that you need to adjust the target area to the path most likely taken by a user.</p><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/unforgiving-dropdown-areas.png" alt="A screenshot of a navigation menu showcasing the potential path of a mouse cursor for a dropdown menu." title="The yellow arrow is showing a path over empty space the user might take when targeting the first item in the dropdown—thus unintentionally closing the dropdown."></p><p>The easiest way to fix this mistake is to add a pseudo-element and position it to cover the empty area users will likely utilize.</p><pre><code class="language-css">/**
 * Expand the target area of dropdown menus
 */
.submenu::after {
  content: "";
  display: block;
  position: absolute;
  width: 100%;
  height: 3rem;
  bottom: 100%;
  left: 0;
  /* background: darkred; */
}
</code></pre><p>To test this and tweak the positioning, add a background to the pseudo-element, and once you’re happy with the result, remove it, making the element transparent. This will increase the target area without affecting the visual style.</p><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/pseudo-element-expansion.png" alt="A screenshot of a navigation menu showcasing an additional pseudo-element that expands the target area of the dropdown." title="An additional pseudo-element (dark red) that expands the target area of the dropdown. In production, you’d make it transparent."></p><p>Note that the element is going underneath other top-level menu items, so it won’t interfere with user interactions with those elements.</p><h2>Mistake #4: No delay before closing dropdowns</h2><p>This point is tied directly with the previous one—you want to create forgiving target areas for clicks, touch, and hover events.</p><p>If a user accidentally moves the mouse away from the dropdown menu, you don’t want to close it immediately; you want to give the user a chance to reposition their pointer and continue where they left off without starting from zero by moving the mouse to the top-level item. As you suspect, this becomes more and more crucial as the number of your dropdown menu levels increases.</p><p>You can achieve this with a bit of JavaScript. When the user hovers over an item with a dropdown, you add a class to the item or tweak the style directly, and after the user hovers away from the dropdown tree, you delay the closing of the dropdown a bit.</p><pre><code class="language-js">/**
 * A simplified example of how you might
 * implement menu delay with one sublevel.
 */
const menus = document.querySelectorAll(".menu > li");
const submenus = document.querySelectorAll(".submenu");

// Track the timeout delay
let hideTimeout = null;

// Add event listeners to all top-level items
menus.forEach((menu) => {
  const submenu = menu.querySelector(".submenu");

  menu.addEventListener("mouseenter", (e) => {
    // Immediately hide all (other) dropdown menus
    submenus.forEach((otherSubmenu) => {
      otherSubmenu.style.display = "";
    });

    // And show the child submenu
    if (submenu) {
      clearTimeout(hideTimeout);
      submenu.style.display = "flex";
    }
  });

  // There's no need for mouseleave event if the item has no dropdown
  if (!submenu) return;

  // Close the menu after the timeout
  // This can be canceled in the mouseenter event
  menu.addEventListener("mouseleave", () => {
    hideTimeout = setTimeout(() => {
      submenu.style.display = "";
    }, 500);
  });
});
</code></pre><p><em>This is a simplified example of how you might handle a delayed closing—it doesn’t take into consideration that there might be additional sublevels of dropdown menus, nor the positioning of the dropdown when there isn’t enough space on the screen.</em></p><h3>CSS-Only Dropdown Delay</h3><p>Alternatively, you can achieve a delayed closing effect without JavaScript, using only modern CSS.</p><p><strong>Note</strong> This is an experimental technique that aims to showcase the power of modern<br>CSS, but it still doesn't work in all browsers and currently has a major<br>downside in Chrome—don't use it in production.</p><p>The dropdown menu show/hide interaction is created using the <code>display</code> property:</p><pre><code class="language-css">/* Hide the dropdown by default. */
.submenu {
  display: none;
  /* Plus properties related to positioning &#x26; styling. */
}

/* Show the dropdown when its parent menu item is hovered. */
.menu li:hover a + .submenu {
  display: flex;
}
</code></pre><p>Using <code>transition-behavior</code>, you can transition the <code>display</code> property and have it delay closing, mimicking the complex JavaScript behavior in a few lines of CSS.</p><pre><code class="language-css">/**
 * Delay the closing of the dropdown
 * menu on mouseout using only CSS.
 */
.submenu {
  transition: display 1s;
  transition-behavior: allow-discrete;
}
</code></pre><p>You can transition non-animatable properties using <code>transition-behavior: allow-discrete</code>; as there is no in-between state from <code>none</code> to <code>block</code> (or <code>flex</code>), the value will be flipped on transition-in before the start of the animation and on transition-out after the end of the animation, as defined in <code>transition-duration</code>, meaning that the dropdown will stay entirely visible until the transition finishes (<code>1s</code> in the example).</p><p>Unfortunately, this isn’t a viable option at the moment, as it doesn’t work in Firefox (Firefox doesn’t support transitioning <code>display</code> property yet), and it is severely bugged in Chrome, where the items in the dropdown become inaccessible when the <code>transition-delay</code> is triggered. This means that Safari is currently the only browser where this works as expected.</p><p>Additionally, we need to create the code to close the dropdown immediately when a user hovers over another top-level item. An approach I’ve been exploring is using <code>:has()</code> pseudo-class to set the transition to <code>none</code> (thus canceling the transition and changing the value immediately) when a top-level item is hovered over.</p><pre><code class="language-css">/**
 * Stop the transition when another menu item is hovered
 * by resetting the transition to `none`
 * on all menu items that are not hovered over,
 * but only when one of the menu items is in the state of hover
 */
.menu ul:has(> .li:hover) .li:not(:hover) .submenu {
  transition-property: none;
}
</code></pre><p>Unfortunately, this isn't a reliable approach as it doesn't work in Safari—it seems that the transition can't be interrupted once it starts.</p><p><a href="https://codepen.io/ZoranJambor/pen/emYeZXv?editors=0000" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/emYeZXv?editors=0000</a></p><p><em>A demo showing how CSS-only dropdown menu delay works, along with issues in various browsers.</em></p><p>This CSS-only solution will hopefully be supported cross-browser in the near future, but until then, you still need a bit of JavaScript to create a close delay effect for your dropdown menus.</p><h3>How to use <code>:has()</code> pseudo-class to add arrows on menu items with submenus</h3><p>You can utilize <code>:has()</code> to easily create an arrow that indicates an existing dropdown without adding additional classes to HTML.</p><pre><code class="language-css">/**
 * Add an arrow to menu items that have a submenu,
 * defined as `a` elements that have the next sibling `.submenu`
 */
.menu a:has(+ .submenu)::after {
  content: "▼";
  margin-left: 1em;
  font-size: 0.5em;
  position: relative;
  top: -0.2em;
}
</code></pre><p><img src="https://css-weekly.com/blog/top-5-css-navigation-menu-mistakes/images/has-arrow-indicator.png" alt="A screenshot of a navigation menu showcasing an arrow indicating a presence of a dropdown menu created using :has() pseudo-class." title="An arrow indicating a presence of a dropdown menu created using &#x60;:has()&#x60; pseudo-class."></p><h2>Mistake #5: Not animating anchor links</h2><p>The last of the common mistakes I usually see is using in-page anchor links without animating them.</p><p>By default, when you create an anchor link and tie it to a section on the page using an <code>id</code> attribute, the page will immediately jump to the target section once the user clicks it.</p><p>A much nicer and clearer experience is to scroll the page elegantly to the target section. You don’t even have to use JavaScript to handle this; there is a CSS property, <code>scroll-behavior</code>, that lets you define how the browser handles the scrolling when triggered by the navigation or CSSOM scrolling APIs.</p><p>You can set it to any element with a scrollable overflow; this would be the root element for the viewport (entire page).</p><pre><code class="language-css">/**
 * Enable smooth scroll for anchor links.
 */
html {
  scroll-behavior: smooth;
}
</code></pre><p>If you are using <code>scroll-behavior: smooth;</code>, you’ll want to make sure to provide an alternative experience to users who prefer an interface that removes, reduces, or replaces motion-based animations.</p><pre><code class="language-css">/**
 * Disable anchor link animations for
 * users who prefer less motion.
 */
@media (prefers-reduced-motion) {
  html {
    scroll-behavior: auto;
  }
}
</code></pre><p>Proving my point, Hashnode, the platform I’m using to publish this, should add <code>scroll-behavior: smooth;</code> to improve the experience for the <em>Table of contents</em> element linking to the sections of this article.</p><h2>Conclusion</h2><p>Most of the advice shared here is straightforward and obvious, but I still see many of these mistakes in the wild, so take this as a reminder that with just a few lines of CSS, you can make your navigation menus and UI much more user-friendly and usable.</p><p>As I’ve already mentioned, this is just a part of the story of creating good navigation menus. The other significant part that you shouldn’t ignore is accessibility, and I will cover this in a follow-up article where I’ll show you how to make dropdown menus accessible.</p><h2>Further Learning</h2><ul><li><a href="https://youtu.be/1VsMKz4Zweg">Animate to "height: auto;" &#x26; "display: none;" Using CSS Transitions Video</a></li><li><a href="https://youtu.be/idoaw75xjhU">Animate HTML Details &#x26; Summary Elements Using Pure CSS Video</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior">Transition Behavior on MDN</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior">Scroll Behavior on MDN</a></li></ul><img src="https://feedpress.me/link/24028/17256030.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Start Using Minimap Section Headers in VS Code</title>
      <link>https://feedpress.me/link/24028/17256031/start-using-minimap-section-headers-in-vs-code</link>
      <guid isPermaLink="true">https://css-weekly.com/start-using-minimap-section-headers-in-vs-code</guid>
      <description>Learn how to get the most out of Visual Studio Code minimap and turn it into a valuable, indispensable tool in your coding workflow.</description>
      <pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/og-image.jpeg" type="image/jpeg"/>
      <category>Article</category>
      <content:encoded><![CDATA[<p>Learn how to get the most out of Visual Studio Code minimap and turn it into a valuable, indispensable tool in your coding workflow.</p><div><div><iframe src="https://www.youtube.com/embed/9iv7P688AnY" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=9iv7P688AnY" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p>You’re likely more than familiar with the minimap in Visual Studio Code—it gives you a quick overview of the currently opened file, so you can easily jump to any part of the code you want to work on. But minimap is actually much more powerful than this. In this article, you’ll learn how to get the most out of it and make it actually useful beyond just being an oversized scrollbar.</p><p>The minimap has several customizable options, and you’ll find them in <em>Settings</em> under <em>”Text Editor → Minimap.”</em></p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/minimap-options.png" alt="VS Code screenshot showing the minimap options under Text Editor -> Minimap." title="You can find the minimap options in Settings, under Text Editor-> Minimap."></p><h2>How Minimap Section Headers Work</h2><p>Most minimap options are straightforward and clearly explained, so I’ll outline here the one option you might not be aware of: <strong><em>Section Headers.</em></strong></p><p><em>Section headers</em> allow you to display specially designated comments in the minimap, which makes it trivial to quickly find a specific section of your code. You can enable them by toggling the option <em>“Show Mark Section Headers.”</em></p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/show-mark-section-headers.png" alt="VS Code screenshot showing the minimap option Show Mark Section Headers." title="To enable Section Headers, toggle the minimap option “Show Mark Section Headers.”"></p><p>When enabled, any comment you add to your code designated with “<strong>MARK:</strong>” will be visible in the minimap. Note that the designation is case-sensitive, so it must be in uppercase to work.</p><br><hr><br><aside class="sponsorship"><span>// From Our Sponsor</span><br><br><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/ads/images/autonoma-stop-shipping-bugs1.png" alt="Autonoma — Stop shipping bugs" width="580" height="245"></a><div><h3><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">One CSS change broke checkout. Nobody noticed until users did.</a></h3><div><p>You rename a class, push to prod, and something breaks silently three pages away. Sound familiar? Autonoma spawns AI agents that test every user flow like a real person, catching overlapping buttons, broken interactions, and visual regressions before your users do.<img src="https://www.vpdae.com/open/24fe2e6f.gif?opens=1" width="1" height="1"></p><div><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">Find your first bug</a></div></div></div></aside><br><hr><br><p>Additionally, all characters after <em>MARK:</em> will be visible in the minimap, including the closing comment characters like <code>*/</code> or <code>--!></code>, so use them with single-line comments or format your comments in a way that comment opening and closing strings are on the separate lines. Keep this in mind when working with languages that only support multi-line comments, like CSS or HTML.</p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/section-headers-css.png" alt="VS Code screenshot showing what minimap section headers look like in a CSS file." title="An example of what minimap section headers look like in a CSS file."></p><p>You can tweak the styling of the section headers by adjusting <em>the "Section Header Font Size"</em> and <em>"Section Header Letter Spacing"</em> options. Depending on how you set up your minimap size (<em>Scale</em> option in settings), you'll want to tweak this and potentially increase the font size to make it more apparent.</p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/section-headers-bigger-font.png" alt="VS Code screenshot showing section headers with a bigger font size." title="An example of what minimap section headers look like with a bigger font size."></p><p>I like the font size set to <code>16</code> and the letter spacing to <code>0</code>. If you're using smaller font sizes, consider increasing letter spacing to make the section headers more readable.</p><h2>How Section Headers Work With Named Folding Regions</h2><p>Section headers in minimap also work with named folding regions. You can enable this option in minimap settings under <em>"Show Region Section Headers."</em></p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/show-region-section-headers.png" alt="VS Code screenshot showing the minimap option Show Region Section Headers." title="To enable named region Section Headers, toggle the minimap option “Show Region Section Headers.”"></p><p>Named regions allow you to collapse/expand a specific, arbitrary part of code, and they are created with a special comment that looks along the lines of <code>//#region</code> to designate the start of the region and <code>//#endregion</code> to designate the end of the region.</p><p><strong>Note</strong> You can find the list of folding range designations for different<br>languages in <a href="https://code.visualstudio.com/docs/editor/codebasics#_folding">VS Code Docs</a></p><p>Any string after the opening region designation will appear as a section header in the minimap.</p><p><img src="https://css-weekly.com/blog/start-using-minimap-section-headers-in-vs-code/images/named-folding-regions.png" alt="VS Code screenshot showing named folding regions in the minimap." title="An example of what minimap section headers look like in with a named folding range in a JavaScript file."></p><p>The downside of named folding regions is that they don't work in minimap as section headers for all languages. In CSS, you can create a named folding range, but its name will not appear in the minimap, at least not in the current version of <em>Visual Studio Code, 1.96.0</em>.</p><h2>Conclusion</h2><p>Using section headers can make your minimap more valuable, as they allow you to quickly jump to different parts of code. This can be especially useful in larger files or when you often jump between key parts of the code in one file.</p><p>Additionally, section headers can make your code more readable, as they'll force you to organize it into logical sections, improving your workflow and making you a bit more productive.</p><img src="https://feedpress.me/link/24028/17256031.gif" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Transition to <code>height: auto;</code> & <code>display: none;</code> Using Pure CSS]]></title>
      <link>https://feedpress.me/link/24028/17256032/transition-to-height-auto-display-none-using-pure-css</link>
      <guid isPermaLink="true">https://css-weekly.com/transition-to-height-auto-display-none-using-pure-css</guid>
      <description>Find out how to easily transition to intrinsic sizes and trigger transitions when an element receives its first style update using new CSS features.</description>
      <pubDate>Thu, 08 Aug 2024 00:00:00 GMT</pubDate>
      <author>Zoran Jambor</author>
      <enclosure url="https://css-weekly.com/blog/transition-to-height-auto-display-none-using-pure-css/images/og-image.jpeg" type="image/jpeg"/>
      <category>Article</category>
      <content:encoded><![CDATA[<p>Find out how to easily transition to intrinsic sizes and trigger transitions when an element receives its first style update using new CSS features.</p><div><div><iframe src="https://www.youtube.com/embed/1VsMKz4Zweg" width="560" height="315" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></iframe></div><a href="https://www.youtube.com/watch?v=1VsMKz4Zweg" target="_blank" rel="noopener noreferrer">▶ Watch on YouTube</a></div><p><strong>UPDATE, September 12, 2024:</strong> In the earlier version of this article, <code>calc-size</code> was used with a single<br>argument, like this: <code>calc-size(auto)</code>. This is no longer supported;<br><code>calc-size()</code> works only as a two-argument form, so the article and all demos<br>are updated to reflect this, and instead of <code>calc-size(auto)</code>, you should now<br>use <code>calc-size(auto, size)</code>.</p><p>CSS Transitions are the easiest way to add interactions on the web; all you need is an element in two different states with the <code>transition</code> property applied to its initial state, and the browser will smoothly animate the element between these two states.</p><p>The challenging part when working with CSS Transitions is dealing with intrinsic element sizes like <code>auto</code> and running transitions when an element receives its first style update—when it’s added to DOM, on page load, or when its display value changes from <code>none</code>. In this article and video, you’ll learn how to deal with both cases using upcoming CSS features: <code>calc-size()</code> function, <code>interpolate-size</code> property, <code>@starting-style</code> at-rule, and <code>transition-behavior</code> property.</p><p><strong>Note:</strong> The features mentioned in this article are experimental, subject to change,<br>and not yet ready for production. However, you can test them and use them as<br>progressive enhancements today.</p><h2>CSS Transition to intrinsic size (<code>height: auto;</code>)</h2><p>Let’s say you want to create a disclosure widget that expands an element from its initial, closed state (<code>height: 0;</code>) to an open state, showing all its content (<code>height: auto;</code>).</p><p>A simplified setup for this could look something like this:</p><pre><code class="language-css">.disclosure-widget {
  height: 0;
  transition: all 0.7s ease-in-out;
}

.disclosure-widget[open] {
  height: auto;
}
</code></pre><p>Initially, the widget is in a closed state with <code>height: 0;</code>, and when the attribute <code>open</code> is present on the HTML element, the widget expands to its content-based height. As the <code>transition</code> property is defined on the widget, it would be reasonable to assume that this switch between states will be animated, but it doesn’t work.</p><p><a href="https://codepen.io/ZoranJambor/pen/rNEwVjz/c4cf9c533985e001a47a4f31cc287199" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/rNEwVjz/c4cf9c533985e001a47a4f31cc287199</a></p><p><em>This element’s height is expected to be smoothly animated as the <code>transition</code> property is set, but it doesn't work.</em></p><p><strong>Note:</strong> The <code>height</code> property is used in the examples for clarity and simplicity, but you should be using its logical equivalent, <code>block-size</code>. If you want to learn more about logical properties, check out my video, <a href="https://youtu.be/cV9JhEV4Ll0">Guide to Logical CSS Properties</a>.</p><p>The animation doesn’t happen because browsers don’t support the transition to intrinsic sizing keywords such as <code>auto</code> or <code>min-content.</code> The new <code>interpolate-size</code> property and <code>calc-size()</code> function will allow you to circumvent this and perform math on intrinsic sizes in a safe, well-defined way.</p><br><hr><br><aside class="sponsorship"><span>// From Our Sponsor</span><br><br><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer"><img src="https://css-weekly.com/ads/images/autonoma-stop-shipping-bugs1.png" alt="Autonoma — Stop shipping bugs" width="580" height="245"></a><div><h3><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">One CSS change broke checkout. Nobody noticed until users did.</a></h3><div><p>You rename a class, push to prod, and something breaks silently three pages away. Sound familiar? Autonoma spawns AI agents that test every user flow like a real person, catching overlapping buttons, broken interactions, and visual regressions before your users do.<img src="https://www.vpdae.com/open/24fe2e6f.gif?opens=1" width="1" height="1"></p><div><a href="https://www.vpdae.com/redirect/j1reb0nj78628ak3okl04m27sut" target="_blank" rel="noopener noreferrer">Find your first bug</a></div></div></div></aside><br><hr><br><h3>CSS <code>calc-size()</code> function</h3><p>The <code>calc()</code> CSS function lets you perform calculations when specifying CSS property values, with one of the best features being that you can mix various data types, like pixels and percentages. For example, <code>width: calc(90% - 10px);</code> will give you exactly the value you’re looking for, 90% of the screen width reduced by 10px.</p><p>The downside of <code>calc()</code> is that it doesn’t support calculations on intrinsic sizing keywords, including <code>auto</code>, and that’s precisely why the new <code>calc-size()</code> function was introduced—to allow calculations and thus transitions and animation to or from intrinsic sizes.</p><blockquote><p>The CSS <code>calc-size()</code> function is a CSS function similar to <code>calc()</code>, but that also supports operations on exactly one of the values <code>auto</code>, <code>min-content</code>, <code>max-content</code>, <code>fit-content</code>, <code>stretch</code>, or <code>contain</code>, which are the intrinsic sizing keywords. This allows transitions and animations to and from these values (or mathematical functions of these values), as long as the <code>calc-size()</code> function is used on at least one of the endpoints of the transition or animation to opt in.</p><p><a href="https://github.com/w3c/csswg-drafts/blob/main/css-values-5/calc-size-explainer.md">Explainer: calc-size() function for transitions and animations to/from intrinsic sizes</a></p></blockquote><p>The <code>calc-size</code> function takes two arguments. The first argument is the <em>basis</em>, and the second argument is the <em>calculation</em>, where the passed <em>basis</em> argument, is available as the <code>size</code> keyword. This means we can rewrite our rule as <code>height: calc-size(auto, size);</code>, and our transition should immediately work:</p><pre><code class="language-css">.disclosure-widget[open] {
  height: calc-size(auto, size);
}
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/gONRzbG/76f6397d24217197860fd5267751b61b" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/gONRzbG/76f6397d24217197860fd5267751b61b</a></p><p><em>Passing the <code>auto</code> keyword in <code>calc-size()</code> enables the browser to animate the transition.</em></p><p>The <code>calc-size()</code> is not supported in all browsers, so as a fallback, you can leave the <code>height</code> declaration from the original example in the code—in which case, browsers that don’t support <code>calc-size()</code> will ignore its declaration and fallback to <code>height: auto;</code>:</p><pre><code class="language-css">.disclosure-widget[open] {
  height: auto;
  height: calc-size(auto, size);
}
</code></pre><p>The second, <em>calculation</em> argument lets you perform any calculations you can with <code>calc()</code>, including calculations on intrinsic sizes: <code>calc-size(auto, size + 50px)</code> .</p><h3>CSS <code>interpolate-size</code> property</h3><p>The <code>calc-size()</code> function does solve our transitioning problems with intrinsic sizes (including <code>height: auto;</code>), but it still feels like a hack unless you’re trying to do an actual calculation.</p><p>That's precisely why we got the <code>interpolate-size</code> property, which lets you choose the interpolation behavior and decide for yourself if you want the browser to interpolate intrinsic sizes.</p><p>The default value is <code>numeric-only,</code> which is the behavior you’re familiar with, where only transitions and animations to numeric values (like <code>250px</code>) work. The new value you can use is <code>allow-keywords</code>, which will, as it clearly states, let you interpolate between keyword values.</p><p>To enable this new animation behavior, specify the <code>interpolate-size</code> on the <code>:root</code> element to opt-in to the new behavior for the entire page:</p><pre><code class="language-css">:root {
  interpolate-size: allow-keywords;
}
</code></pre><p>Of course, you can restrict it to elements that you want, but even <a href="https://drafts.csswg.org/css-values-5/#interpolate-size">W3C specification</a> suggests you enable the new behavior for the entire page:</p><blockquote><p>Specifying <code>interpolate-size: allow-keywords</code> on the root element chooses the new behavior for the entire page. We suggest doing this whenever compatibility isn’t an issue.</p></blockquote><p>Once we set <code>interpolate-size</code> to <code>allow-keywords</code> in our demo, we can remove the <code>calc-size()</code> function and only use the value <code>auto</code>.</p><p><a href="https://codepen.io/ZoranJambor/pen/eYwRjoX/1a2a5121d82f1833dc0591590dd05e7a" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/eYwRjoX/1a2a5121d82f1833dc0591590dd05e7a</a></p><p><em>Specifying <code>interpolate-size: allow-keywords;</code> on the <code>:root</code> element enables the new animation behavior for the entire page.</em></p><p>It will work precisely as expected, exactly as it should have worked from the start when we got CSS Transitions. A similar stance is represented in <a href="https://drafts.csswg.org/css-values-5/#propdef-interpolate-size">W3C Editor’s Draft CSS Values and Units Module Level 5</a>:</p><blockquote><p>If we had a time machine, this property wouldn’t need to exist. It exists because many existing style sheets assume that intrinsic sizing keywords (such as <code>auto</code>, <code>min-content</code>, etc.) cannot animate. Therefore this property exists to allow style sheets to choose to get the expected behavior.</p></blockquote><h3>Browser support for CSS <code>interpolate-size</code> property and <code>calc-size()</code> function</h3><p>The <code>calc-size()</code> function and <code>interpolate-size</code> property are supported by default in Chrome 129.</p><p>Neither <code>calc-size()</code> nor <code>interpolate-size</code> works in Safari or Firefox, but there are open issues on GitHub for both Firefox and Safari, so hopefully, we'll see these features in Baseline soon.</p><p><strong>Features status by vendor:</strong><br><a href="https://groups.google.com/a/chromium.org/g/blink-dev/c/FjyMSSaSPEg/m/yzlLscFKBQAJ?pli=1">Blink</a> - Shipping on desktop 128<br><a href="https://github.com/WebKit/standards-positions/issues/348">WebKit</a> - Unknown<br><a href="https://github.com/mozilla/standards-positions/issues/1022">Mozilla</a> - Unknown</p><p>You can check if the browser supports <code>calc-size()</code> and <code>interpolate-size</code> using the <code>@supports</code> at-rule:</p><pre><code class="language-css">/* Check calc-size() function support */
@supports (height: calc-size(auto, size)) {
  /* ... */
}

/* Check interpolate-size property support */
@supports (interpolate-size: allow-keywords) {
  /* ... */
}
</code></pre><h3>Workaround with JavaScript</h3><p>As neither <code>calc-size()</code> nor <code>interpolate-size</code> are part of Baseline, you will need to use a workaround to transition to intrinsic size if you want to see animations in production.</p><p>One reliable workaround is to calculate the element size in JavaScript and then set that exact number as the container height instead of the keyword <code>auto</code>—in this case, CSS Transitions will work, as you’ll circumvent intrinsic sizes with numbers.</p><p>In CSS, you only need to set the widget <code>height</code> and its <code>transition</code>:</p><pre><code class="language-css">.disclosure-widget {
  height: 0;
  transition: all 0.7s ease-in-out;
}
</code></pre><p>In JavaScript, first, get the widget’s closed state height (because it could be different from <code>0</code>), then set the <code>height</code> to <code>auto</code> to force content-sized dimensions, get the element’s height and store it, and lastly, return the widget to its initial height:</p><pre><code class="language-javascript">// Get page elements
const toggle = document.querySelector(".toggle");
const widget = document.querySelector(".disclosure-widget");

// Widget State
let isOpen = false;

// Get the widget open/closed height
const closedHeight = widget.style.height;
widget.style.height = "auto";
const openHeight = widget.offsetHeight + "px";
widget.style.height = closedHeight;

// Handle widget state switch
toggle.addEventListener("click", (e) => {
  let height = isOpen ? closedHeight : openHeight;

  widget.toggleAttribute("open");
  widget.style.height = height;
  isOpen = !isOpen;
});
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/LYKLepZ/930f4ada9257b219d2e17cf6c520e0d6" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/LYKLepZ/930f4ada9257b219d2e17cf6c520e0d6</a></p><p><em>This JavaScript-based solution works in all modern browsers and doesn’t require extra markup in HTML.</em></p><p>The downsides of this approach are more complexity in JavaScript and potential performance penalties, as calculating the correct size of the element requires forcing extra layouts to happen.</p><h3>Workaround with CSS Grid</h3><p>There is also an alternative approach using CSS Grid and fraction units to get around this issue. As CSS Grid and its <code>fr</code> units are animatable, you can set the closed state of <code>grid-template-rows</code> to <code>0fr</code> and then transition the open state to <code>1fr</code>. As long as you have only one row in your grid, <code>1fr</code> will take the entirety of available space, which translates exactly to the <code>auto</code> value.</p><p>This is how the setup could look:</p><pre><code class="language-css">.disclosure-widget {
  display: grid;
  grid-template-rows: 0fr;
  overflow: hidden;
  transition: all 0.7s ease-in-out;
}

.disclosure-widget__container {
  min-height: 0;
}

.disclosure-widget[open] {
  grid-template-rows: 1fr;
}
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/abgwVEr/ba5b0e1b4b96cdcd6d9aaa8bd48d7e40" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/abgwVEr/ba5b0e1b4b96cdcd6d9aaa8bd48d7e40</a></p><p><em>This CSS Grid-based solution works in all modern browsers.</em></p><p>The downsides of this approach are that you need an extra element in HTML as a container, and you’re forced to opt-in to CSS Grid even if you don’t really need it.</p><h2>CSS Transition from <code>display: none;</code></h2><p>Another challenge related to transitioning from <code>height: 0;</code> to <code>height: auto;</code> is that often, in real-world scenarios, you’ll want this transition to happen at the moment the element receives its first style update—on page load, when it’s added to DOM, or when its <code>display</code> property changes from <code>none</code>.</p><p>Let’s update our <code>calc-size()</code> example so that in the hidden state, the element is not only visually hidden but also hidden from screen readers using <code>display: none;</code>.</p><pre><code class="language-css">.disclosure-widget {
  display: none;
  height: 0;
  transition: all 1s ease-in-out;
}

.disclosure-widget[open] {
  display: block;
  height: auto;
  height: calc-size(auto, size);
}
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/oNrwPQG/3e0e601693327646b5ba468f384d261a" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/oNrwPQG/3e0e601693327646b5ba468f384d261a</a></p><p><em>After adding <code>display: none;</code> to the hidden state, the animation no longer works.</em></p><p>As you might have expected, the transition (animation) is no longer working because the display is not an animatable property, meaning it can’t gradually be flipped from <code>none</code> to <code>block</code>. When the transition occurs, the value changes immediately, and the element disappears without transition. Likewise, the element is not animated on animation-in because CSS Transitions are not triggered on an element's initial style update—when its <code>display</code> changes from <code>none</code> to another value.</p><p>Let’s work around both of these issues with new CSS additions, the <code>@starting-style</code> at-rule, and the <code>transition-behavior</code> property.</p><h3>CSS <code>@starting-style</code> at-rule</h3><p>You can use <code>@starting-style</code> at-rule to enable transitions when the <code>display</code> value changes or when an element is first added to the page.</p><p>Within the <code>@starting-style</code> block, you simply need to specify the rules from which you want the transition to start. This is necessary because the elements that are first-time added to the page don’t have a previous state, so there is nothing from which the browser can create a transition to the state you want.</p><p>For our example, the only value we want to transition is <code>height</code>, so our <code>@starting-style</code> will look like this:</p><pre><code class="language-css">.container[open] {
  height: calc-size(auto, size);
  display: block;

  @starting-style {
    height: 0;
  }
}
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/poXwOGo/8766d670276e4dcabd012f1b3489c8e0" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/poXwOGo/8766d670276e4dcabd012f1b3489c8e0</a></p><p><em>With initial styles specified in <code>@starting-style</code> at-rule, the browser can animate the transition on the first style update—when the <code>display</code> value changes from <code>none</code>.</em></p><p>The <code>@starting-style</code> at-rule can be used as a standalone rule or nested within a ruleset. In the previous example, we nested it directly within our selector. If you want to use it as a standalone rule, you need to specify the selector for which it should be applied:</p><pre><code class="language-css">@starting-style {
  .container[open] {
    height: 0;
  }
}
</code></pre><p>The <code>@starting-style</code> at-rule doesn’t increase the specificity—it has the same specificity as the original rule, so make sure you include it after your original rule to avoid the situation where your original rule overrides it.</p><h3>CSS <code>transition-behavior</code> property</h3><p>The <code>@starting-style</code> at-rule fixes our transition-in problem, but transition-out is still not working. As mentioned, <code>display</code> isn’t an animatable property, so its value is immediately flipped from <code>block</code> to <code>none</code> when the transition starts—hiding the animation.</p><p>That’s where the <code>transition-behavior</code> property comes in. It lets you specify if transitions should be started for properties that aren’t animatable; specifically for properties whose animation behavior is discrete, like <code>display</code> and <code>content-visibility</code>.</p><p>Possible values for <code>transition-behavior</code> are <code>normal</code> and <code>allow-discrete</code>. The <code>normal</code> value means that transitions won’t be started for discrete properties, and it’s the default behavior.</p><p>If we change the <code>transition-behavior</code> in our example to <code>allow-discrete</code>, our transition-out will work as expected:</p><pre><code class="language-css">.disclosure-widget {
  display: none;
  height: 0;
  transition: all 0.7s ease-in-out;
  transition-behavior: allow-discrete;
}
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/gONRdEB/0e7e11faa4b43bd49e701c1f7f9b61fe" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/gONRdEB/0e7e11faa4b43bd49e701c1f7f9b61fe</a></p><p><em>Specifiying <code>transition-behavior: allow-discrete;</code> tells the browser to start transitions for non-animatable properties.</em></p><p>The <code>transition-behavior: allow-discrete;</code> changes the behavior of the <code>display</code> property by flipping its value at the end of the transition so that the animation has time to happen before the element ‘disappears.’</p><p>The thing to note is that you need to specify the transition on the discrete property as well. In our example, we’ve used the <code>all</code> keyword, which includes all properties. However, if we switch this to only <code>height</code>, <code>transition-behavior</code> won’t have any effect because we’re not transitioning the <code>display</code> property. Only when we specifically add it as a <code>transition-property</code> will the <code>transition-behavior</code> apply to it.</p><p>If we rewrite our <code>transition</code> from the shorthand values, this is how it would look:</p><pre><code class="language-css">.disclosure-widget {
  display: none;
  height: 0;
  transition-property: height, display;
  transition-duration: 0.5s;
  transition-timing-function: ease-in-out;
  transition-behavior: allow-discrete;
}
</code></pre><p>You can use the <code>@starting-style</code> at-rule and <code>transition-behavior</code> property combo any time you want to apply a transition to elements that are injected into DOM or on page load and with all disclosure widgets (native or custom) like Dialog, Popover, and so on.</p><h3>Browser support for CSS <code>@starting-style</code> at-rule and <code>transition-behavior</code> property</h3><p>The <code>@starting-style</code> at-rule is supported in stable versions of Chrome, Edge, Safari, and Firefox.</p><p>The <code>transition-behavior</code> property is supported in stable versions of Chrome and Edge but not in Safari and Firefox. It should ship in Safari 18, but there is no indication when it will be available in Firefox.</p><p>There is a problem with the current version of Firefox, version 129. The <code>@starting-style</code> at-rule doesn’t support animating from <code>display: none;</code>, so in this case, the transition-in in our demo will not be animated in Firefox.</p><p>Still, you can use both new features immediately as progressive enhancement. In the browsers that support those properties, users will see nice, animated transitions, and in the browsers that don’t support them, disclosure widgets will be functional, just not animated.</p><p>You can check if the browser supports <code>transition-behavior</code> using the <code>@supports</code> at-rule:</p><pre><code class="language-css">/* Check transition-behavior property support */
@supports (transition-behavior: allow-discrete) {
  /* ... */
}
</code></pre><p>Detecting <code>@starting-style()</code> support is not that necessary as the feature is already in Baseline, and it’s a bit more complicated, as <code>@supports</code> still can’t detect at-rules. Once the browsers implement at-rule support detection, you’ll be able to test it like this:</p><pre><code class="language-css">/* Check @starting-style() at-rule support */
@supports at-rule(@starting-style) {
  /* ... */
}
</code></pre><h3>Workaround with JavaScript</h3><p>An alternative solution, if you don’t want to use <code>transition-behavior</code> as progressive enhancement, is to switch the display value after the transition finishes using JavaScript.</p><p>Even though the <code>@starting-style</code> at-rule is supported in all modern browsers, for simplicity and clarity, we’ll handle both cases manually:</p><pre><code class="language-javascript">// Get page elements
const toggle = document.querySelector(".toggle");
const widget = document.querySelector(".disclosure-widget");

// Widget state
let isOpen = false;

// Set display to "block" immediately after clicking
// the button before adding the "open" attribute
// to ensure the CSS transition happens
toggle.addEventListener("click", (e) => {
  if (isOpen === false) {
    widget.style.display = "block";
  }

  // Ensure the display is switched before
  // the "open" attribute is toggled
  requestAnimationFrame(() => {
    widget.toggleAttribute("open");
  });

  // Click always toggles the state
  isOpen = !isOpen;
});

// At the end of the transition,
// when the widget is closed,
// hide it by changing the display value
widget.addEventListener("transitionend", (event) => {
  // We only want to trigger this on the close transition
  if (isOpen === false) {
    widget.style.display = "none";
  }
});
</code></pre><p><a href="https://codepen.io/ZoranJambor/pen/wvLeOYr/beaf789d3432264a492e84dcf774804f" target="_blank" rel="noopener noreferrer">https://codepen.io/ZoranJambor/pen/wvLeOYr/beaf789d3432264a492e84dcf774804f</a></p><p>On animation-in, we switch the <code>display</code> property to <code>block</code> and wait using <code>requestAnimationFrame</code> until the next tick of the event loop to flip the <code>open</code> attribute and trigger the CSS Transition.</p><p>On animation-out, we wait for the transition to end using the <code>transitioned</code> event and only then switch the <code>display</code> to <code>none</code> to give the browser time to finish the transition before we hide the element.</p><h2>Conclusion</h2><p>Hopefully, this gives you an idea of how new CSS features can simplify your code by entirely removing Javascript requirements, allowing you to create smooth interactive widgets with just a few lines of CSS.</p><p>With the <code>interpolate-size</code> property and <code>calc-size()</code> function, you can animate transitions to intrinsic sizes (most notably to <code>height: auto;</code>).</p><p>The <code>transition-behavior</code> property and <code>@starting-style</code> at-rule let you use transitions for elements that are added to the page or removed from the DOM and for elements that are hidden from screen readers using <code>display: none;</code> or <code>content-visibility: hidden;</code>.</p><h3>Further Reading</h3><ul><li><a href="https://youtu.be/cV9JhEV4Ll0">Guide to Logical CSS Properties</a></li><li><a href="https://github.com/w3c/csswg-drafts/blob/main/css-values-5/calc-size-explainer.md">Explainer: calc-size() function for transitions and animations to/from intrinsic sizes</a></li><li><a href="https://drafts.csswg.org/css-values-5/#calc-size">CSS Values and Units Module Level 5: Calculating With Intrinsic Sizes</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style">The @starting-style at-rule on MDN</a></li><li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior">The transition-behavior property on MDN</a></li></ul><img src="https://feedpress.me/link/24028/17256032.gif" height="1" width="1"/>]]></content:encoded>
    </item>
  </channel>
</rss>
