<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/rss/style.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web Weekly</title>
    <description>A weekly newsletter about web development, tooling, and the latest trends in the web platform.</description>
    <link>https://webweekly.email</link>
    <atom:link href="https://webweekly.email/rss.xml" rel="self" type="application/rss+xml"/>
    <language>en-us</language>
    <lastBuildDate>Fri, 08 May 2026 06:56:38 GMT</lastBuildDate>
    <managingEditor>stefan@stefanjudis.com (Stefan Judis)</managingEditor>
    <webMaster>stefan@stefanjudis.com (Stefan Judis)</webMaster>
    <generator>Web Weekly Archive Script</generator>
    <item>
      <title>Web Weekly #190</title>
      <link>https://webweekly.email/archive/web-weekly-190/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-190/?ref=ww-rss</guid>
      <pubDate>Sun, 19 Apr 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #190 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Do you use <code>image-set</code> for background images in CSS? Have you used Wakamai Fondue to analyze your variable fonts? And do you know that <code>field-sizing</code> isn't only about textareas?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Jesper listens to <a href="https://www.youtube.com/watch?v=hmod5vTY8fM">Yttling Jazz — &quot;Illegal Hit&quot;</a> and says:</p>
<blockquote>
<p>This is a song that helps me keep my head up during winter and look forward to spring!
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>three more songs</strong> left in the queue.</p>
<hr>
<p>Let's kick things off with some quick-to-read accessibility resources that didn't fit elsewhere!</p>
<p>Not new, but still relevant: Adrian shared <a href="https://adrianroselli.com/2025/06/where-to-put-focus-when-opening-a-modal-dialog.html">Where to Put Focus When Opening a Modal Dialog</a>. It comes with the banger opener:</p>
<blockquote>
<p>Blanket statements about where to put focus when opening a modal dialog are wrong, including this one.</p>
</blockquote>
<p>I also discovered <a href="https://html5accessibility.com/stuff/2026/04/07/old-advice-hiding-content-has-no-effect-on-accessible-name-or-description-calculation/">Steve's post explaining that hidden content still makes it into the computation of an element's accessible name</a>. This fact is important when you're connecting error messages with <code>aria-describedby</code> and hiding a possible error with <code>display: none</code>. The error won't be visible, but it'll still be part of the accessible name computation. Not good.</p>
<p>And lastly, Manuel reminds us all that <a href="https://matuzo.at/blog/2026/box-shadow-no-alternative-to-outline"><code>box-shadow</code> isn't an alternative to a proper outline</a>! Let's stick to the defaults.</p>
<p>I'll share some more accessibility resources next week. Is there anything great I should include?</p>
<hr>
<p>A big thank you and a huge bag of karma points go to Daniel who provided a new testimonial! If you have something nice to say about Web Weekly or want to <strong>support indie publishing in the times of cheap AI slop</strong>, reach out.</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. We're currently at 40 supporters, and I'd love to hit the magical <code>50</code>. ❤️</p>
<p>And if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mjxc2ukwpr2u">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116438880532760236">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-190-just-went-out-this-one-share-7452088945892536320-8GoJ">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps my indie newsletter out. Thank you!</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Build any web layout, with confidence.</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4hSNv1feU9HaRiApSZnKfs/f3f09de31453b7e795abbf0ebf8cb54a/web-weekly.png" alt="Build any web layout, with confidence. A practical written CSS course that teaches you how to think, build and debug web layouts."></p>
<p>The Layout Maestro is a written, interactive CSS course that teaches you how to think, build, and debug layouts, not just memorize properties. It covers <code>flexbox</code>, <code>grid</code>, <code>:has()</code>, and container queries. Use the coupon code <code>WEBWEEKLY</code> for $50 off.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://thelayoutmaestro.com?utm_source=webweekly&quot;&gt;Level up your layout game&lt;/a&gt;</p>
<p>Side note from me: I plug Ahmad's interactive blog posts from time to time, and looking at all the outstanding resources he's published over the years, I'm sure this course is more than worth it!
:::</p>
<h2>Something that made me smile this week</h2>
<p>Jack learned that there are &quot;only&quot; 84k Firefox extensions out there and thought &quot;Challenge accepted. I'm gonna install them all!&quot; while documenting his journey.</p>
<blockquote>
<p>YOU CAN (barely) RUN FIREFOX WITH ALL 84 THOUSAND EXTENSIONS.</p>
</blockquote>
<p>Who would have guessed. 😅 Man, I love the internet.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jack.cab/blog/every-firefox-extension&quot;&gt;Install them all&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://newsletter.manager.dev/p/the-unwritten-laws-of-software-engineering">The unwritten laws of software engineering</a> → &quot;It took me embarrassingly long to learn that when production breaks and you recently deployed <em>anything</em>, you shouldn’t spend an hour proving your change is innocent...&quot;</li>
<li><a href="https://quinnkeast.com/writing/software-is-problem-ownership">What, then, are we paying for?</a> → &quot;Paying for software isn’t paying for a solution. It’s paying for someone else to own a problem.&quot;</li>
</ul>
<h2>Analyze your font's features set</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2qxSIldocbyn9cHFu5gddT/f76fd94f99ac15c0abc1793b7b2d2f0c/Screenshot_2026-04-18_at_09.04.26.png" alt="Wakamai Fondue landing page with a bold &quot;Drop a font&quot; in the middle."></p>
<p>You know, I'm no font or typography nerd but occasionally I need to inspect what features are included in a font. Font features? Yes! There are variable font axes controlled via <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-variation-settings"><code>font-variation-settings</code></a> or open type features controlled via <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-feature-settings"><code>font-feature-settings</code></a>.</p>
<p>But how can you inspect a font and know what you can do with it? Well, <strong>Wakamai Fondue</strong> just hit <code>v1.0</code>, and it looks great!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://wakamaifondue.com/&quot;&gt;Get nerdy about fonts&lt;/a&gt;</p>
<h2>More view transition tools and resources</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2zsUfK4TSVHFiLqWhepRZp/154b4f9a2e8b6cff3578f3446a1793b6/Screenshot_2026-04-19_at_21.53.16.png" alt="The bag of tricks for view transitions."></p>
<p>After plugging <a href="https://webweekly.email/archive/web-weekly-188/#the-view-transitions-toolkit">Bramus' View Transition Toolkit</a> two weeks ago, people pointed me to the &quot;View Transition Bag&quot;. It includes plenty of resources and yes, view transition tools are included, too!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://vtbag.dev/&quot;&gt;Level up your transitions&lt;/a&gt;</p>
<h2>Modern features misbehaving in the shadow DOM</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3AH701IY3cEDvB7Jed4twM/ddcbfd73eac877b0ca6811e529a38544/Screenshot_2026-04-19_at_09.15.58.png" alt="Modern CSS Feature Support For Shadow DOM – Tracking the state of support for CSS features within and across the shadow DOM to provide visibility into feature parity, usage details, and outstanding issues and bugs."></p>
<p>Granted, it's been a minute since I've used the shadow DOM with web components, but today I learned that there are quite a few issues with modern web features when crossing the boundaries.</p>
<blockquote>
<p>For example, cascade layers, container queries, @scope, and @property can behave differently between light and shadow DOM.</p>
</blockquote>
<p>The team behind Adobe Spectrum started documenting some common issues.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://shadow-dom-css.adobe.com/&quot;&gt;Know what works&lt;/a&gt;</p>
<h2><code>sizes=auto</code> requires <code>width</code> and <code>height</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6zxpLcNtn8b3C6vCyk0ryG/6dd8b1c9cb58a57573ba141c898c219d/Screenshot_2026-04-19_at_14.16.33.png" alt="In short: in addition to requiring loading=lazy, sizes=auto also basically requires that &lt;img&gt; elements have width and height attributes."></p>
<p>Here's a quick addition from <a href="https://webweekly.email/archive/web-weekly-189/#soon-on-the-baseline---sizes%3Dauto">last week's <code>sizes=auto</code> update</a>. I'm still super excited about it and Eric reminds us that you need to define <code>width</code> and <code>height</code> attributes. You probably do that anyways, but I thought it'd be good to share that with you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://ericportis.com/posts/2023/auto-sizes-pretty-much-requires-width-and-height/&quot;&gt;Help the layout&lt;/a&gt;</p>
<h2>Smart: using fallback values to work around layer clashes</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4O5nROG93p99lan5yinhmj/2df0d3b1b6b3edc9cd30af1bbd74cd36/Screenshot_2026-04-17_at_08.37.20.png" alt="@layer utility {   .font-brand {     letter-spacing: var(--letter-spacing, 20%);   } }"></p>
<p>David uses cascade layers and has run into a problem. The style requirements were colliding with the defined layer order. He used a smart trick to work around clashing layers.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dbushell.com/2026/04/15/containment-breach-in-cascade-layer/&quot;&gt;Keep things flexible&lt;/a&gt;</p>
<p><em>Side note: David also shared that <code>!important</code> works across layer boundaries. Can someone explain that to me?</em></p>
<h2>The wonderful weird web – Train Jazz</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5ho1nWKqzrGEw09xnRWZTg/15edb8b5ee1befa5aa01ff27cb13a02c/Screenshot_2026-04-18_at_09.11.40.png" alt="A train map of NYC showing the differing train lines."></p>
<p>Unfortunately, the Train Jazz doesn't work for Berlin (does it work for your city?). The site plays jazz music depending on a city's train/subway data. Is this very useful? Probably not, but I love everything about this! ❤️</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.trainjazz.com/&quot;&gt;Listen to some trains&lt;/a&gt;</p>
<h2>A nifty flexbox trick</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7AjTjitF0X2RSFWuHLtKrj/c773519f442d5f19dec7850e151e1652/Screenshot_2026-04-19_at_21.48.59.png" alt="main {   /* main gets priority + readable minimum */   flex: calc(infinity) 1 360px; }"></p>
<p>Granted, the title of this blog post is a bit misleading (container queries using break points still use... breakpoints), but I enjoyed this little flexbox snippet! 👆</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/building-a-ui-without-breakpoints/&quot;&gt;Flex!&lt;/a&gt;</p>
<h2>Squashing and stretching animations</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Pqw1Wa2viHomidRpTJWz6/f4ead461f2a66f3894da52b218cca15b/Screenshot_2026-04-19_at_13.44.12.png" alt="    .btn:hover .shaft,     .btn:focus-visible .shaft {       d: path(&quot;        M 5,12        h 17      &quot;);     }"></p>
<p>Josh published a new post, and we all know what this means. There's a new high-quality post available including lots of demos and eye candy. I must admit I've forgotten about the ability to overwrite the SVG <code>d</code> attribute in CSS and am still on the fence about whether that's a good idea. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshwcomeau.com/animation/squash-and-stretch/&quot;&gt;Apply animation principles&lt;/a&gt;</p>
<h2>Make interfaces feel better</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7ECEPTKhXHB3cVUpDhMGkE/712a2113d34f721d65f387dcf8afe95b/guides.gif" alt="Component showing how calculated nested border radii look better."></p>
<p>Granted, everything in this post is also packaged up as an AI skill, but the advice on building good-looking UIs is solid. I wasn't aware of this little <code>outline</code> trick at the end.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jakub.kr/writing/details-that-make-interfaces-feel-better&quot;&gt;Polish your interfaces&lt;/a&gt;</p>
<h2>Why do some images look brighter than the rest?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1pP52pbC7o4T53PworE01v/c46db8b18930a55af4759d57dc9bde38/Screenshot_2026-04-18_at_08.25.52.png" alt="Three images of a cat. HDR and Ultra HDR look much brighter than normal."></p>
<p>Tom came out of nowhere and finally explained to me why some images on my Mac are glaring on my screen. There are chances you haven't seen what I'm talking about, but for me on my MacBook Pro using the Signal App (it must be Electron-based), sometimes I receive a photo and it almost feels like the rest of the screen is getting darker because the image is so bright. Turns out, some hardware/software combinations simply display HDR images. Wow!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://tn1ck.com/blog/abuse-hdr-images-for-marketing&quot;&gt;Understand images&lt;/a&gt;</p>
<h2>Random MDN – <code>transition-behavior</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6p5oIRrDOHTcQnyAZKUjZb/fe3320aad6aac7255ab886cf1d1cd992/Screenshot_2026-04-19_at_13.47.08.png" alt=".card {   transition-property: opacity, display;   transition-duration: 0.25s;   transition-behavior: allow-discrete; }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Everybody was talking about <code>transition-behavior</code> a year ago. Do you use it? The CSS property allows you to finally combine property transitions including <code>display</code>. And the best thing, it's been on the baseline since 2024!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/transition-behavior&quot;&gt;Change the behavior&lt;/a&gt;</p>
<h2>TIL recap – <code>field-sizing</code> doesn't only work for <code>textarea</code>s</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5snz6kvGnq4ARrDw52q038/9b4110573dff01245f4c7d3275927f38/field-sizing.gif" alt="An input, a select and a textarea all resizing depending on their content."></p>
<p><code>field-sizing</code> enables textareas to automatically grow. And that's great, but do you know that it works for &quot;normal&quot; inputs and <code>select</code> boxes, too?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/field-sizing-is-about-more-than-textareas/&quot;&gt;Resize your elements&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6HTDVNdRdV6aQQnKjjyIJG/2220d17e2b97913d90ad1df1654631cc/Screenshot_2026-04-19_at_22.24.24.png" alt=".box {   background-image: image-set(     url(&quot;https://.../small-image.jpg&quot;)       1x,     url(&quot;https://.../bigger-image.jpg&quot;)       2x   ); }"></p>
<p>After including baseline updates for quite a while here, I realized I'm riding pretty much on the cutting edge. And many folks are also interested in the baseline &quot;widely available&quot; updates. So here we go!</p>
<p>Do you know that you can use <code>image-set</code> to serve different background images right in CSS? Now you do and <code>image-set</code> is &quot;widely available&quot; since last month! 🎉</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/image/image-set&quot;&gt;Be responsive&lt;/a&gt;</p>
<p>And I'm sorry but I can't help it and I know you're also waiting for some cutting-edge stuff: <a href="https://www.firefox.com/en-US/firefox/151.0a1/releasenotes/#note-791582">the team over at Mozilla added container style queries support to Firefox Nightly</a>, which means it's slowly time to start looking into them. Bam!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/thoughtfulllc/gridland">thoughtfulllc/gridland</a> – Terminal apps that run anywhere - even the browser!</li>
<li><a href="https://github.com/getelena/elena">getelena/elena</a> – A simple, tiny library for building Progressive Web Components.</li>
<li><a href="https://github.com/meodai/heerich">meodai/heerich</a> – An engine for 3D voxel scenes rendered to SVG. 👈 That one's very fancy!</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/24JlBFKh07nLB3va5JfQwA/462a1dd92fd8eb28bd68dbf71afcbbfe/Screenshot_2026-04-19_at_21.58.13.png" alt="Two vector graphics of Chris Coyier."></p>
<p>Now, I'm not sure if it's a good idea to have <a href="https://codepen.io/t_afif/full/qEaLagJ">complex vector graphics like the above</a> in CSS, but hey. <a href="https://css-tip.com/svg-converter/">Temani updated his SVG to CSS tool</a> and it now supports multiple path elements. So if you ever wanted to transform SVGs into <code>clip-path</code> (or the new <code>border-shape</code>) properties, this tool is for you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-generators.com/svg-to-css/&quot;&gt;Clip all the paths&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://ezhik.jp/ai-slop-terrifies-me/">Ezhik's post</a> really hit a nerve with me. The world is changing. Heck, our entire industry and profession might be completely turned on its head. I'm beyond scared. What puzzles me the most is that quality might become less important.</p>
<p>Many builders, designers, and [insert whatever digital profession you like] slowly lose the desire to create high-quality &quot;things&quot;. Many are totally fine with generating something quickly. Done is better than perfect, right? And this approach might be alright. For many teams and companies it's always been like that. In the end, everybody can build whatever they like. It is how it is.</p>
<p>However, what scares me is the other side. And of course, that's not true for everybody, but does the majority out there care about a stellar product that took months to build? Do people care about a well-researched article? Does it matter if someone actually put in the work?</p>
<p>I know this is a downer to close this Web Weekly, but I'm honestly not sure anymore.</p>
<p>::: highlight quote</p>
<blockquote>
<p>I'm terrified of the good enough to ship — and I'm terrified of nobody else caring.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #189</title>
      <link>https://webweekly.email/archive/web-weekly-189/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-189/?ref=ww-rss</guid>
      <pubDate>Sun, 12 Apr 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #189 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Are you excited about <code>sizes=&quot;auto&quot;</code> landing in browsers? Did you ever run into issues with the <code>bfcache</code> and didn't know what to do? Or are you looking for a native way to lazy load videos?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
<a href="https://boris.schapira.dev/">Boris</a> listens to <a href="https://www.youtube.com/watch?v=ZvIzmTiYoPo">Wheatus - Teenage Dirtbag</a> and says:</p>
<blockquote>
<p>I'm currently rediscovering Teenage Dirtbag and <a href="https://www.youtube.com/watch?v=4hWxLz29Dy4">the story behind the song</a>. Maybe you'll find it interesting too!
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>four more songs</strong> left in the queue.</p>
<hr>
<p>A big thank you and <strong>a huge bag of karma points go to Mathias this week</strong>. Thank you for supporting indie publishing in the times of AI slop by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<p>And if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mjezynjh6j2r">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116397781027783395">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-189-just-went-out-this-one-share-7449458708599889920-I89W">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you!</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Practice Real Frontend Interviews</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png" alt="Frontend Interview Coming Up? Practice real frontend problems. 500+ questions with solitions and test cases. Coding, questions, and system design."></p>
<p>FrontendAtlas helps frontend engineers prepare with practical coding challenges, frontend interview questions, and a frontend system design blueprint. Built for JavaScript, React, Angular and Vue interviews — with implementation-heavy practice instead of generic puzzle grind.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendatlas.com?utm_campaign=web-weekly&quot;&gt;Start practicing for free&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/sponsor&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png" alt="What happens when you name everything Copilot? An attempt to map every product, app, and service that Microsoft has launched with the name &quot;Copilot&quot;"></p>
<p>Naming is hard, I get it. But it seems more like Microsoft has given up on giving AI features another name than <code>copilot</code>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://teybannerman.com/strategy/2026/03/31/how-many-microsoft-copilot-are-there.html&quot;&gt;Name everything the same&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://andrewmurphy.io/blog/if-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems">If you thought the speed of writing code was your problem - you have bigger problems</a> → &quot;If you want to ship faster, look at where things are waiting.&quot;</li>
<li><a href="https://blog.jim-nielsen.com/2026/vibe-dreams-didnt-come-true/">I Tried Vibing an RSS Reader and My Dreams Did Not Come True</a> → &quot;The making from nothing isn't as hard anymore. But everything after that still is.&quot;</li>
</ul>
<h2>Not existing <code>font-family</code> fallbacks</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png" alt="h1 {   font-family: &quot;Open Sans&quot;; }"></p>
<p>If you sometimes see Times New Roman flashing somewhere, Harry describes that the issue is most likely incorrect <code>font-family</code> properties. It might seem obvious, but I bet many people have these issues in their stylesheets.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://csswizardry.com/2026/04/font-family-doesnt-fall-back-the-way-you-think/&quot;&gt;Fall back properly&lt;/a&gt;</p>
<h2><code>bfcache</code> problems</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png" alt="self.addEventListener('pageshow', (event) =&gt; { if(event.persisted) { let theme = localStorage.getItem('theme'); let root = document.documentElement; root.classList.remove('light-theme', 'dark-theme'); if (theme) { root.classList.add();}}});"></p>
<p>Guilherme wanted to implement a quick and easy theme toggle on his site and discovered that sometimes things aren't that easy.</p>
<blockquote>
<p>If I had kept it simple (just a regular dark mode using @media (prefers-color-scheme: dark) and light-dark()) I wouldn’t have hit so many problems.</p>
</blockquote>
<p>I've discovered the same when implementing the theme toggle on <code>webweekly.email</code>. Regardless, it's a good read on the BFCache, <code>pageshow</code> events and how you can work around aggressive but very welcome browser caching behavior.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://guilhermesimoes.github.io/blog/making-dark-mode-work-with-bfcache&quot;&gt;Tweak the cache&lt;/a&gt;</p>
<h2>Why (and how) MDN was rebuilt without React</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png" alt="Search dialog with the question &quot;Under the hood of MDN's new frontend&quot;. The Answers: HTML, CSS, JavaScript and Web APIs"></p>
<p>I remember when MDN got a little style overhaul last year, but I didn't realize that it was an entire rebuild to drop React. The team responsible realized that React might not have been the best choice because:</p>
<blockquote>
<p>Our React app was merely a wrapper around our static content.</p>
</blockquote>
<p>MDN is a massive collection of docs pages with occasional demo or UI sprinkles. So what are they doing now? The new (current?) MDN is built with a custom render pipeline and Lit web components.</p>
<p>The article is a great read to learn more!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/blog/mdn-front-end-deep-dive/&quot;&gt;Consider simple architecture&lt;/a&gt;</p>
<h2>The accessibility report of the top 1,000,000 home pages</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png" alt="The text &quot;This chart shows the number of ARIA attributes per home page over time&quot; next to a graph with exploding ARIA attribute usage."></p>
<p>Once a year, WebAIM analyzes the top 1,000,000 home pages for accessibility issues and it's been looking good (or at least better) for a while but now the overall state of the web is getting worse again.</p>
<p>There are now more errors, more ARIA usage and an overall worse experience.</p>
<blockquote>
<p>Home pages with ARIA present had significantly more errors (59.1 on average) than pages without ARIA (42 on average)</p>
</blockquote>
<p>This makes me sad.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://webaim.org/projects/million/&quot;&gt;Look at sad numbers&lt;/a&gt;</p>
<h2>The wonderful weird web – 100 jumps</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png" alt="A square with a face standing on a flying shelf."></p>
<p>Let's pretend I didn't play this game for fifteen minutes and still only made it to 62 jumps. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://boredzebra.com/100jumps/&quot;&gt;Jump!&lt;/a&gt;</p>
<h2>HTML in <code>canvas</code> might become a thing</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png" alt="canvas id=canvas layoutsubtree   form id=form_element     label for=namename:/label     input id=name   /form /canvas"></p>
<p>Do you remember the times when some companies rebuild the entire DOM for better performance? Those were wild times (and obviously a pretty bad idea). But check this out, there's <a href="https://github.com/WICG/html-in-canvas">a new proposal to render HTML into the <code>canvas</code> element</a>. It's pretty wild!</p>
<p>Granted, this is very cutting edge (Chrome Canary with a flag) and canvas stuff can involve a lot of heavy math, Matt shared some very fancy examples of what you can do with this.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://mattrothenberg.com/notes/html-in-canvas/&quot;&gt;Render HTML&lt;/a&gt;</p>
<h2>TIL — <code>Intl</code> can localize units, too!</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png" alt="console.log(   new Intl.NumberFormat(&quot;de-DE&quot;, {      style: &quot;currency&quot;,      currency: &quot;EUR&quot;    }).format(123456789), ); // &quot;123.456.789,00 €&quot;"></p>
<p>This week I learned that you can use the built-in <code>Intl</code> object to localize and format numbers with units! I love love love it!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/intl-can-localize-units-too/&quot;&gt;Format your numbers&lt;/a&gt;</p>
<p><em>And side note: <code>Intl</code> is one of the hidden gems that we should all be using more. <a href="https://polypane.app/blog/the-intl-api-the-best-browser-api-youre-not-using/">Kilian published a long guide explaining many more things you can do with powerful JS API</a>.</em></p>
<h2>Scoping with name-only container queries (or <code>@scope</code>)</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png" alt="@container ds-card {   .title {     background: rebeccapurple;     color: white;   } }"></p>
<p><strong>If you open this post, make sure to read it to the end.</strong></p>
<p>Safari 26.4 started to support name-only container queries (<code>@container [name] {}</code> without a condition). Chris discovered that name-only container queries could be used for CSS scoping similar to how CSS modules work. It's a valid and creative take, but here's the kicker: Miriam shared that you can do similar things with CSS <code>@scope</code> (the post was updated later on).</p>
<p>I'm still not 100% on the CSS scoping train, but this post definitely included some good-to-know details!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/name-only-containers-the-scoping-we-needed/&quot;&gt;Scope your styles&lt;/a&gt;</p>
<h2>New to the platform: lazy loading video</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png" alt="video loading=lazy         autoplay playsinline muted        src=path/to/sloth.webm/video"></p>
<p>It's wild that we couldn't lazy load videos until now, isn't it? Scott and his team thought the same and fixed that by contributing to Webkit and Firefox. I love all of this. If you're curious about when it'll land and what needs to be considered when lazy loading videos, this post is golden!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://engineering.squarespace.com/blog/2026/how-to-use-standard-html-video-and-audio-lazy-loading-on-the-web-today&quot;&gt;Delay all the heavy videos&lt;/a&gt;</p>
<h2>Random MDN – <code>ReportingObserver</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png" alt="const observer = new ReportingObserver(   (reports, observer) =&gt; {     reports.forEach((report) =&gt; {       log(JSON.stringify(report, null, 2));     });   }, {     types: [&quot;deprecation&quot;],     buffered: true,   } );"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that there's a JavaScript API to listen to reports like the usage of deprecated browser features? Now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/ReportingObserver&quot;&gt;Read the reports!&lt;/a&gt;</p>
<h2>TIL recap – the <code>pathLength</code> attribute</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png" alt="svg width=7149 height=1392 viewBox=0 0 7149 1400   path d=M0.640625 ... pathLength=100 / /svg"></p>
<p>You've probably seen these SVG effects that look like a line or signature is drawn. The most common solution to build these animations is to combine <code>stroke-dashoffset</code> and <code>stroke-dasharray</code>. And they work fine, but usually rely on some magic numbers that depend on the SVG path length (e.g. <code>stroke-dasharray: 7151;</code>). A while ago I learned that <code>pathLength</code> can make everything a whole lot easier.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage/&quot;&gt;Animate all the paths&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>Soon on the baseline - <code>sizes=auto</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png" alt="img    alt=A cat wearing a hat.   srcset=     cat-s.jpg  300w,     cat-m.jpg  600w,     cat-l.jpg  1200w      loading=lazy   sizes=auto "></p>
<p>Disclaimer: <code>sizes=auto</code> isn't on the baseline yet, but I'm so excited about it so that I'll plug it already. Responsive images are tough and many people implement them incorrectly. With <code>sizes=auto</code> we can provide the image sizes and let the browser figure out the rest.</p>
<p>There's one catch: images need to be lazy loaded so that the browser did layout already. Still, I think this is a much needed addition.</p>
<p>Where are we browser support wise:</p>
<ul>
<li>✅ Chromium already supports the attribute</li>
<li>⌛ <a href="https://www.firefox.com/en-US/firefox/150.0beta/releasenotes/#note-791548">Firefox will support it in two weeks with 150</a></li>
<li>⌛ <a href="https://webkit.org/blog/17917/release-notes-for-safari-technology-preview-241/">Webkit shipped it in tech preview</a></li>
</ul>
<p>Great times ahead!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/SacDeNoeuds/yawn">SacDeNoeuds/yawn</a> – A Frontend framework built on async iterables.</li>
<li><a href="https://github.com/kamranahmedse/slim">kamranahmedse/slim</a> – Give your localhost a local or public URL.</li>
<li><a href="https://github.com/unmta/emailmd">unmta/emailmd</a> – Render markdown into email-safe HTML.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png" alt="ASCII mock up showing a form UI with controls."></p>
<p>If you're looking for a quick way to mock or prototype UIs or service architectures, Wiretext is a quick app to rock all these ASCII characters. I love the look of these diagrams!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://wiretext.app&quot;&gt;Draw with text&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://ericwbailey.website/published/how-an-accessibility-designer-adds-keyboard-shortcuts-to-a-web-app/">Eric got into the complex topic of keyboard shortcuts and accessibility</a> and this sentence is an absolute banger, isn't it?</p>
<p>::: highlight quote</p>
<blockquote>
<p>Your web app is not the center of the universe.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #188</title>
      <link>https://webweekly.email/archive/web-weekly-188/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-188/?ref=ww-rss</guid>
      <pubDate>Sun, 05 Apr 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #188 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard about the CSS <code>sticky</code> spec change? Or have you used the <code>position-visibility</code> property before? And are you aware of the new JavaScript features landing in 2026?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Mark listens to <a href="https://www.youtube.com/watch?v=I-ej_xJzYZI">&quot;Jet Black&quot; by Fletchr Fletchr</a> and says:</p>
<blockquote>
<p>An anthemic crashing guitar explosion, &quot;Jet Black&quot; ruined a perfectly good nap in the sun for me at Boardmasters Festival this summer by erupting on stage, and it's gone on heavy rotation since.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>three more songs</strong> left in the queue.</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mitokoviax2p">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116358695717170492">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-share-7446956986132389889-LYuT">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<p>A big thank you and a huge bag of karma points go to &quot;vaupeh&quot; this week. Thank you for supporting indie publishing in the times of AI slop by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>No code</h2>
<ul>
<li><a href="https://www.terrygodier.com/the-last-quiet-thing">The last quiet thing</a> → &quot;Nothing you own is finished. Everything exists in a state of permanent incompletion, permanently needing.&quot;</li>
<li><a href="https://alexhwoods.com/dont-let-ai-write-for-you/">Don't Let AI Write For You</a> → &quot;Letting an LLM write for you is like paying somebody to work out for you.&quot;</li>
<li><a href="https://codegood.co/writing/ai-shrinks-the-team-not-the-problem">AI Shrinks the Team, Not the Problem</a> → &quot;Reducing the team [because of AI] does not reduce the number of things that can go wrong. It reduces the number of people available to own them.&quot;</li>
</ul>
<h2>Use <code>subgrid</code> to deal with &quot;controlled&quot; content</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png" alt=".full-width {   display: grid;   grid-column: inline;   grid-template-columns: subgrid;    :where(&amp;) &gt; * {     grid-column: main;   } }"></p>
<p>Short'n'sweet: David explains how CSS <code>subgrid</code> (available across browsers since September 2023) helps with laying out content coming from CMS systems.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dbushell.com/2026/04/02/css-subgrid-is-super-good/&quot;&gt;Lay out!&lt;/a&gt;</p>
<h2>TS Type guards vs. assertion functions</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png" alt="// let's pretend JSON.parse is an unknown data source const data = JSON.parse('{&quot;name&quot;: &quot;Stefan&quot;}');   assertIsUser(data); // throws if not a User   data.name.toUpperCase(); // narrowed to User after assertion"></p>
<p>While reading <a href="https://www.solberg.is/unknown-to-typed">Absorbing unknown Into the Type Realm</a> I learned a new TypeScript thing. Usually, I'm going for type guards to narrow types, but with assertion functions (<code>asserts data is Something</code>) you can narrow the type inside of the current scope. No <code>if</code>s or anything like that needed. Good stuff!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/the-scope-of-type-guards-and-assertion-functions/&quot;&gt;Narrow things down!&lt;/a&gt;</p>
<h2>What to know in JavaScript 2026</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png" alt="2026 next to the JavaScript logo."></p>
<p>CSS has been so much on fire that it sometimes feels as if nothing is happening in JavaScript land. Chris was so kind and summarized what you need to know this year!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/&quot;&gt;Stay up to date!&lt;/a&gt;</p>
<h2>Everybody's raving about <code>pretext</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3ZTY72IEfI0ErcZKjFbwEm/cf6ae3341a0298f932aca5c2dda4c0ac/retext.gif" alt="Demo showing a bubble being moved over a paragraph and all the text moves."></p>
<p>The <code>pretext</code> project is only one month old and already gained 40k GitHub stars. People are excited. Why?</p>
<p><code>pretext</code> is a &quot;JavaScript/TypeScript library for multiline text measurement &amp; layout&quot;. That means you can give it some text and it'll figure out how much space the text will need. Under the hood it normalizes the input text and then uses <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/measureText"><code>canvas.measureText()</code></a> to get the size and layout information. I didn't even know that <code>measureText</code> is a thing in canvas land.</p>
<p>Now, <a href="https://chenglou.me/pretext/">some of the demos are very impressive</a> but <a href="https://blog.damato.design/posts/pretext-review/">I agree a lot with Donnie's take</a>. Just because something can be done in JS, it doesn't mean it needs to be done with it. And also, CSS is moving fast, some of the layout issues might be resolved sooner than later if enough people show interest. What's your take?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://github.com/chenglou/pretext?tab=readme-ov-file&quot;&gt;Be fancy&lt;/a&gt;</p>
<h2>The View Transitions Toolkit</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png" alt="View Transitions Toolkit — A collection of utility functions to more easily work with View Transitions."></p>
<p>Bramus released a new npm package full of view transition utilities. <a href="https://github.com/GoogleChromeLabs/view-transitions-toolkit/tree/main/docs">The GitHub docs</a> are also worth a read if you want to learn more about view transition inner workings. For example, I didn't know that you can pause view transitions.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://chrome.dev/view-transitions-toolkit/&quot;&gt;Level up your transition game&lt;/a&gt;</p>
<p><em>Side note: while playing around with all these snippets I've also run into the situation of view transitions blocking document interactions. Luckily, <a href="https://www.bram.us/2025/01/29/view-transitions-page-interactivity/">Bramus had a fix for that one</a>, too.</em></p>
<h2>The wonderful weird web – <code>CSS-or-BS</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png" alt="background-layer. CSS or BS?"></p>
<p>I must admit this was harder than I thought! Are you certain you can differentiate real from made up CSS properties?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.keithcirkel.co.uk/css-or-bs/&quot;&gt;Decide!&lt;/a&gt;</p>
<h2>The <code>human.json</code> protocol</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png" alt="{   &quot;version&quot;: &quot;0.1.1&quot;,   &quot;url&quot;: &quot;https://example.com/~alice&quot;,   &quot;vouches&quot;: [     {       &quot;url&quot;: &quot;https://bob.example.com&quot;,       &quot;vouched_at&quot;: &quot;2026-01-15&quot;     }   ] }"></p>
<p>More and more content is primarily generated without any human reviewing things. The human part is more at danger in our beloved web. To counter this movement, I've seen multiple people implement the <code>human.json</code> protocol. People can vouch for each other so that we can build a network of trust. Should we all get on board?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://codeberg.org/robida/human.json/src/branch/main/README.md&quot;&gt;Trust your fellow webmaster&lt;/a&gt;</p>
<h2><code>light-dark()</code> works soon for images</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png" alt=".element {   color-scheme: dark;   background-image: light-dark(url(light.png), url(dark.png)); }"></p>
<p>The <code>light-dark()</code> CSS function was limited to color values but very soon will work for images in CSS, too. It'll land in Chromium and Firefox soon. Let's see when Safari joins the party.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/03/19/more-easy-light-dark-mode-switching-light-dark-is-about-to-support-images/&quot;&gt;Flip some images&lt;/a&gt;</p>
<h2>A <code>sticky</code> CSS spec change</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png" alt="The Change — A recent change to CSS fixes this issue: position: sticky can now track the nearest scrolling container per axis."></p>
<p>A nine-year-old CSS spec issue has been resolved and <code>position: sticky</code> now tracks the nearest scrolling container <strong>per axis</strong>. So, if you want to stick an element to a scroll container <strong>and</strong> the document, this will soon be possible. As usual, today, we're still in Chromium only land. Still, great that this landed!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/03/30/css-sticky-per-axis/&quot;&gt;Stick!&lt;/a&gt;</p>
<h2>Edge's experimental network efficiency guardrails</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png" alt="Data source (Analytics, Data, Images) going into the network to be displayed as a website."></p>
<p>Now, that's cool! Edge is experimenting with a new way to track and report low-quality network resources. The initial criteria are uncompressed text resources, images larger than 200 kB and data URLs larger than 100 kB. I'm game!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://blogs.windows.com/msedgedev/2026/03/17/monitor-and-improve-your-web-apps-load-performance/&quot;&gt;Watch out&lt;/a&gt;</p>
<h2>CSS containment explained</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png" alt=".article {   contain: layout paint style; }"></p>
<p>Harry has a gift for publishing reference pieces. This time the new article is about CSS containment (<code>contain</code>, <code>content-visibility</code> or <code>contain-intrinsic-size</code>). It's a stellar piece and if you wonder how to save the browser some rendering and recalculation work, you should check it out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://csswizardry.com/2026/04/what-is-css-containment-and-how-can-i-use-it/&quot;&gt;Save some work&lt;/a&gt;</p>
<p><em>CSS containment can be used in other situations, too, though. <a href="https://ryanmulligan.dev/blog/50-50-overflow/">Ryan explained how <code>contain</code> helped with a tricky layout situation</a>.</em></p>
<h2>Random MDN – <code>position-visibility</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png" alt=".infobox {   position-anchor: --my-anchor;   position: fixed;   position-area: top span-all;  position-visibility: always; }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Now that anchor positioning works across browsers, do you know that there's a CSS property to control when an anchored element is shown?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position-visibility&quot;&gt;Hide and seek&lt;/a&gt;</p>
<h2>TIL recap – Forbidden <code>fetch</code> headers</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png" alt="fetch('https://api.example.com/data', {   headers: {     'Content-Length': '100',  // This will be ignored     'X-Custom-Header': 'This is fine'  // This will be sent   } })"></p>
<p>Did you know that you can't set all the headers in your &quot;common&quot; <code>fetch</code> calls?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/forbidden-headers-cant-be-set-in-fetch-requests/&quot;&gt;Stay in your lane&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png" alt=".article {   text-indent: 3em each-line; }"></p>
<p>I'm not sure I'll ever use this but if you're into typography and fancy text layouts, you might dig it. The <code>text-indent</code> values <code>hanging</code> and <code>each-line</code> are now supported across browsers.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-indent&quot;&gt;Move your text around&lt;/a&gt;</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/jaywcjlove/awesome-mac">jaywcjlove/awesome-mac</a> – A collection of high-quality macOS software.</li>
<li><a href="https://github.com/unhappychoice/gitlogue">unhappychoice/gitlogue</a> – Turn your Git history into a living, animated story.</li>
<li><a href="https://github.com/zhw2590582/ArtPlayer">zhw2590582/ArtPlayer</a> – A modern and full featured HTML5 video player.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png" alt="An image with a pixelated area."></p>
<p>If you're looking for a quick way to pixelate images, this tiny helper is for you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.pixelateimage.co&quot;&gt;Pixelate&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://www.seangoedecke.com/how-i-estimate-work/">So true</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Software engineering projects are not dominated by the known work, but by the unknown work, which always takes 90% of the time.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #187</title>
      <link>https://webweekly.email/archive/web-weekly-187/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-187/?ref=ww-rss</guid>
      <pubDate>Mon, 16 Mar 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #187 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard of <code>focusgroup</code>? Did you try aliases in Node.js imports already? Or do you know that <code>CSS</code> is available in JavaScript?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Mario listens to &quot;<a href="https://www.youtube.com/watch?v=aFzqrK7_dA0">Ethel Cain - Waco, Texas</a>&quot; and says:</p>
<blockquote>
<p>This is my kind of opera.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>four more songs</strong> left in the queue.</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mhbgli5jsc22">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116245547487623246">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7439715268194615297-P_Ky">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<h2>Web Weekly housekeeping</h2>
<p>A big thank you and a huge bag of karma points go to Jonathan this week. <strong>Thank you for supporting indie publishing in the times of AI slop</strong> by covering a small fraction of the cost it takes to send Web Weekly every week! My little side project is now supported by 40 people. This makes me incredibly happy (and proud). ❤️</p>
<p><em>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</em></p>
<p>And also, I messed up a link last week. I clicked all the links before sending the email, but because last week was an &quot;unofficial Temami edition&quot;, I didn't recognize that I linked to the wrong post. Here's <a href="https://css-tip.com/anchor-issues/">the correct link to anchor positioning issues</a>. Sorry!</p>
<h2>No code</h2>
<p>I didn't discover good &quot;No code&quot; articles this week. Did you read something great beyond coding lately? I'd love to read it, too!</p>
<h2><code>color-contrast()</code> beyond black &amp; white</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png" alt=".card {   --bg: var(--brand-color, #6c1afb);   background: var(--bg);    color: color-mix(     in oklch,      var(--bg) 10%,      contrast-color(var(--bg))   ); }"></p>
<p>With Chrome 147 (planned for Mar 25), <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/contrast-color">the <code>contrast-color()</code> function</a> will be newly available across all browsers. Theoretically, the function lets you throw a color in and get an accessible contrast color out. It's a great idea, but <code>contrast-color()</code> is limited to returning black or white right now.</p>
<p>Una describes how to work around this limitation.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://una.im/advanced-contrast-color/&quot;&gt;Mix all the colors&lt;/a&gt;</p>
<h2>Form-associated custom elements</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png" alt="class MyInput extends HTMLElement {   static formAssociated = true; // The &quot;I'm a form control&quot; flag    constructor() {     super();     // This gives you the keys to the kingdom     this._internals = this.attachInternals();   } }"></p>
<p>Granted, Rob's article is very long, but the intro paragraphs make it worth reading already.</p>
<p>I've seen <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals">the <code>attachInternals()</code> method</a> quite a few times in custom elements materials, but I never really understood what it's about.</p>
<p>Now I do, and it's quite cool if you're dealing with web components. Thanks, Rob!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/form-associated-custom-elements-in-practice/&quot;&gt;Attach your inputs&lt;/a&gt;</p>
<h2>A new <code>focusgroup</code> RFC</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png" alt="div focusgroup=tablist   buttonTab 1/button   buttonTab 2/button   buttonTab 3/button /div"></p>
<p>There's a new HTML feature shipping behind a flag in Chromium: <code>focusgroup</code>. The idea is that the attribute will make it easier to build components that require custom focus handling.</p>
<p>It's also wild that a <code>focusgroup</code> is supposed to set the correct ARIA roles automatically. If this works, maybe that will make the web a bit more accessible? I've heard some skeptical voices already, though.</p>
<p>Browsers are asking for feedback, so now is your chance!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/focusgroup-rfc&quot;&gt;Test it out!&lt;/a&gt;</p>
<h2>Stop checking for view transition support</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png" alt="if (!document.startViewTransition) {   updateTheDOM(); } else {   document.startViewTransition(updateTheDOM); }"></p>
<p>You've probably written this snippet many times by now. 👆 Even though view transitions have been cross-browser supported for a while, you still have to check every time if they're available with <code>if (document.startViewTransition)</code>. What if you didn't have to do that? Bramus released a non-visual polyfill.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/03/11/view-transitions-mock-is-a-non-visual-polyfill-for-same-document-view-transitions/&quot;&gt;Remove some ifs&lt;/a&gt;</p>
<h2>The wonderful weird web – JND</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png" alt="0.0042 - Genuinely remarkable. You sailed past the theoretical human limit like it owed you money. I'd accuse you of cheating but I don't actually know you you'd cheat at this."></p>
<p>Today I learned about JND: Just Noticeable Difference. Keith built a fun little game for your lunch break. To what point can you differentiate the colors?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.keithcirkel.co.uk/whats-my-jnd/&quot;&gt;Look closely&lt;/a&gt;</p>
<h2>Native JSON modules with import attributes</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png" alt="import config from &quot;./config.json&quot; with { type: &quot;json&quot; };"></p>
<p>You can load JSON files via <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with">import attributes</a> (that's the fancy <code>with</code> syntax) across modern browsers for roughly a year now. But how do import attributes affect caching? And are they really that much better than what bundlers already provided for years? Matt has some answers.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/&quot;&gt;Import your JSON&lt;/a&gt;</p>
<h2>Even more customizable selects</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6QlHv8mYpbwPXVvEn4pzkg/18df029585edd055bd2d235a06cd8ac5/select.gif" alt="A deck of cards that unfolds to select a card."></p>
<p>I know that I plugged a great-looking <code>select</code> last week already, but man... I'm very much into these new ways of customizing <code>select</code> elements. Patrick's article comes with many explanations this week.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/abusing-customizable-selects/&quot;&gt;Select!&lt;/a&gt;</p>
<h2>Feature detection of at-rules</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png" alt="@supports at-rule(@supports) {   /* ✅ The browser supports  */ }"></p>
<p>Disclaimer: <code>at-rule()</code> is far from being cross-browser supported and will only hit Chrome in version 148 (we're currently at 146), but it's still cool that we'll be able to check support for at-rules (e.g. <code>@starting-style</code>) in the future.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/03/15/at-rule/&quot;&gt;Detect&lt;/a&gt;</p>
<h2>Node.js subpath imports</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png" alt="{   &quot;type&quot;: &quot;module&quot;,   &quot;imports&quot;: {     &quot;#src/&quot;: {       &quot;types&quot;: &quot;./src/&quot;,       &quot;default&quot;: &quot;./lib/&quot;     },     &quot;#test/&quot;: {       &quot;types&quot;: &quot;./test/&quot;,       &quot;default&quot;: &quot;./test/&quot;     }   } }"></p>
<p>Do you know that you can set custom import paths in vanilla Node.js? If not, John explains how they work. He's kind of skeptical about the idea, but I'm really digging it!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://johnnyreilly.com/only-node-subpaths-with-no-restricted-imports-and-perfectionist-sort-imports&quot;&gt;Shorten your imports&lt;/a&gt;</p>
<h2>Random MDN – CSS <code>.to()</code> in JS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png" alt="// Prints &quot;0.608542cm&quot; console.log(CSS.px(&quot;23&quot;).to(&quot;cm&quot;).toString());"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here are two fun ones. First, do you know that <code>CSS</code> exists in JavaScript? And second, how cool is it that you can convert one unit into another?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/to&quot;&gt;Convert&lt;/a&gt;</p>
<p><em>Disclaimer: <code>.to()</code> doesn't work in all browsers yet but will land in Firefox soon!</em></p>
<h2>TIL recap – <code>svg</code> elements can be nested</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png" alt="svg xmlns=http://www.w3.org/2000/svg     !-- some SVG content --     svg         !-- some inner SVG content --     /svg svg"></p>
<p>Here's a quick learning from eight years ago: did you know that you can nest <code>svg</code> elements? Now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/you-can-nest-svg-elements/&quot;&gt;Nest all these SVGs&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline — CSS <code>shape()</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png" alt="#fancy {   width: 200px;   height: 200px;   clip-path: shape(     from center left,     curve by 200px 0px with 50% -80% from start,     smooth to center with 50% 100% from origin,     close   ); }"></p>
<p>With Firefox 148, the CSS <code>shape()</code> function entered the baseline, which means that you can now pair <code>offset-path</code> or <code>clip-path</code> with a function that understands CSS. That's right! No more SVG syntax fiddling!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/basic-shape/shape&quot;&gt;Shape!&lt;/a&gt;</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/arktypeio/arktype">arktypeio/arktype</a> – A TypeScript validator that's optimized from editor to runtime.</li>
<li><a href="https://github.com/mcollina/snipgrapher">mcollina/snipgrapher</a> – A CLI to generate image snippets from code files.</li>
<li><a href="https://github.com/jalonsogo/tui-studio">jalonsogo/tui-studio</a> – A visual design tool for building Terminal User Interfaces.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png" alt="BaseWatch. Never miss the moment a CSS feature goes Baseline."></p>
<p>As a WW subscriber, you should be pretty well aware of what's going on with browser features and the baseline. If the newsletter isn't enough, BaseWatch looks great!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://basewatch.dev/&quot;&gt;Stay up to date&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>Here are <a href="https://blog.jim-nielsen.com/2026/say-no-to-data/">some wise words from one of my favorite bloggers</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Data tells you what people consume, not what you should make. [...] &quot;What is happening?&quot; and &quot;What should happen?&quot; are two completely different questions and should be dealt with as such.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #186</title>
      <link>https://webweekly.email/archive/web-weekly-186/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-186/?ref=ww-rss</guid>
      <pubDate>Mon, 09 Mar 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #186 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Are you struggling to understand why your anchor positioning doesn't work? Did you know that there's a <code>window.stop()</code> method? And did you ever wonder how to apply a theme color to Safari?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
I am listening to &quot;<a href="https://www.youtube.com/watch?v=5kU_z8wD4eg">KRAFTKLUB - Marlboro Mann</a>&quot; and say:</p>
<blockquote>
<p>I've seen Kraftklub live twice so far. The first time I was surprised by the excellent show. The second time I was truly amazed. This week, I'm going to see Germany's best live band for the third time, and I'm sure that I'll tear up while dancing my ass off. I can't wait!
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr>
<p>A huge thank you and a huge bag of karma points go to Paweł, Johann, and Corey this week. Thank you for <strong>supporting indie publishing in the times of AI slop</strong> by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 39 supporters on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference!</p>
<hr>
<p>And if you learned something from this week's edition, share Web Weekly with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mgq5hknhsk22">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116206627138761786">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-about-to-hit-all-the-activity-7437224449243783168-PGBX">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps the newsletter out. Thank you! ❤️</p>
<hr>
<h2>No code</h2>
<ul>
<li><a href="https://raymyers.org/post/dont-make-me-talk-to-your-chatbot/">Don't Make Me Talk to Your Chatbot</a> → &quot;It's fine that people talk to chatbots, but they should not expect me to listen to theirs&quot;.</li>
<li><a href="https://terriblesoftware.org/2026/03/03/nobody-gets-promoted-for-simplicity/">Nobody Gets Promoted for Simplicity</a> → &quot;Nobody gets promoted for the complexity they avoided&quot;.</li>
</ul>
<h2>Heads up: Chrome will adopt a new release cycle</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png" alt="Chrome releases every 2 weeks"></p>
<p>Starting in September, Chrome will ship a new version every two weeks, and I already see these version numbers going through the roof. But honestly, more updates are a good thing.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/chrome-two-week-release&quot;&gt;Catch up&lt;/a&gt;</p>
<h2>Do you remember <code>theme-color</code>?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png" alt="&lt;meta name=&quot;theme-color&quot; content=&quot;cornflowerblue&quot; /&gt;"></p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/name/theme-color">The <code>theme-color</code> meta element</a> used to color Safari's frame and configure a color for progressive web apps.</p>
<p>Turns out, Safari dropped the theme color support for &quot;normal&quot; websites. And yet, sometimes the Safari frame is colored in website colors.</p>
<p>What is going on? Martin investigated Safari's behavior.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://grooovinger.com/notes/2026-02-27-safari-26-header-background&quot;&gt;Color the Safari frame&lt;/a&gt;</p>
<h2>Yes, this is a custom <code>select</code>!</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Lhfo2KpV9dj05mE3H6wHw/812c6b6c03a4b52ce2de2e8027f55f57/select.gif" alt="A custom select which opens racecar drivers on click to select one."></p>
<p>Disclaimer: customizable <code>select</code> elements are still a Chromium-only thing, but man, look at this beauty!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://codepen.io/editor/cbolson/pen/019cbfe5-85da-7d31-a7de-44b6b35e7c1c&quot;&gt;Select with style&lt;/a&gt;</p>
<h2><code>:</code> and <code>=</code> in style queries</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png" alt=".box {   @container style(--n = 3) {     background: red;     }    @container style(--n : 3) {     background: red;     } }"></p>
<p>Style queries aren't supported in Firefox yet, so I must say that I didn't really play with them yet. But today I learned there's a difference between using <code>:</code> and <code>=</code>.</p>
<p>Whoot? Big thanks go to Temani for sharing yet another CSS pro tip!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tip.com/if-trick/&quot;&gt;Compare styles&lt;/a&gt;</p>
<h2>Problems with anchor positioning</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png" alt="Why is Anchor Positioning not working?"></p>
<p>I still haven't fully adopted anchor positioning, but I figured there are many edge cases, and sometimes I'm also just scratching my head. Temani covered many reasons why the anchors might not show up where you expect them to.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tip.com/anchor-issues/&quot;&gt;Master all these anchors&lt;/a&gt;</p>
<p><em>And if you want to see Chris rant a bit, <a href="https://frontendmasters.com/blog/the-big-gotcha-of-anchor-positioning/">he also talks about common anchor positioning mistakes</a>.</em></p>
<h2>Style restrictions of the new <code>geolocation</code> element</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png" alt="geolocation {   /* NOPE */   translate: 100px 100px;   transform: scale(0);   opacity: 0.75;   filter: opacity(0);   inline-size: 2px;   clip-path: inset(50%); }"></p>
<p>And speaking of Chris, he also played with the new <code>geolocation</code> element (currently Chrome-only, and <a href="https://webweekly.email/archive/web-weekly-181/#more-declarative-html%3A-%3Cgeolocation%3E">I covered it six weeks ago</a>) and found some &quot;interesting&quot; CSS quirks of this new native element.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/the-enforced-accessibility-of-the-geolocation-element/&quot;&gt;Style the location&lt;/a&gt;</p>
<h2>The wonderful weird web – A map of us</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png" alt="A map with a tooltip saying &quot;Public Map▴ I wonder what would have happened if I stayed. I think we will meet again someday. I miss you&quot;"></p>
<p>AMOU is a map of memories. People can share memories from a certain place. I've spent quite some time discovering all these unknown memories in my neighborhood. ❤️</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://amapof.us/map&quot;&gt;Discover memories&lt;/a&gt;</p>
<h2><code>npmx</code> is having a moment</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png" alt="npmx — a fast, modern browser for the npm registry"></p>
<p>I plugged <code>npmx</code> in a previous Web Weekly, and while I thought the project was cool, I secretly didn't have high hopes of me using it. But I do! And the team is building a nice community around the project. Good stuff!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://npmx.dev/&quot;&gt;Check packages with style&lt;/a&gt;</p>
<h2>A CSS state machine</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png" alt=".track-focus {   --was-focused: false;   animation: track-focus 0.000001s linear forwards paused; } .track-focus:focus-within {   animation-play-state: running; } @keyframes track-focus {   to { --was-focused: true; }"></p>
<p>Patrick tried to find a CSS-only way to store the information of whether an element was previously focused. The solution is hacky but also... elegant?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://patrickbrosset.com/articles/2026-03-09-using-css-animations-as-state-machines-to-remember-focus-and-hover-states-with-css-only/&quot;&gt;Remember focus&lt;/a&gt;</p>
<h2>You Don't Know HTML Tables</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png" alt="You Don't Know HTML Tables"></p>
<p>Frank claims that I don't know HTML tables, and turns out he's right. This is a massive read, but I'm sure you'll learn a thing or two. I mean, did you know that there's a TOM (table object model)?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://blog.frankmtaylor.com/2026/03/05/you-dont-know-html-tables/&quot;&gt;Level up your table game&lt;/a&gt;</p>
<h2>Creative ways to select <code>:root</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png" alt=":not(* ) {   / (* *) are my starry eyes looking at CSS &lt;3 */ }"></p>
<p>Temani and Daniel get into an unofficial competition about unconventional ways to select the <code>:root</code> element and some of these approaches made me smile. I love CSS.</p>
<ul>
<li><a href="https://css-tip.com/root-selectors/">The Hidden Selectors of The HTML Element</a></li>
<li><a href="https://css-tricks.com/the-different-ways-to-select-html-in-css/">The Different Ways to Select <code>html</code> in CSS</a></li>
</ul>
<h2>Random MDN – <code>stop()</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png" alt="window.stop()"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's a fun one: did you know that there's a global <code>stop()</code> method? Well, now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Window/stop&quot;&gt;Stop!&lt;/a&gt;</p>
<h2>TIL recap – Overwrite your dependencies' dependencies</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png" alt="{   &quot;overrides&quot;: {     &quot;bar@2.0.0&quot;: {       &quot;foo&quot;: &quot;1.0.0&quot;     }   } }"></p>
<p>Did you know that npm supports an <code>overrides</code> key in your <code>package.json</code>? If one of your dependencies is pulling in something nasty, you can fix the dependency right from the root level. Handy!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/how-to-override-your-dependencys-dependencies/&quot;&gt;Fix your deps&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline — Trusted Types</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png" alt="trustedTypes.createPolicy(&quot;default&quot;, {   createHTML(value) {     console.log(&quot;Please refactor this code&quot;);     return sanitize(value);   }, });"></p>
<p>With Firefox 148 and Safari 26, Trusted Types entered the baseline! 🎉 What are they for?</p>
<p>Whenever you're dealing with user-generated content, you can enforce content to pass a sanitization step before injecting it into the DOM. You can enforce this via CSP, too. Pretty cool!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API&quot;&gt;Be safe&lt;/a&gt;</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/lokesh/color-thief">lokesh/color-thief</a> – Grab the color palette from an image using just JavaScript. <em>The demo site is pretty nice!</em></li>
<li><a href="https://github.com/searlsco/posse_party">searlsco/posse_party</a> – Crossposting content from your site to a variety of social media platforms.</li>
<li><a href="https://github.com/webpro-nl/unbarrelify">webpro-nl/unbarrelify</a> – Barrel file removal tool for JavaScript &amp; TypeScript.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png" alt="Free online SVG converter"></p>
<p>I can't be the only person who tries to transform a <code>png</code> to an <code>svg</code> at least once a month. I played with this converter a bit, and the results looked promising.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://svgconverter.online&quot;&gt;Convert&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>Here's <a href="https://adventures.nodeland.dev/archive/the-human-in-the-loop/">Matteo on everyone's &quot;favorite&quot; topic</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>The human in the loop isn't a bug to be fixed. It's a feature to be protected.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 39 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #185</title>
      <link>https://webweekly.email/archive/web-weekly-185/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-185/?ref=ww-rss</guid>
      <pubDate>Mon, 02 Mar 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #185 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard of Chrome's soft navigations? Do you parse the <code>sec-fetch</code> header to prevent CSRF? Or do you know that elements with <code>overflow: hidden</code> are still scrollable?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
<a href="https://pablolarah.cl/">Pablo</a> listens to <a href="https://www.youtube.com/watch?v=htQBS2Ikz6c">ROSALÍA - Berghain</a> and says:</p>
<blockquote>
<p>Rosalía's Berghain (&amp; the LUX album) are real masterpieces. Berghain has passages in German, showing us in the key of Opera what Hildegard of Bingen was experiencing, who saw &quot;the reflection of the living Light&quot; as a vision of God. Rosalía's Berghain translates in German the religious visions as &quot;The flame penetrates my brain Like a lead teddy bear&quot;. I absolutely recommend listening to this album, sung in German, French, Catalan, Italian, Ukrainian, Japanese and Spanish.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mg6lj5hg622t">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116167081441472403">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_my-time-management-has-been-all-over-the-activity-7434693506897563648-l3u9">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<h2>No code</h2>
<ul>
<li><a href="https://emilkowal.ski/ui/developing-taste">Developing Taste</a> → &quot;Expose yourself to great work, this way you’ll learn how greatness looks and feels like.&quot;</li>
<li><a href="https://terriblesoftware.org/2026/02/02/why-am-i-doing-the-thinking-for-you/">Why Am I Doing the Thinking for You?</a> → &quot;when you ask someone 'what do you think?' without sharing what <strong>you</strong> think, you’re not collaborating, but more like outsourcing?&quot;</li>
</ul>
<h2>Soft navigations in Chrome</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png" alt="What is a soft navigation? We came up with the following definition: The navigation is initiated by a user action. The navigation results in a visible URL change to the user, and a history change. The navigation results in a DOM change."></p>
<p>This is probably old news for all the performance experts, but I learned this week that Chrome has been experimenting with a new navigation type for a while: <em>soft</em> navigations.</p>
<p>The goal is to gather common web vitals across JS-navigations in single-page apps. I'm game!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/docs/web-platform/soft-navigations-experiment&quot;&gt;Measure!&lt;/a&gt;</p>
<h2>Laws of UX</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png" alt="Postel's Law &quot;Be conservative in what you send, be liberal in what you accept.&quot;"></p>
<p>Just in case you want to be the person quoting UX laws in your next interface discussion, Raphael put together a nice guide with interactive examples.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.userinterface.wiki/laws-of-ux&quot;&gt;Follow the law&lt;/a&gt;</p>
<h2><code>setHTML</code> is coming to Firefox</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png" alt="document.body.setHTML(    );"></p>
<p>Firefox became the first browser shipping the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/setHTML">new <code>setHTML</code> method</a>. What's wrong with good old <code>innerHTML</code>? <code>innerHTML</code> and older ways to change the DOM were all open to XSS attacks.</p>
<p><code>setHTML</code> finally tries to fix this!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://hacks.mozilla.org/2026/02/goodbye-innerhtml-hello-sethtml-stronger-xss-protection-in-firefox-148/&quot;&gt;Don't allow XSS&lt;/a&gt;</p>
<h2>Yet another way to center elements in CSS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png" alt=".element {   position: absolute;   place-self: center;    inset: 0; }"></p>
<p>Here's Juan sharing another way to center absolutely positioned elements in CSS.</p>
<p>I don't have anything else to say other than that centering things in CSS is a solved problem in 2026, don't you think?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/yet-another-way-to-center-an-absolute-element/&quot;&gt;Center everything&lt;/a&gt;</p>
<p><em>Side note: and if this post isn't enough, here's another post explaining <a href="https://www.stefanjudis.com/today-i-learned/auto-margin-works-with-absolute-positioned-elements/">how <code>margin: auto</code> can help with absolutely positioned elements</a>, too.</em></p>
<h2>The wonderful weird web – <code>aem1k</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png" alt="A minified JavaScript code snippet looking like a spinning globe."></p>
<p>Martin is a fairly famous code golfer and man... every time I see his work I'm blown away.</p>
<p>What's code golfing? When you're code golfing, you're trying to use the fewest possible characters. This is hard and complicated in itself already, but Martin pushed this even further.</p>
<p>Do you see this ASCII globe there? 👆 This globe is the script that renders itself. Unbelievable!</p>
<p>Here are my favorites:</p>
<ul>
<li><a href="https://aem1k.com/fire/quine/">an ASCII fire</a></li>
<li><a href="https://aem1k.com/world/">the mentioned ASCII world</a></li>
<li><a href="https://aem1k.com/qlock/">an ASCII clock</a></li>
</ul>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://aem1k.com/&quot;&gt;Be amazed&lt;/a&gt;</p>
<h2>TIL - tabs and newlines are removed from URLs</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png" alt="Example link including news lines and tabs and it still works because these characters are removed by the browser"></p>
<p>Well, did you know that browsers remove newlines and tabs from link URLs? I definitely didn't!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/new-lines-are-removed-from-whatwg-urls/&quot;&gt;Break things apart&lt;/a&gt;</p>
<h2><code>sec-fetch</code> as modern CSRF protection</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png" alt="The so called &quot;modern&quot; method to protect against CSRF attacks is based on the Sec-Fetch-Site header, which all modern desktop and mobile browsers include in the requests they send to servers."></p>
<p>Cross-Site Request Forgery (CSRF) is an attack in which an attacker tricks a user's browser into making an unintended request to a site where they might be logged in. If someone is on <code>evil.com</code> and the browser makes a POST request to <code>my-bank.com</code>, it could go through because all cookies are sent with it. Not good.</p>
<p>To protect yourself, many sites implement CSRF tokens to ensure that the user is really on the site when the request is made. But there's a header that we can use since 2023: <code>sec-fetch</code>.</p>
<p><a href="https://blog.miguelgrinberg.com/post/csrf-protection-without-tokens-or-hidden-form-fields">Miguel shared this discovery in December</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/CSRF#defenses_against_csrf">the MDN docs on CSRF are also quite good</a>. Enjoy and be safe!</p>
<h2>Does this demo still count as a <code>select</code>?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png" alt="A button labeled &quot;strawberry&quot;"></p>
<p>I shared that <a href="https://webweekly.email/archive/web-weekly-183/#the-new-era-of-customizable-select-elements">customizable selects are coming to the web in Web Weekly 183</a>. They're still Chromium only, though.</p>
<p>Now, Temani pushed the concept to the next level and I'll let you decide if you would call this experience a select box.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://codepen.io/t_afif/pen/PwGPJOB&quot;&gt;Pick a fruit!&lt;/a&gt;</p>
<h2>Random MDN – <code>:open</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png" alt="An open date input which is styled blue because the date picker is open."></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's a little party trick: do you know that input elements with a picker like <code>select</code> or date inputs also support <code>:open</code>? You're welcome!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:open&quot;&gt;Style the open&lt;/a&gt;</p>
<p><em>Side note: while looking at <code>:open</code> I discovered that Safari still doesn't support it? Not even for <code>details</code> elements? I'm a bit disappointed...</em></p>
<h2>TIL recap – <code>overflow: hidden</code> is still scrollable</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png" alt=".hidden {   overflow: hidden; }"></p>
<p>Do you know that elements with <code>overflow: hidden</code> set can still be scrolled? If you don't, check out the blog to learn which property prevents scrolling.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/elements-with-overflow-hidden-are-scrollable/&quot;&gt;Clip it!&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline: <code>rcap</code>, <code>rch</code>, <code>rex</code> and <code>ric</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png" alt="Browser support table for rcap, rch, rem, rex, and ric"></p>
<p>Firefox started to support the relative <code>&lt;length&gt;</code> CSS values: <code>rcap</code>, <code>rch</code>, <code>rex</code> and <code>ric</code>.</p>
<p>Granted, these units are a bit niche, because how often do you need to style something based on the width of the glyph <code>0</code> (<code>rch</code>)? But it's still good to know they exist.</p>
<p>And <code>cap</code> isn't actually that exotic: here's <a href="https://ishadeed.com/article/css-cap-unit/">how the <code>cap</code> unit can help with vertical alignment</a>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length#browser_compatibility&quot;&gt;Use the fancy relatives&lt;/a&gt;</p>
<h2>Classifieds &amp; friends</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png" alt="The latest in Fullstack engineering"></p>
<p>If you're based in the Netherlands and would like to go to <a href="https://jsnation.com/?utm_source=partner&amp;utm_medium=webweekly">the JS Nation conference</a> (June 11 &amp; June 15), I've got one ticket to give away for free! <a href="mailto:stefan@webweekly.email?subject=Re:raffle">Hit reply</a> and let me know! And even if you don't win, Web Weekly readers get 10% off with the code <code>WEBWEEKLY</code>. 🎉</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/thisiskps/fetch-network-simulator">thisiskps/fetch-network-simulator</a> – A request/response network behavior simulator for frontend applications.</li>
<li><a href="https://github.com/dlvhdr/diffnav">dlvhdr/diffnav</a> – A git diff pager with a file tree, à la GitHub.</li>
<li><a href="https://github.com/edge-js/edge">edge-js/edge</a> – Node.js template engine with a breath of fresh air.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png" alt="Graph from CruxViz showing overall green Core Web Vitals"></p>
<p>CruxVis isn't a new tool, but I'm sure some of you haven't seen it.</p>
<p>If you want to check a site's Core Web Vitals coming from real users via <a href="https://developer.chrome.com/docs/crux">Crux</a>, the site offers quick-to-use graphs and visualizations.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://cruxvis.withgoogle.com/&quot;&gt;Check your Vitals&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>One might think <a href="https://idiallo.com/blog/chatbots-only-exist-because-the-ui-sucks">Ibrahim has a point here</a>. 🫣</p>
<p>::: highlight quote</p>
<blockquote>
<p>When a customer reaches for your chatbot, it's not because they think chatbots are cool. It's because you've failed them.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>If so, <strong>join 37 other Web Weekly supporters</strong> and earn a huge bag of karma points by supporting Web Weekly via <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. ❤️</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #184</title>
      <link>https://webweekly.email/archive/web-weekly-184/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-184/?ref=ww-rss</guid>
      <pubDate>Mon, 23 Feb 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #184 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you ever struggled with lazy loading videos? Or have you used CSS <code>zoom</code> before? And do you know what <code>Map.getOrInsertComputed</code> does?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
<a href="https://x.com/andrecasaldev">André</a> listens to <a href="https://www.youtube.com/watch?v=u2ah9tWTkmk">&quot;Ordinary&quot; by Alex Warren</a> and says:</p>
<blockquote>
<p>This is genuinely one of the most beautiful songs I've ever listened to. It landed instantly on my short-list playlist of personal 'masterpieces' — the kind of songs that feel timeless to me, alongside classics like 'The Sound of Silence'. It's emotionally honest, restrained, and quietly powerful in a way that really stays with you.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>seven more songs</strong> left in the queue.</p>
<hr>
<p>This Web Weekly turned out very beefy already, so I'll keep the intro short. I discovered <a href="https://modern-css.com/">modern.css</a> and it's outstanding.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png" alt="Stop writing CSS like it's 2015"></p>
<p>The site lists old practices next to their modern counterparts. I'm sure you'll learn some new tricks by simply browsing around. Highly recommended!</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mfmrwg7pxc2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116127000268445928">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7432128332948946944-Tk3a">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<h2>No code</h2>
<ul>
<li><a href="https://www.seangoedecke.com/screwing-up/">On screwing up</a> → &quot;Managers will forgive mistakes, but they won't forgive being made to look like a fool&quot;.</li>
<li><a href="https://addyo.substack.com/p/14-more-lessons-from-14-years-at">14 More lessons from 14 years at Google</a> → &quot;Most meetings fail not because they're unnecessary, but because they're disguised journaling&quot;.</li>
<li><a href="https://candost.blog/the-unbearable-joy-of-sitting-alone-in-a-cafe/">The Unbearable Joy of Sitting Alone in a Café</a> → &quot;When you let your thoughts wander, they take you on a journey you'll never think possible&quot;.</li>
</ul>
<h2>New on the blog</h2>
<ul>
<li><a href="https://www.stefanjudis.com/notes/notes-on-relying-on-the-aria-authoring-practices-guide/">Notes on relying on the ARIA Authoring Practices Guide</a></li>
<li><a href="https://www.stefanjudis.com/blog/nobody-owes-you-anything/">Nobody owes you anything</a></li>
</ul>
<h2>Web Weekly Housekeeping</h2>
<p>Since <a href="https://webweekly.email/archive/web-weekly-182/#web-weekly-housekeeping">I doxed my inbox two weeks ago</a> asking for more replies, I've been having many nice email conversations. And because I enjoy this, let's keep the housekeeping going for a bit longer.</p>
<p>Question this week: many people told me that Web Weekly is a bit too long at times. I can totally relate to this. And frankly, writing Web Weekly is a ton of work.</p>
<p>So, what would you cut? I'm torn because I actually like it as is. Reply and let me know!</p>
<p>Oh and a quick reminder: Web Weekly is open for sponsorships. If you want to reach 6.5k developers, <a href="https://webweekly.email/advertise/">you know what to do</a>!</p>
<h2>An in-depth guide to customizing list styles</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png" alt="@counter-style --fleurons {   system: cyclic;   symbols: ❦ ✾ ✤ ❈ ✺ ❥;   suffix: &quot;&quot;;   speak-as: bullets; }"></p>
<p>If you want to spice up your list styling going beyond some bullets or numbers, Richard dropped a massive article explaining <code>::marker</code>, <code>@counter-style</code> and <code>symbols()</code>. My highlight: I had forgotten that <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/list-style-position"><code>list-style-position</code></a> is a thing...</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/&quot;&gt;List with style&lt;/a&gt;</p>
<h2>TIL — CSS <code>zoom</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/76OUpn1wPcJQdvN7A5ZA5B/d72600a220746c4d999502f5e61ad8a9/zoom.gif" alt="Example showing how  affects a component's layout."></p>
<p>I've seen the <code>zoom</code> property before but I didn't realize that it can actually be pretty dang useful. If you want to learn more about the difference between <code>zoom</code> and <code>scale</code>, check out this demo on the blog.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/&quot;&gt;Zoom!&lt;/a&gt;</p>
<h2>The web breaks free from rectangles</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6wqueFjWzyg6wXdvEX6F8t/ba14534a1990d1a779e2110e297130bc/border-shape.gif" alt="Example showing elements that don't have a rectangular outline when being focused."></p>
<p>If you had told me that one day I'd be excited about a property called <code>border-shape</code>, I wouldn't have believed you. And yet, here we are. Una shared the new CSS property coming to Chrome that allows you to actually &quot;shape&quot; elements.</p>
<blockquote>
<p>Unlike <code>clip-path</code>, which simply masks an element, <code>border-shape</code> actually redefines the &quot;box&quot; itself. When you apply a shape to a border, the background, the border-image, focus outline, and the box-shadow all follow that new geometry.</p>
</blockquote>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://una.im/border-shape/&quot;&gt;Shape the web&lt;/a&gt;</p>
<h2>Safer JS error checking</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png" alt="const iframe = document.createElement('iframe'); document.body.appendChild(iframe);  const err = new iframe.contentWindow.Error('Oops!'); err instanceof Error; // false"></p>
<p>Short and sweet: Matt explains why <code>Error.isError</code> is the way to go for error checking.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://allthingssmitty.com/2026/02/23/from-instanceof-to-error-iserror-safer-error-checking-in-javascript/&quot;&gt;Check the error&lt;/a&gt;</p>
<h2>The wonderful weird web – Kaomoji Cool Club</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png" alt="An emoji consisting of parentheses and other Unicode characters"></p>
<p>Did you know that these &quot;emojis&quot; are called Kaomoji? &quot;Kaomoji&quot; is a mix of the Japanese words &quot;kao&quot; 顔 (face) and &quot;moji&quot; 文字(character). Today I learned. And if you want to snatch some of the funky faces to look cool, that's what the Kaomoji Cool Club is about!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://kaomojicool.club/&quot;&gt;Express yourself with Unicode&lt;/a&gt;</p>
<h2>Lazy loaded videos are coming to the web</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png" alt="video    loading=lazy    autoplay playsinline muted controls   src=path/to/sloth.webm    poster=path/to/sloth.jpg/video"></p>
<p>Scott and his team at Squarespace are working on bringing <code>loading=&quot;lazy&quot;</code> to video and audio elements, and it's wild that we didn't have this in 2026, isn't it?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://scottjehl.com/posts/lazy-media/&quot;&gt;Defer the heavy load&lt;/a&gt;</p>
<p><em>Side note: <a href="https://scottjehl.com/posts/responsive-video/">Scott was also behind pushing browser vendors to add responsive video support</a>, and I honestly think that his &quot;little side projects&quot; are very inspiring.</em></p>
<h2>Are image sprites still a thing?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/19ZkdoZwtc2sFRH0AWkx8c/151bd7589e3e2a34f2e4bb044d365541/sprites.gif" alt="Visualization of a CSS sprite showing all the different frames."></p>
<p>Josh got into the topic of image sprites which, I must admit, I haven't used in at least a decade. But because Josh's posts are always so much fun to read and he explains <code>object-fit</code>, <code>object-position</code> and the animation <code>step()</code> function, it's definitely worth a read!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshwcomeau.com/animation/sprites/&quot;&gt;Remember sprites&lt;/a&gt;</p>
<h2>Yet another list of web dev stuff</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png" alt="Can we — A collection of websites focused on browser usage and features."></p>
<p>You probably know about <code>caniuse.com</code>. But do you know about <code>caniemail.com</code>? Or <code>canidev.tools</code>, <code>whocanuse.com</code> and <code>cssdb.org</code>?</p>
<p>I love a good list, and <code>canwe.dev</code> lists all these utility webdev sites.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://canwe.dev/&quot;&gt;Get some resources&lt;/a&gt;</p>
<h2>New in Chrome DevTools — <code>Render blocking</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png" alt="Chrome DevTools with a highlighted &quot;Render Blocking&quot; column"></p>
<p>If you care about web performance, you probably check for render-blocking resources. <a href="https://www.stefanjudis.com/blog/how-to-find-all-render-blocking-resources-with-javascript/">Chrome supports a handy JS API to discover all these offenders</a>.</p>
<p>And there's now a new column in the network panel giving you this information.</p>
<h2>Random MDN – <code>text-box-trim</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/12UO5N4gQZsM2bvbpHzmpf/bf188b203b7228d153f592ff88e6a9c8/text-box-trim.gif" alt="Demo of text-box-trim showing how the bounding box of text can be controlled."></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Unfortunately, <code>text-box-trim</code> doesn't work in Firefox yet, but man, I can't wait for this to work everywhere because it will make vertical alignment so much easier!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-box-trim&quot;&gt;Align&lt;/a&gt;</p>
<h2>TIL recap – <code>text-transform</code> can affect screen readers</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png" alt="VoiceOver pronouncing an &quot;add&quot; button with text-transform uppercase as ADD (each letter spelled out)."></p>
<p>Did you know that <code>text-transform: uppercase</code> can affect how screen readers read out the content? Well, now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/text-transforms-affects-screen-readers-too/&quot;&gt;Be aware&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline — new <code>map</code> methods</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png" alt="const map = new Map(&quot;bar&quot;, &quot;foo&quot;); const defaultCreator = (key) =&gt; ; console.log(map.getOrInsertComputed(&quot;baz&quot;, defaultCreator)); // Expected output: &quot;default for baz&quot;"></p>
<p>JavaScript maps got two new methods to access entries while providing fallback values: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsert"><code>getOrInsert</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsertComputed"><code>getOrInsertComputed</code></a>. The method names are a bit too wordy for my taste, but I dig that <code>getOrInsertComputed</code> allows you to evaluate the fallback lazily.</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/auroris/logo-soup">auroris/logo-soup</a> – A JS library to normalize and harmonize logo visuals.</li>
<li><a href="https://github.com/seflless/slowmo">seflless/slowmo</a> – Slow down, pause, or speed up time of any web content.</li>
<li><a href="https://github.com/Veirt/weathr">Veirt/weathr</a> – A terminal weather app with ASCII animation.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png" alt="SVG Studio Logo.svg"></p>
<p>If you're looking for a quick way to update and tweak SVG files in code, <code>svg.studio</code> will help you out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.svg.studio/&quot;&gt;Tweak all the SVGs&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://eieio.games/blog/will-ai-pet-my-dog-for-me/">Nolan shared his thoughts on how AI might be changing programming</a>, and of course, I can relate. I love coding. I love the puzzling part and am excited about learning things. But will all these things still matter? We'll find out soon enough.</p>
<p>::: highlight quote</p>
<blockquote>
<p>My immediate fear isn't that I'll be out of a job. My fear is that I'll lose the part of my job that I love the most.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 37 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #183</title>
      <link>https://webweekly.email/archive/web-weekly-183/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-183/?ref=ww-rss</guid>
      <pubDate>Mon, 16 Feb 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #183 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you checked what's included in Interop 2026? Do you know about the <code>using</code> declaration in JavaScript? And are you excited about the new ways to style <code>select</code> elements?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
<a href="https://pawelgrzybek.com/">Paweł</a> listens to <a href="https://www.youtube.com/watch?v=XhYpqI4HVYw">&quot;Tarika Blue - Topic&quot;</a> and says:</p>
<blockquote>
<p>This one is another sample that I was shocked to discover. My beloved Erykah Badu used a sample of this song in her &quot;Didn't Cha Know&quot;. I love everything by Erykah, and I love jazz music, so this song is a perfect combo for me.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>eight more songs</strong> left in the queue.</p>
<hr>
<p>The biggest news this week was that the Interop 2026 initiatives were released. If you don't know, Interop is a cross-browser initiative to align on which web features should ship in the upcoming year. Generally it's good stuff and many appreciate browsers going into the same direction (even though not everybody agrees with the focus topics).</p>
<p><a href="https://webkit.org/blog/17808/interop-2025-review/">Last year's Interop included bangers like Anchor Positioning, View Transitions, and <code>@scope</code></a>, and the results were pretty good at the end of the year.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png" alt="Interop support graph showing a 90% completion at the end of the year."></p>
<p>But what's included this year? Here's <a href="https://webkit.org/blog/17818/announcing-interop-2026/">the full list from the WebKit blog</a>.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png" alt="Anchor Positioning, Advanced attr(), Container Style Queries, contrast-color(), Custom Highlights, Dialog and popover additions, Media pseudo-classes, Navigation API, Scroll-driven Animations, Scroll Snap, View Transitions, Web Compat"></p>
<p>I haven't had the time to dive in yet, but this looks like a decent list, and I might go deeper next week. I do miss <code>sizes=auto</code> for images, though.</p>
<p>But I'm not complaining, so let's get to the web dev goodies of this week!</p>
<hr>
<h2>Web Weekly housekeeping</h2>
<p><a href="https://webweekly.email/archive/web-weekly-182/#web-weekly-housekeeping">Last week I asked you to reply to this email</a> to check if it would improve this newsletter's open rate. And well... it was quite a week. I doxxed myself with around 60 emails hitting my inbox on the first day. Writing this newsletter sometimes feels a bit lonely, but it really reminded me of why I sit down every week. Having all these replies and conversations gave me a nice and fuzzy feeling!</p>
<p>Also, Mark, Michelle, Derek, Zoran, Evan, and Francis provided testimonials for the Web Weekly site, and Michal, Jason, and Jules started to support Web Weekly with a monthly coffee donation! <strong>A special thanks goes to all of you!</strong></p>
<p>So, thank you all for reading along and if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mf3fnaxk5k25">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116087855699317740">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7429622965622689792-0-7w">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter reach more people. Thank you! ❤️</p>
<hr>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png" alt="Git Shitstorm: How to Make Any Developer Lose Their Mind"></p>
<p>Look, I'm not saying that you should ever, ever use <code>git-shitstorm</code>, but the level of evilness really made me smile.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.einenlum.com/articles/git-shitstorm/&quot;&gt;Don't be evil&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://cate.blog/2026/01/27/performance-reviews-are-the-scorecard-of-capitalism-and-why-that-should-free-you/">Performance Reviews Are the Scorecard of Capitalism</a> → &quot;If review season is the only time you hear feedback about your work, that's a problem.&quot;</li>
<li><a href="https://www.workingtheorys.com/p/notes-on-not-posting">Notes on Not Posting</a> → &quot;The internet doesn't need you. It's good to be reminded of that once in a while.&quot;</li>
<li><a href="https://www.seangoedecke.com/how-i-estimate-work/">How I estimate work as a staff software engineer</a> → &quot;It is not possible to accurately estimate software work.&quot; 😱</li>
</ul>
<h2>Use <code>@layer</code> for your reset styles</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png" alt="/* uaplus.css / @layer {   h1 { color: red; } }  / your.css / h1 { color: blue; }  / Result: blue */"></p>
<p>Confession time: I'm still not using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer"><code>@layer</code></a> even though it's been baseline supported since 2022. Manuel describes how to use CSS layers to deal with CSS reset specificity. Great trick!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://matuzo.at/blog/2026/lowering-specificity-of-multiple-rules&quot;&gt;Reset layer by layer&lt;/a&gt;</p>
<h2><code>@scope</code> in inline <code>&lt;style&gt;</code> blocks</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png" alt="DevTools showing inline styles including a  declaration"></p>
<p>And speaking of styles not overwriting each other... with <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@scope"><code>@scope</code></a> entering the baseline, I could finally drop some odd class conventions so that my site's new custom components aren't clashing with the overall styles.</p>
<p>I love this! We can now drop <code>&lt;style&gt;</code> elements right into the page, use <code>@scope</code>, and the styles will be applied only to the surrounding container. Good stuff.</p>
<p>If you haven't used <code>@scope</code>, here's why you might want to prefer it over naming conventions.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.smashingmagazine.com/2026/02/css-scope-alternative-naming-conventions/&quot;&gt;Scope!&lt;/a&gt;</p>
<h2><code>using</code> works in Node.js</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png" alt="using file = await openFile(&quot;data.txt&quot;);  // do something with file // file is automatically closed at the end of this scope"></p>
<p>I read about <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/using">the <code>using</code> declaration syntax</a> in early JS proposals, but thanks to Matt, I learned that it actually works in Node.js 24 today. What's <code>using</code>, though?</p>
<p>With a little bit of JS trickery and well-known symbols, objects can be cleaned up when their variables go out of scope. There's no need for <code>try/catch/finally</code> or other dances.</p>
<p>Does it work in browsers, too? We're close. Safari has yet to join the party.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://allthingssmitty.com/2026/02/02/explicit-resource-management-in-javascript/&quot;&gt;Use &quot;using&quot;&lt;/a&gt;</p>
<p><em>And if you want to go really deep into <code>using</code>, generators, and <code>WeakSets</code>/<code>WeakMaps</code>, <a href="https://piccalil.li/blog/its-about-to-get-a-lot-easier-for-your-javascript-to-clean-up-after-itself/">Mat has you covered over on the Piccalilli blog</a>.</em></p>
<h2>The new era of customizable <code>select</code> elements</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/35bE4QrH8Edq85sjVYTFMD/d6e9bf6e674df3bd8cbe19718d9ae3ed/select.gif" alt="Demo of some very fancy and very styled select elements."></p>
<p>Adam published a post pushing all the new web and CSS features to the limit. Granted, all this <code>select</code> sugar is mainly a Chrome-only thing right now, but this post feels like a reference piece of cutting-edge CSS in 2026.</p>
<p>Put some time on your calendar and explore <code>::picker-icon</code>, <code>::checkmark</code>, <code>&lt;selectedcontent&gt;</code>, <code>@starting-style</code>, and many more new features!</p>
<p>But what about Safari and Firefox? Well, they'll render good old <code>select</code> elements like the ones we've been dealing with for the last 10 years. So no big deal.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://nerdy.dev/nice-select&quot;&gt;Select with style&lt;/a&gt;</p>
<p>And if this isn't enough <code>select</code> magic for you today, here's Brecht with <a href="https://utilitybend.com/blog/an-update-on-customizable-selects-the-multiple-select/">selects that don't even look like selects anymore</a>.</p>
<h2>The wonderful weird web – <code>gradient.horse</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png" alt="Drawn horses on a gradient background."></p>
<p>You might remember <a href="https://drawafish.com"><code>drawafish.com</code></a> — an absolute internet classic. Today's wonderful weird web plug is the same thing, but with horses, music, and some CSS gradients.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://gradient.horse/&quot;&gt;Draw a horse&lt;/a&gt;</p>
<h2>The State of CSS in 2026</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png" alt="The CSS Selection — The state of real-world CSS usage, 2026 edition."></p>
<p>You might have noticed that <a href="https://almanac.httparchive.org/en/2025/">the yearly Web Almanac</a> didn't include a CSS chapter for a couple of years, because analyzing all that data is a ton of work and things are &quot;a little complicated&quot;.</p>
<p>Bart, who maintains <a href="https://www.projectwallace.com/">some popular CSS analyzers</a>, took the matter into his own hands and &quot;just&quot; wrote the tooling to analyze the CSS of 100k popular domains. What an initiative! ❤️</p>
<p>If you're into fun stats like the biggest discovered stylesheet being 52MB, sites with 4,858 <code>@support</code> rules, or the highest found selector specificity being <code>146,1546,159</code>, this post is for you.</p>
<p>Side note: of course, the report also includes useful stats like the one that <code>@container</code> queries were used on 10% of the crawled pages!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.projectwallace.com/the-css-selection/2026&quot;&gt;Analyze the web&lt;/a&gt;</p>
<h2>The logo soup problem</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png" alt="A deep dive into the math behind making mismatched brand logos actually look good together. And a tiny React library that does it for you."></p>
<p>If you're working in startup land like I do, you usually have a logo collection showing off how many big brands use your product somewhere on the marketing site. And most of the time, these logo clouds (lanes? soups?) look terrible because all the logos have different ratios, heights, and perceived weights.</p>
<p>Sanity released a React library to tame this problem using &quot;the Proportional Image Normalization Formula&quot;. Use these words if you want to sound smart at parties.</p>
<p>Regardless, I added the component to the WW site and it works great!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.sanity.io/blog/the-logo-soup-problem&quot;&gt;Align all these icons&lt;/a&gt;</p>
<p><em>And if you prefer vanilla JS, <a href="https://github.com/auroris/logo-soup">here's a port of the algorithm</a>.</em></p>
<h2>Throttle/block individual requests in Chrome DevTools</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png" alt="Chrome DevTools showing the menu to throttle a request."></p>
<p>Quick reminder: if you want to debug if and how certain resources affect rendering, Chrome DevTools allows you to throttle/block individual resources.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/throttle-individual-network-requests&quot;&gt;Block rendering&lt;/a&gt;</p>
<h2>On reusable OS font sizes in browsers...</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png" alt="body {   font: -apple-system-body;   /* other styles, including font-family */ } @supports (font: -apple-system-body) and (not (-webkit-touch-callout: default)) {   :root {     font-size: 100%;   } }"></p>
<p>Last week I plugged the <a href="https://webweekly.email/archive/web-weekly-182/#a-new-meta-element-is-coming-to-town">new <code>text-scale</code> element</a>, which enables Chrome to also bump up the font size if folks have increased font size settings in their OS.</p>
<p>So far so good. Adrian had a deeper look at how this behavior could work across all browser engines. And things are complicated. Or as he puts it, a bit Frankenstyle.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://adrianroselli.com/2026/02/honoring-mobile-os-text-size.html&quot;&gt;Honor the OS settings&lt;/a&gt;</p>
<h2>Random MDN – <code>&lt;search&gt;</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png" alt="HTML form including the  element."></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>I caught myself thinking &quot;Right! There is a <code>search</code> element in HTML&quot; this week. I had kind of forgotten about it (don't judge). So here's a reminder about the power of semantic HTML.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/search&quot;&gt;Search with semantics&lt;/a&gt;</p>
<h2>TIL recap – header/footer elements can change their assigned ARIA role</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg" alt="The  element gets the role &quot;banner&quot; on the root level but  or  when being nested in a  element."></p>
<p>Speaking of semantic markup, if you use elements like <code>header</code> or <code>footer</code>, they get some specific ARIA roles applied. It's <code>banner</code> for <code>header</code> elements and <code>contentinfo</code> for <code>footer</code> elements.</p>
<p>But do you know that these elements can change their role depending on where they're placed in the DOM? There's been a rather recent change to the ARIA spec, and browsers have started to ship it!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/header-and-footer-elements-lose-their-roles-in-sectioning-content/&quot;&gt;Check the roles&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New scroll &quot;stuff&quot; in the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png" alt="addEventListener(&quot;scrollend&quot;, (event) =&gt; { })  onscrollend = (event) =&gt; { }"></p>
<p>If you ever wanted to listen to a scroll end event, now you can. With Safari 26.2, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollend_event"><code>scrollend</code> entered the baseline</a>!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png" alt=".scroller {   width: 300px;   height: 100px;   overflow-y: scroll;   scrollbar-color: #000077 #bada55; }"></p>
<p>And if colored scrollbars are your thing, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/scrollbar-color"><code>scrollbar-color</code></a> works across browsers now, too!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/williamtroup/Heat.js">williamtroup/Heat.js</a> – A JavaScript library for generating interactive heatmaps.</li>
<li><a href="https://github.com/macaly/almostnode">macaly/almostnode</a> – Node.js in your browser. 👈 This is very cool!</li>
<li><a href="https://github.com/griddy-icons/griddy-icons">griddy-icons/griddy-icons</a> – A lightweight icon library.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png" alt="./npmx canary — a fast, modern browser for the npm registry"></p>
<p>If you're slightly worried about <code>npm</code> and <code>npmjs.com</code>, you're not alone. Especially since the website doesn't seem to have received updates in ages. <code>npmx</code> is a modern alternative built by the community. The site looks very slick, and especially the file explorer is such an improvement!</p>
<p>It stands out that the project isn't much older than a month and has already gathered 178 contributors. Is this one of the rare examples showing that open source and community-led efforts work? I hope so!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://npmx.dev&quot;&gt;Browse packages&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>I keep thinking about <a href="https://www.anildash.com/2026/01/05/a-tech-career-in-2026/#:~:text=don%E2%80%99t%20let%20your%20job%20get%20in%20the%20way%20of%20your%20career">Anil's quote</a>, it's such a smart and wise take.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Don't let your job get in the way of your career.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 37 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #182</title>
      <link>https://webweekly.email/archive/web-weekly-182/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-182/?ref=ww-rss</guid>
      <pubDate>Sun, 01 Feb 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #182 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you had a look at the new Navigation API (baseline newly available) already? Do you know about the <code>formmethod</code> and <code>formaction</code> HTML attributes? And are you as excited about custom invoker commands as I am?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
<a href="https://mikeriley.dev/">Mike</a> listens to <a href="https://www.youtube.com/watch?v=0k8iE0Q8qBI">&quot;Is It Making You Feel Something?&quot; by Superchunk</a> and says:</p>
<blockquote>
<p>One of my all-time favorite bands put out a new record this year, and the title track is a simple instant classic with a fun little chorus.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr>
<p><a href="https://css-tricks.com/how-to-style-the-new-search-text-and-other-highlight-pseudo-elements/">Daniel blogged about highlight pseudo-elements</a>. And if you don't know what they're about, don't worry, I learned a ton, too!</p>
<p>The commonly known one is probably <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::selection"><code>::selection</code></a> to style the text someone marks on a page.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png" alt="p::selection {   color: red;   background-color: yellow; }"></p>
<p>But wait for it, there are also a lot of funkier ones.</p>
<p>There's <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::target-text"><code>::target-text</code></a> (baseline newly available) which you can use to <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments">style highlights defined in the URL</a> (<code>#:~:text=hello</code>):</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png" alt="::target-text {   background-color: rebeccapurple;   color: white; }"></p>
<p>Then there's <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::highlight"><code>::highlight()</code></a> (almost baseline ready — Firefox has some minor issues) to add custom text highlights to your page. You might now wonder when to use this feature; <a href="https://github.com/andreruffert/syntax-highlight-element">the <code>&lt;syntax-highlight /&gt;</code> element</a> provides code highlights without the usual <code>span</code> soup.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png" alt="::highlight(rainbow-color-1) {   color: violet;   text-decoration: underline; }"></p>
<p>There are also <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::spelling-error"><code>::spelling-error</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::grammar-error"><code>::grammar-error</code></a>. Unfortunately, these two aren't in the baseline yet.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png" alt="::grammar-error {   /* ... / } ::spelling-error {   / ... */ }"></p>
<p>And very new, hot off the press: there's now <code>::search-text</code> to style &quot;find in page&quot; results, which just shipped in Chrome 144. There are no real docs for <code>::search-text</code> yet. <a href="https://www.stefanjudis.com/today-i-learned/how-to-style-find-in-page-substrings/">Check out my quick blog post to learn more</a>.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png" alt="Screenshot 2026-02-02 at 16.04.52::search-text {   background: var(--blue);   color: white; }  ::search-text:current {   background: var(--blue-darker);   color: white;   text-decoration: currentColor solid underline; }"></p>
<p>I keep being amazed by how far CSS has come!</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mdvfqdryes23">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116002294625248785">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7424147181483352065-Kkb3">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<h2>Web Weekly housekeeping</h2>
<p>Web Weekly's open rate is at 48% these days. Marketers would be jealous, but not too long ago it was in the mid-fifties. I'm not really concerned about it (yet), but <a href="https://cassidoo.co/post/do-not-scale-2/">Cassidy shared that her newsletter stats improved</a> simply by asking people to reply to her emails. Even though I risk destroying my inbox with this ask, <strong>if you enjoy my tiny newsletter, could you reply to it</strong>? I'd really like to see if more replies will help Web Weekly get into the primary inbox.</p>
<p>Secondly, David reported that Web Weekly doesn't work well in the Spark email client. I'm considering going full-blown custom HTML for a while. Are there more issues? Do you have any troubles reading the email in your client? If so, you guessed it, hit reply and let me know!</p>
<p>And lastly, writing Web Weekly takes a lot of time. And with the AI-volution being in full swing, I sometimes wonder if there's a future for blogging, curating, and indie publishing. If you enjoy Web Weekly, <strong>earn yourself a huge bag of karma points</strong> and join 33 supporters on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference!</p>
<p>And that's it! Now, let's really get into some web stuff. This edition is jam-packed and full of good stuff!</p>
<h2>Something that made me smile this week</h2>
<p>I've just discovered <code>detail.design</code>, and it's nothing but amazing to look at well-crafted UI examples. That's the stuff I want to see on the web!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://detail.design/&quot;&gt;Look at eye candy&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://www.susandavid.com/newsletter/when-to-grit-and-when-to-quit/">&quot;The Hidden Benefits of Quitting&quot;</a> → &quot;If a longstanding commitment no longer feels rewarding to you, take those feelings seriously.&quot;</li>
<li><a href="https://thegoodbusy.substack.com/p/i-waste-so-much-time-chasing-people">&quot;I waste so much time chasing people.&quot;</a> → I love the company-internal <strong>anti-ghosting rule</strong>!</li>
<li><a href="https://hvpandya.com/invisible-work">&quot;Invisible work&quot;</a> → &quot;Watch who people actually rely on when something important needs to happen.&quot;</li>
</ul>
<h2>CodePen 2025 highlights</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png" alt="CodePen 2025 highlights"></p>
<p>Our friends over at CodePen released 2025's most popular pens, and, of course, the collection is full of eye candy. I'm always amazed by the quality people put into &quot;fiddling on CodePen&quot; but without surprise, my favorites were the ones coming without three.js or GSAP.</p>
<ul>
<li><a href="https://codepen.io/jkantner/pen/LEPrqBd">Check this CSS/SVG-only checkmark effect</a></li>
<li><a href="https://codepen.io/t_afif/pen/zxOeWqV">Learn how to implement inset border radius effects</a></li>
<li><a href="https://codepen.io/HejChristian/pen/YPzLbYX">Use SVG to create holographic effects</a></li>
</ul>
<p>And my absolute favorite is <a href="https://codepen.io/BalintFerenczy/pen/KwdoyEN">this electrified border</a>; no JS required!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://codepen.io/2025/popular/pens/&quot;&gt;Be amazed&lt;/a&gt;</p>
<h2>Two handy <code>promise.all</code> utils</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png" alt="import { all } from 'better-all'  const { a, b, c } = await all({ async a() { return getA() }, // 1s   async b() { return getB() }, // 10s   async c() { return getC(await this.$.a) }  // 10s (waits for a) }) // Total: 11 seconds - optimal parallelization!"></p>
<p>I usually list interesting GitHub projects at the end, but this JavaScript util is such a banger that it deserves its own spot! You know that when you use <code>Promise.all</code> you can wait for promises to resolve in parallel. However, things become interesting when the promises depend on each other.</p>
<p>Usually, you'd then need to untangle everything to get the optimal loading order. <a href="https://github.com/shuding/better-all"><code>better-all</code> does this for you</a>! I love it!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png" alt="  function parallelize&lt;T extends unknown[]&gt;(promises: { 	[K in keyof T]: Promise&lt;T[K]&gt; }) { 	return Promise.all(promises) }"></p>
<p>If you want to ensure you never <code>await</code> your promises before passing them to <code>Promise.all</code>, <a href="https://dodov.dev/blog/how-to-do-parallelization-right-with-promise-all">use this handy <code>parallelize</code> TypeScript util</a>!</p>
<h2>The <code>:only-child</code> view transition trick</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png" alt="::view-transition-old(.filter-item):only-child {   animation-name: animate-out; }  ::view-transition-new(.filter-item):only-child {   animation-name: animate-in; }"></p>
<p><a href="https://frontendmasters.com/blog/reacts-viewtransition-element/">Chris blogged about React's new <code>ViewTransition</code> element</a> and dropped a link to a nifty view transition trick.</p>
<p>View transitions make it very easy to morph elements into a new state, but I still struggled creating custom enter/exit animations. Cyd shared how you can use <code>:only-child</code> for this. TIL!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://cydstumpel.nl/being-lazy-with-view-transition-old-and-new/&quot;&gt;Transition in and out&lt;/a&gt;</p>
<h2>Custom invoker commands</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png" alt="const d = document.getElementById(&quot;d&quot;);  d.addEventListener(&quot;command&quot;, (e) =&gt; {   if (event.command === &quot;--change-bg&quot;) {     d.style.backgroundColor = e.source.value;   } });"></p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API">Invoker commands</a> just recently went into the baseline. The <code>command</code> and <code>commandfor</code> attributes let you define interactivity with declarative HTML.</p>
<p>But what about custom functionality? Pawel shares an often overlooked feature, explaining that you can define custom commands with a double-dash (<code>--do-something</code>). Good stuff!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://pawelgrzybek.com/more-invoker-commands-and-more-reasons-not-to-use-javascript-please/&quot;&gt;Add custom commands&lt;/a&gt;</p>
<h2>The wonderful weird web – Draw a horse</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png" alt="A horse made of icons on a desktop"></p>
<p>When I first looked at this &quot;project&quot;, I didn't really understand what was in front of me. I've got no idea who made this or why, but I'm fascinated by the ambition to use software to draw a horse in the most ridiculous ways. Chapeau!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://interactingincorrectly.online/lookaround.html&quot;&gt;Interact incorrectly&lt;/a&gt;</p>
<h2>A new meta element is coming to town</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png" alt="meta name=text-scale content=scale /"></p>
<p>To be honest, I didn't know that most mobile browsers don't pick up when the default OS font size is bumped up. Josh shares the current state and how a new <code>meta</code> element can help make the web a bit more usable.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshtumath.uk/posts/2026-01-27-try-text-scaling-support-in-chrome-canary/&quot;&gt;React to user preferences&lt;/a&gt;</p>
<h2>Accessibility barriers introduced by text effects</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png" alt="a href=https://something.com aria-label=link span aria-hidden=true spanL/spanspani/spanspann/spanspank/span /span /a  "></p>
<p>First off, if you're not reading Adrian's blog, you definitely should. I'm thankful and amazed by the accessibility knowledge he shares for free and the effort he puts into testing web interfaces.</p>
<p>Now, if you ever wondered whether fancy text effects paired with countless <code>span</code> elements, <code>aria-hidden</code>, and <code>aria-label</code> have an impact on UX or A11y, this post might become a future reference piece!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://adrianroselli.com/2026/01/barriers-from-links-with-aria.html&quot;&gt;Keep things accessible&lt;/a&gt;</p>
<h2>The problem of modern frontend development</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png" alt="Finally, the component also includes a hidden input type=radio but only if its used inside of a form element. Weird!"></p>
<p>Paul went on the journey to understand how radio buttons are rendered when using a &quot;modern Frontend&quot; (<code>ShadCN</code> and <code>Radix</code>) and well...</p>
<blockquote>
<p>To understand how our radio buttons work I need to understand two separate component libraries and hundreds of lines of React.</p>
</blockquote>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://paulmakeswebsites.com/writing/shadcn-radio-button/&quot;&gt;Keep things simple&lt;/a&gt;</p>
<h2>Yet another great CSS reset</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png" alt="  @layer { 	*, 	*::before, 	*::after { 		box-sizing: border-box; 		background-repeat: no-repeat; 	}"></p>
<p>Nothing more to say than I just love reading people's CSS resets. Here's Declan's take, and it includes some smart tricks!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://vale.rocks/posts/css-reset&quot;&gt;Get inspired&lt;/a&gt;</p>
<h2>Quick HTML tricks</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png" alt="fieldset form=info legendWhat is your name?/legend labelName: input type=text/label /fieldset form id=user !-- other form content -- /form"></p>
<p>Quick'n'dirty; do you know that you can place form elements outside of the actual <code>form</code>? <a href="https://html-css-tip-of-the-week.netlify.app/tip/fieldset-and-legend/">Kevin describes how to do it with a <code>fieldset</code></a>. But it works with <code>input</code> and <code>button</code> elements via the <code>form</code> attribute, too.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png" alt="button      formaction=/some-other-endpoint     formmethod=get     formnovalidateSubmit/button"></p>
<p>And speaking of buttons, here's another party trick: <a href="https://www.stefanjudis.com/today-i-learned/button-elements-offer-attributes-to-change-form-behavior/">you can overwrite a form's action or endpoint via <code>formaction</code> and <code>formmethod</code></a>. This is wild, isn't it?</p>
<h2>Anchor positioning isn't just for popups</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png" alt="Comments connected with lines to show parent/child relationships"></p>
<p>Anchor positioning entered the baseline last month, and while everyone is talking about popups, Roland shares how to use the feature to draw connections with pseudo-elements. That's some very funky CSS!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://rolandfranke.nl/frontend-stories/drawing-connections-with-css-anchor-positioning/&quot;&gt;Anchor without using popups&lt;/a&gt;</p>
<p><em>FYI: the page widget shows that anchor positioning isn't in the baseline yet. I checked the demo in Chrome, Firefox, and Safari, and it renders fine.</em></p>
<h2>Random MDN – <code>console.timeStamp</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png" alt="console.timeStamp(   &quot;Event with Link&quot;, // label   performance.now(), // startTime (instant)   undefined, // endTime (instant)   &quot;Tasks&quot;, // trackName   &quot;My Extension&quot;, // trackGroup   &quot;primary-light&quot;, // color);"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Do you know that there's a non-standard <code>console</code> method to add markers to the dev tools performance panel? It's primarily a Chrome thing, but I think that's where we're all debugging perf issues anyway, right?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/console/timeStamp_static&quot;&gt;Mark your timeline&lt;/a&gt;</p>
<h2>TIL recap – <code>.</code> doesn't match all characters in regular expressions</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png" alt="/a.b/.test('ab');     // false /a.b/.test('ab');     // false /a.b/.test('a2028b'); // false /a.b/.test('a2029b'); // false"></p>
<p>Even though I blogged about it nine (!) years ago, I ran into a regular expression &quot;bug&quot; the other day. Do you know that <code>.</code> doesn't match all characters?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/the-dot-in-regexp-doesnt-match-all-characters-in-javascript/&quot;&gt;Match everything&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png" alt="The Navigation API allows control over all navigation actions for the current window in one central place, including initiating navigations programmatically, examining navigation history entries, and managing navigations as they happen."></p>
<p>With Firefox 147, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API">the Navigation API</a> entered the baseline. It's the successor to previous web platform features such as the History API and <code>window.location</code>. If you want to learn what it's about, Ollie has been secretly blogging about it!</p>
<ul>
<li><a href="https://olliewilliams.xyz/blog/the-navigate-event/">The navigate event</a></li>
<li><a href="https://olliewilliams.xyz/blog/initiating-navigations-with-the-navigation-api/">Initiating navigations with the Navigation API</a></li>
<li><a href="https://olliewilliams.xyz/blog/managing-focus-with-the-navigation-api/">Focus Management with the Navigation API</a></li>
<li><a href="https://olliewilliams.xyz/blog/preventing-navigation/">Preventing same-document and cross-document navigation</a></li>
</ul>
<p>All these posts will definitely get you up to speed!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/steipete/RepoBar">steipete/RepoBar</a> – Yet another native GitHub repo status app.</li>
<li><a href="https://github.com/vicanso/zedis">vicanso/zedis</a> – A native Redis GUI built with Rust and GPUI.</li>
<li><a href="https://github.com/tldev/posturr">tldev/posturr</a> – A macOS app that blurs your screen when you slouch.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png" alt=" Exposed By Default  This is the data your browser hands out automatically, every time!"></p>
<p>If you wonder how you're tracked across the internet, &quot;Exposed by default&quot; provides all the information your browser shares about you. And it's a lot!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://neberej.github.io/exposedbydefault/&quot;&gt;Understand your fingerprint&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://carlbarenbrug.com/friction">Carl shares how friction can sometimes be a good thing</a>, and I agree with every word.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Humans don't operate best at machine speed. We think, hesitate, reconsider, and change our minds. Design that ignores this doesn't make people more efficient — it instead pushes them to move faster than their intent.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 33 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #181</title>
      <link>https://webweekly.email/archive/web-weekly-181/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-181/?ref=ww-rss</guid>
      <pubDate>Sun, 18 Jan 2026 23:00:00 GMT</pubDate>
      <description>Web Weekly #181 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Will you use Chrome's new <code>&lt;geolocation&gt;</code> HTML element? Are you excited about CSS anchor positioning going baseline? And do you know what a self-closing <code>&lt;div /&gt;</code> really does?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Olivier listens to <a href="https://www.youtube.com/watch?v=8uc4-t9T4Xk">&quot;Shelf Lives - Where Did I Go?&quot;</a> and says:</p>
<blockquote>
<p>I simply love this song's power and energy!
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr>
<p><a href="https://almanac.httparchive.org/en/2025/">The new Web Almanac was released</a>! If you don't know about the project: the team behind it takes all the data gathered from <a href="https://httparchive.org/">the HTTP Archive</a> to analyze and understand the &quot;state of the web&quot;. It's always super interesting to read and, almost as a tradition, I went over it and <a href="https://bsky.app/profile/stefanjudis.com/post/3mcjtyjit5s2g">shared the interesting facts on Bluesky</a>. Here are some fun ones.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png" alt="3rd party data stats are as wild as always. For all analyzed pages, the median 3rd party request count is around ~80.  80(!) third-party requests per page. 🤯"></p>
<p>The amount of third-party activity on the web is just mind-boggling...</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png" alt="Not surprising and not new; only 48% of mobile comes with good Core Web Vitals."></p>
<p>The web is slow...</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png" alt="Nothing more to add. More is always better, right? 🫣  &gt; As of July 2025, the same median page is now 2,362 KB"></p>
<p>... and heavy. The median site is 2.3MB primarily to ship some text and images. Wild times!</p>
<p>If you're curious about more bite-sized stats, <a href="https://css-tricks.com/http-archive-2025-web-almanac/">Geoff blogged about it</a>, but either way:</p>
<p><a href="https://almanac.httparchive.org/en/2025/">Give the Almanac a read</a>; it's a ton of work (kudos to all the authors and analysts) and you'll definitely learn something new!</p>
<hr>
<p>A huge thank you and a huge bag of karma points go to <strong>Jens and Temani</strong> this week. Thank you for supporting indie publishing by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 34 supporters on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference!</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mcshgtqsmk2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/115923602696798319">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7419110893562769408-awSf">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png" alt="5 Awesome Scroll Fade Effects with Vanilla JavaScript: 1. Don't 2. Please don't 3. Don't it sucks 4. Seriously, don't do it 5. Bro please "></p>
<p>David rants about the all-too-common &quot;scroll-to-fade&quot; technique. Thinking back, I've been lucky enough to never actually have to build one of these. I mean, why would you heavily delay showing precious content, right?</p>
<p>David's idea of the web developer community pretending that this feature is impossible to build made me smile, though.</p>
<blockquote>
<p>We're all developers here. Can we collectively pretend scroll fade is technically impossible now?</p>
</blockquote>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dbushell.com/2026/01/09/death-to-scroll-fade/&quot;&gt;Take care of scroll&lt;/a&gt;</p>
<p>It's funny though, because <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll-driven_animations">scroll-driven animations only recently entered the web</a>. I guess it's like all fancy web dev things: let us all be responsible for the things we build.</p>
<h2>No code</h2>
<ul>
<li><a href="https://terriblesoftware.org/2026/01/08/life-happens-at-1x-speed/">Life Happens at 1x Speed</a> → &quot;The irony is that consuming faster often means processing less.&quot;</li>
<li><a href="https://www.experimental-history.com/p/good-conversations-have-lots-of-doorknobs">Good conversations have lots of doorknobs</a></li>
</ul>
<h2>Exciting new Chrome features</h2>
<p>Chrome is always at the forefront of releasing new things, but there have been some changes that really fix fundamental web issues. Bramus was on a roll and blogged about all of them.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png" alt="From Chrome 145 onwards, 100vw will automatically subtract the size of the scrollbar from it if you have forced the html element to always show a vertical scrollbar or if you reserve space for it (using scrollbar-gutter: stable)."></p>
<p>If you're fighting the problem that <code>100vw</code> doesn't consider scrollbars, <a href="https://www.bram.us/2026/01/15/100vw-horizontal-overflow-no-more/">a Chrome change landing in 145 might help</a>.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png" alt="dialog { 	overscroll-behavior: contain; }  dialog::backdrop { 	overflow: hidden; 	overscroll-behavior: contain; }"></p>
<p>You probably know the problem that when you open a modal dialog, you have to set <code>overflow: hidden</code> on the <code>html</code> element to prevent the underlying content from scrolling. It works but was never a good solution. <a href="https://www.bram.us/2025/11/25/use-overscroll-behavior-contain-to-prevent-a-page-from-scrolling-while-a-dialog-is-open/">Chrome now supports a better way to do it</a>. Let's hope the other vendors follow suit quickly.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png" alt="Vertical Tabs — Enables an option for showing tabs to the side. – Mac, Windows, Linux"></p>
<p>And lastly, <a href="https://www.bram.us/2026/01/16/chrome-145-adds-experimental-support-for-vertical-tabs/">an experimental version of vertical tabs for Chrome is in the making</a>. 🎉</p>
<h2>Sound on websites</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png" alt="&quot;Users will hate sound.&quot; -&gt; Only if you do it poorly. Aggressive, loud, or unnecessary sounds are annoying; subtle, appropriate, optional sounds are not. The autoplay video backlash was about intrusion, not about sound itself. Context matters."></p>
<p>I know of exactly two websites that use sounds: one is <a href="https://www.joshwcomeau.com/">Josh's blog</a> and the other one is LinkedIn. Every time I upload a video on LinkedIn, it beeps, and honestly, I like it. Should there be more sound effects on the web?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://userinterface-wiki.vercel.app/sounds-on-the-web&quot;&gt;Delight with sound&lt;/a&gt;</p>
<h2>Bouncy window resizing</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4iGESrGGYOAQ9gy8AuUgEj/48aa19973107d1c309ba254c57b37665/bounce.gif" alt="Window being resized. The text scales with the resize action and bounces back to a readable state."></p>
<p>Lynn Fischer redesigns her site every year, and it's always great. <a href="https://lynnandtonic.com/archive/2021/">The 2021 redesign was incredible</a> (resize the window!). This year the redesign is a bit more subtle but still includes fun resize functionality using <a href="https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver">the ResizeObserver API</a>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://lynnandtonic.com/thoughts/entries/case-study-2025-refresh/&quot;&gt;Bounce!&lt;/a&gt;</p>
<h2>Web interface guidelines</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png" alt="Web Interface Guidelines — Interfaces succeed because of hundreds of choices. This is a living, non-exhaustive list of those decisions. Most guidelines are framework-agnostic, some specific to React/Next.js. Feedback is welcome."></p>
<p>I'm really no fan of Vercel, but their public interface guidelines include good stuff. Do you know of more companies putting these out? I'd love to learn about the UI quality standards of other big players.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://vercel.com/design/guidelines&quot;&gt;Ship good stuff&lt;/a&gt;</p>
<h2>The wonderful weird web – Draw on the world map</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png" alt="Artboard that includes &quot;random&quot; pixel art."></p>
<p>There's this site where people can log in to draw pixel art on the maps of this world, and it's a wonderfully weird collection of pixel art. This is how my area looks! 👆</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://wplace.live/&quot;&gt;Be fascinated&lt;/a&gt;</p>
<h2>The custom elements manifest</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png" alt="The missing link for web components"></p>
<p>I heard about <a href="https://custom-elements-manifest.open-wc.org/">the Custom Elements Manifest</a> for the first time <a href="https://daverupert.com/2025/10/custom-elements-manifest-killer-feature/">when Dave blogged about it</a>, and it seems like it will improve the tooling around web components drastically.</p>
<p>If I understand this correctly, you can now scan, parse, and document your web components to display them in Storybook or have much-needed editor completions.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/the-missing-link-for-web-components/&quot;&gt;Document your web components&lt;/a&gt;</p>
<h2>What actually is TTFB?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png" alt="Why all the details? Well, to help you understand how useless it is to use 103 Early Hints just to get a better TTFB. Usually, the 103 response will contain useful stuff that helps improve performance. There are parties that just try to manipulate TTFB."></p>
<p>If you care about web performance, looking at <strong>Time to First Byte</strong> is often a first step. But what does this metric actually tell you? It turns out things are very complicated when you look at the first bytes. Robin provides massive detail and explains what you need to watch out for! Highly recommended.</p>
<p>And if learning about TTFB isn't enough, the post also includes some spiciness showing how &quot;certain&quot; companies fake a good TTFB metric with useless <code>103 Early Hints</code> headers. Ouch.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://calendar.perfplanet.com/2025/ttfb-doesnt-mean-what-you-think-it-means/&quot;&gt;Understand your metrics&lt;/a&gt;</p>
<h2>More declarative HTML: <code>&lt;geolocation&gt;</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png" alt="geolocation   onlocation=handleLocation(event)   autolocate   accuracymode=precise /geolocation"></p>
<p>Chrome 144 (released last week) ships a new HTML element. And what can I say? I'm all for more native elements!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/geolocation-html-element?hl=en&quot;&gt;Ask for permission&lt;/a&gt;</p>
<p><em>And if you're into declarative HTML, you should definitely check out <a href="https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API">Invoker Commands, which recently went into Baseline</a>!</em></p>
<h2>For the Mac users</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png" alt="macOS Tidbits — Some neat conveniences for macOS users (or just the macOS-curious)"></p>
<p>I thought I was pretty good on the Mac power user scale, but after reading these tidbits, I noticed that I need to level up. This tip, for example:</p>
<blockquote>
<p>Hold <code>⌘</code> to interact with background windows without bringing them into focus.</p>
</blockquote>
<p>I mean, what? How could I not know about this?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://macos-tidbits.lai.nz/&quot;&gt;Be a power user&lt;/a&gt;</p>
<h2>Random MDN – <code>system-ui</code> and friends</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png" alt="system-ui — Glyphs are taken from the default user interface font on a given platform. Because typographic traditions vary widely across the world, this generic is provided for typefaces that don't map cleanly into the other generics."></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that you can set the default operating system font via <code>font-family: system-ui</code>? There's also <code>ui-serif</code>, <code>ui-sans-serif</code>, <code>ui-monospace</code>, and <code>ui-rounded</code>; they're Safari-only, but useful if you're after the original Apple look.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-family#system-ui&quot;&gt;Match the system&lt;/a&gt;</p>
<h2>TIL recap – Are self-closing HTML elements a thing?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png" alt="div class=blue /   Blue   div class=red /     Red     div class=green /       Green     /div   /div /div"></p>
<p>Trick question: can you imagine what the HTML above renders? Note the self-closing <code>div</code> elements.</p>
<p>I won't reveal the answer, but there's a high chance that you'll be very surprised.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/self-closing-tags-are-mostly-meaningless-in-html/&quot;&gt;Understand HTML&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png" alt="Multiple boxes explaining the concept of anchor positioning. There's one box in the middle and multiple boxes are anchored around it."></p>
<p>With Firefox 147 (released last week), CSS anchor positioning moved into cross-browser territory. If you were holding back on learning this incredible new CSS feature because the browser support wasn't there, now's the time to look into it!</p>
<p>And a good start is the CSS-Tricks reference guide.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/css-anchor-positioning-guide/&quot;&gt;Anchor&lt;/a&gt;</p>
<p><em>And if this guide is too long for you today, <a href="https://frontendmasters.com/blog/popover-context-menus-with-anchor-positioning/">here's a very practical example from Chris</a>.</em></p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/brunopulis/awesome-a11y">brunopulis/awesome-a11y</a> – A curated list of accessibility resources.</li>
<li><a href="https://github.com/3ru/eslint-plugin-baseline-js">3ru/eslint-plugin-baseline-js</a> – ESLint plugin to enforce the JavaScript Baseline.</li>
<li><a href="https://github.com/argyleink/css-color-component">argyleink/css-color-component</a> – A modern color picker for the web with support for all spaces.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png" alt="ReliCSS with a textarea on the left and recommendations to remove old CSS on the right."></p>
<p>Do you remember all those wild CSS hacks we had to deal with a decade ago like <code>*+html .ie7-only {}</code> or <code>::-moz-selection</code>? Luckily those times are mostly gone, but they'll probably live on forever in old CSS resets andaAbandoned sites. If you want to double-check whether you're shipping relics from the past, ReliCSS can help discover them.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.alwaystwisted.com/relicss/&quot;&gt;Forget the past&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://blog.jim-nielsen.com/2026/feedback-for-those-who-make-software/">Here's Jim (one of my favorite bloggers) with something I can very much stand behind</a> in the new world of &quot;no effort&quot; creations and coding.</p>
<p>::: highlight quote</p>
<blockquote>
<p>My desire to give you constructive feedback is in direct correlation to your effort to care — about your communications, about what you ship, even about what you don't ship.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 34 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
  </channel>
</rss>