CSS and design systems people - BlogFlock2025-05-09T05:21:04.829ZBlogFlockMichelle Barker, Hidde de Vries, Sara Joy, Robin Rendle, Robin Rendle, Stephanie Eckles, Adam Argyle, Sara SoueidanKandidaatstelling voor AB - Hidde's bloghttps://hidde.blog/ab-nl/2025-05-01T00:00:00.000Z<p>Mijn naam is Hidde de Vries, specialist standaarden bij <a href="https://logius.nl/">Logius</a> (deel van de Rijksoverheid). Hierbij vraag ik om je stem voor mijn verkiezing in het Advisory Board van het W3C.</p>
<p>Mijn enthousiasme voor het web gaat zo'n 20 jaar terug, toen ik op de middelbare school mijn eerste website maakte. Wat een mooi platform! Sinds die tijd werkte ik onder andere als webontwikkelaar en specialist digitale toegankelijkheid, waarbij ik vaak bruggen bouwde tussen beide beroepsgroepen.</p>
<p>Bij het W3C was ik al eens <a href="https://w3.org/People/Hidde">onderdeel van het Team</a> (bij WAI, 2019-2022), waar ik onder andere aan informatie over toegankelijkheid werkte en aan de WCAG en ATAG Report Tools. Momenteel ben ik actief in de Open UI Community Group, verschillende toegankelijkheids-gerelateerde Working Groups en de Web Sustainability Interest Group.</p>
<p>Als ik word verkozen wil ik:</p>
<ul>
<li><strong>interactie met het AB verbeteren</strong>: door meer contact te zoeken met Members en de bredere community, om te zorgen dat hun inbreng terugkomt in ons advies, en door te zoeken naar consensus rondom bestuurlijke vraagstukken tussen Board, TAG, Members en verschillende werkgroepen.</li>
<li><strong>het W3C aantrekkelijker maken</strong>: mensen komen nu al naar W3C om aan webstandaarden te werken. Maar we kunnen een grotere groep bereiken als we onboarding verbeteren. Ik wil uitzoeken wat mensen nu tegenhoudt om te beginnen en met die informatie verbeterslagen maken.</li>
<li><strong>een nieuw geluid inbrengen</strong>: ik ben niet echt nieuw in de W3C community, maar ik ben vrij nieuw in het bestuurlijke deel. Ik hoop dat die verse blik waardevol gaat zijn voor een AB dat op zoek is naar een nieuwe identiteit en missie.</li>
<li><strong>de gebruiker centraal stellen</strong>: bijna te voor de hand liggend om te vermelden, gebruikers staan immers al centraal in de <a href="https://www.w3.org/TR/w3c-vision/">W3C Vision</a>, maar in de praktijk kan het gebeuren dat zaken als toegankelijkheid, internationalisatie en privacy het onderspit delven. Er is kennis van zowel techniek als gebruikers nodig, en ik wil die van mij inzetten om processen te verbeteren.</li>
</ul>
<p>Wat ik wil bijdragen, in willekeurige volgorde:</p>
<ul>
<li>specialisme in webtoegankelijkheid (langere tijd) en duurzaamheid (sinds kort). Ik leer snel en duik graag in nieuwe dingen.</li>
<li>gewerkt in verschillende sectoren die het web nodig hebben en gebruiken: overheid, een browsermaker en de maker van een authoring tool (CMS).</li>
<li>veel ervaring met communiceren over standaarden richting technische communities, met name de web developer community. Ook meerdere congressen georganiseerd.</li>
<li>eerdere ervaring bij W3C, als Invited Expert, Member en Team.</li>
<li>recente ervaring met en diepe technische kennis van web development.</li>
<li>achtergrond in filosofie en (kort) kunstmatige intelligentie, ik neem dus het perspectief van de geesteswetenschappen mee, niet alleen een technische blik. Ik kan daardoor ook goed kwesties van meerdere kanten bekijken.</li>
</ul>
<p>Voor vragen: stuur me gerust een berichtje op W3C Slack of email me op <a href="mailto:hidde@hiddedevries.nl">hidde@hiddedevries.nl</a>.</p>
<hr/>
<p>Originally posted as <a href="https://hidde.blog/ab-nl/">Kandidaatstelling voor AB</a> on <a href="https://hidde.blog">Hidde's blog</a>.</p>
<p><a href="mailto:hidde@hiddedevries.nl?subject=Reply%20to:%20Kandidaatstelling voor AB">Reply via email</a></p>Running for the AB - Hidde's bloghttps://hidde.blog/ab/2025-05-01T00:00:00.000Z<p>My name is Hidde de Vries, accessibility standards specialist at <a href="https://logius.nl/about-logius">Logius</a> (part of the Dutch government). I would appreciate your support of my running for the W3C's Advisory Board.</p>
<p>I fell in love with the web ever since I built my first website in high school, almost 20 years ago. What a cool platform to build for! Since then, I worked professionally as a web developer and accessibility specialist, often building bridges between these fields.</p>
<p>At the W3C, I've been a <a href="https://www.w3.org/People/hidde/">member of the Team</a> (at WAI, 2019-2022), where I worked on accessibility guidance, authoring tool accesibility, the <a href="https://www.w3.org/WAI/eval/report-tool/">WCAG Report Tool</a> and the <a href="https://www.w3.org/WAI/atag/report-tool/">ATAG Report Tool</a>. I'm currently a participant in the <a href="https://open-ui.org/">Open UI Community Group</a>, various accessibility-related Working Groups and the <a href="https://www.w3.org/groups/ig/sustainableweb/">Web Sustainability Interest Group</a>.</p>
<p>If elected, I want to:</p>
<ul>
<li><strong>help improve what engagement with the AB looks like</strong>, by doing more outreach to Members and the wider community, to ensure their input is represented in our advice, and by working to find consensus on governance issues between Board, TAG, Members and groups.</li>
<li><strong>make W3C more attractive</strong>; people go to the W3C for web standardisation today, but we can reach more potential if we improve onboarding. I want to find out what stops people from getting started or engaging with our work and use that to make improvements.</li>
<li><strong>bring fresh perspective on the future</strong>; though I can't say I'm new to the W3C community, I am new to most governance aspects of it. My hope is this fresh perspective can be an asset to an AB that is orienting towards a new identity and mission.</li>
<li><strong>advocate for users</strong>, the primary constituents of the web. Almost too obvious to call out, as users are central to the W3C vision, and who else would we advocate for? In practice, though, user needs around accessibility, internationalisation and privacy are easily overlooked. They require matching up (deep) technical specifics with user needs. I want to use my experience with both to help improve the process.</li>
</ul>
<p>What I'd like to bring to the AB, in no particular order:</p>
<ul>
<li>specialism in web accessibility (for long) and web sustainability (as of recently). Also a fast learner happy to dive into things I'm not specialised in.</li>
<li>worked in a broad range of sectors that use and need the web: public sector, including government, a browser vendor and an authoring tool vendor.</li>
<li>proven record of communicating about standards development to tech communities, the web developer community in particular (see my <a href="https://hidde.blog/blog">blog</a> and <a href="https://talks.hiddedevries.nl/">talks</a>). Also co-organised developer conferences.</li>
<li>previous experience at W3C, as an Invited Expert, Member and Team.</li>
<li>hands-on experience and deep technical knowledge of web development</li>
<li>background in Philosophy and (briefly) AI, meaning I could bring a humanities perspective and not just a technological view, and that I am trained to view issues from many angles.</li>
</ul>
<p>Any questions: feel free to reach out via W3C Slack or email me on <a href="mailto:hidde@hiddedevries.nl">hidde@hiddedevries.nl</a>.</p>
<hr/>
<p>Originally posted as <a href="https://hidde.blog/ab/">Running for the AB</a> on <a href="https://hidde.blog">Hidde's blog</a>.</p>
<p><a href="mailto:hidde@hiddedevries.nl?subject=Reply%20to:%20Running for the AB">Reply via email</a></p>WebDev Challenge - S2E2 - Adam Argylehttps://nerdy.dev/webdev-challenge-s2e2?utm_source=rss2025-04-29T15:45:22.000Z
<img style="display: none" src="https://nerdy.dev/media/the-louigi-boards.jpg" alt="Text emphasized alt text example" height="995" width="1920" />
<p>What could you create if you had 30 minutes to plan and 4 hours to build? Me,
<a href="https://www.boot.dev/teachers/lane-wagner">Lane Wagner</a>,
<a href="https://www.shook.codes/">Sarah Shook</a>, Nikki Meyers,
<a href="https://bento.me/shashilo">Shashi Lo</a>, and
<a href="https://www.nickyt.co/">Nick Taylor</a> took on the
<a href="https://www.youtube.com/playlist?list=PLz8Iz-Fnk_eTkZvSNWXW_TKZ2UwVirT2M">Web Dev Challenge</a>
to find out.</p>
<iframe loading="lazy" style="aspect-ratio: 16/9; inline-size: 100%;" width="560" height="315" src="https://www.youtube.com/embed/ftYmXoH0V5I?si=4rd_h-WHQMaVY9_A" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<p>They picked the Napoleon Dynamite thumbnail for Lane and I 🤣</p>
<div style="transform: rotateY(.5turn)">
<p><img
loading="lazy"
src="https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExMjBidjVpNTE3ZTdmNnpjcndhd2N3cjJuZXA0Y21jNzJucXNyZGhrZyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/l3vRmoOpMBTLrPEsw/giphy.gif"
alt=""
title="Napoleon Dynamite doing butterfly in sign language "
decoding="async"
width="486"
height="280"
/></p>
</div>
<h2>
The Challenge
<a name="the-challenge" href="#the-challenge">#</a>
</h2>
<p>We lucked out and got a rad one.</p>
<p><q>Single player, multiplayer, cooperative, competitive, or something totally
different — your challenge is to come up with <b>something fun that is played
across at least two
devices</b>.<br><br><a href="https://codetv.link/temporal">Temporal</a>’s
workflow tools will allow you to manage sending information between devices
dependably.</q></p>
<p>Lane and I def
<a href="https://youtu.be/ftYmXoH0V5I?si=wTkfiVPB_ko8gDvP&t=140">leaned into the "fun" portion</a>
of the challenge.</p>
<p>We chose to try a game that uses the
<a href="https://developer.mozilla.org/en-US/docs/Web/API/Media_Capture_and_Streams_API">camera video stream API</a>
to feed faces to
<a href="https://ai.google.dev/edge/mediapipe/solutions/guide">Media Pipe</a> (locally
running a face detection machine learning model) to flap a bird's wings in a
flappybird-like game.</p>
<p><picture>
<source srcset="/media/codetv-worktogether.avif" type="image/avif">
<source srcset="/media/codetv-worktogether.webp" type="image/webp">
<img
loading="lazy"
src="/media/codetv-worktogether.jpg"
alt=""
title="Lane and I working at a white board "
decoding="async"
width="1920"
height="1280"
/>
</picture></p>
<p>A Temporal
<a href="https://learn.temporal.io/courses/interacting_with_workflows/">workflow</a> will
capture the game round and let us see all the player moves.</p>
<p><picture>
<source srcset="/media/codetv-planning.avif" type="image/avif">
<source srcset="/media/codetv-planning.webp" type="image/webp">
<img
loading="lazy"
src="/media/codetv-planning.jpg"
alt=""
title="Lane and I working at a white board "
decoding="async"
width="1440"
height="960"
/>
</picture></p>
<p>At least that's what we planned on…</p>
<picture>
<source srcset="https://fonts.gstatic.com/s/e/notoemoji/latest/1f605/512.webp" type="image/webp">
<img src="https://fonts.gstatic.com/s/e/notoemoji/latest/1f605/512.gif" alt="😅" width="100" height="100">
</picture>
<h2>
The Teams
<a name="the-teams" href="#the-teams">#</a>
</h2>
<p>These were the lovely folks I got to spend 4 hours with:</p>
<ol>
<li><a href="https://www.shook.codes/">Sarah Shook</a> && Nikki Meyers</li>
<li><a href="https://bento.me/shashilo">Shashi Lo</a> &&
<a href="https://www.nickyt.co/">Nick Taylor</a></li>
<li><a href="https://www.boot.dev/teachers/lane-wagner">Lane Wagner</a> && I</li>
</ol>
<h2>
The Tools
<a name="the-tools" href="#the-tools">#</a>
</h2>
<p><a href="https://codetv.link/temporal">Temporal</a> was pretty cool, but as
you'll see in the video… we um, didn't figure that out til a bit later.</p>
<p><picture>
<source srcset="/media/benq-codetv.avif" type="image/avif">
<source srcset="/media/benq-codetv.webp" type="image/webp">
<img
loading="lazy"
src="/media/benq-codetv.jpg"
alt=""
title="Me intently looking at the BenQ screen in the CodeTV studio "
decoding="async"
width="1920"
height="853"
/>
</picture></p>
<p>I did get the pleasure to use a <a href="https://benqurl.biz/4bTNsnD">BenQ RD280U</a> tho.</p>
<p>The 4k 3:2 matte UHD display was really nice. They say it's made for coding, and
I see what they mean.</p>
<p><picture>
<source srcset="/media/benq-code.avif" type="image/avif">
<source srcset="/media/benq-code.webp" type="image/webp">
<img
loading="lazy"
src="/media/benq-code.jpg"
alt=""
title="Code shown on the BenQ "
decoding="async"
width="1280"
height="853"
/>
</picture></p>
<p>Plus, HDR content is awesome, and I could capture high quality UI captures and
place lots of windows around.</p>
<p>I got to take one home and try it out. It's light years ahead of the one I had
before.</p>
<p><picture>
<source srcset="/media/benq-display.avif" type="image/avif">
<source srcset="/media/benq-display.webp" type="image/webp">
<img
loading="lazy"
src="/media/benq-display.jpg"
alt=""
title="The monitor on my desk "
decoding="async"
width="1920"
height="1440"
/>
</picture></p>
<p>The arm is super strong. There's tons of charging ports. It's a really great
product.</p>
<h2>
3D Bird
<a name="3d-bird" href="#3d-bird">#</a>
</h2>
<p>Here's that 3D bird <a href="https://codepen.io/argyleink/pen/xbxXPKJ">Codepen</a> that's
featured in the episode.</p>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/xbxXPKJ?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/xbxXPKJ"> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<h2>
The Results
<a name="the-results" href="#the-results">#</a>
</h2>
<p>There were no winners or losers!</p>
<p><picture>
<source srcset="/media/codetv-team.avif" type="image/avif">
<source srcset="/media/codetv-team.webp" type="image/webp">
<img
loading="lazy"
src="/media/codetv-team.jpg"
alt=""
title="The team "
decoding="async"
width="1440"
height="960"
/>
</picture></p>
<p>We all had a blast; I'm lookin forward to seein the
<a href="https://www.youtube.com/watch?v=ftYmXoH0V5I&list=PLz8Iz-Fnk_eTkZvSNWXW_TKZ2UwVirT2M&index=2">YouTube comments</a>,
maybe a <a href="https://codepen.io/argyleink/pen/xbxXPKJ">3D bird</a> joke or two.</p>
Zen Garden Leave - Adam Argylehttps://nerdy.dev/zen-garden-leave?utm_source=rss2025-04-23T17:21:16.000Z
<img style="display: none" src="https://nerdy.dev/media/zen-garden-leave.png" alt="CSS Zen Garden" height="1530" width="2002" />
<p><strong>CSS Zen</strong> <a href="https://en.wikipedia.org/wiki/Garden_leave"><strong>Garden</strong> Leave</a>…</p>
<p>Taking time, breathing slow, clearing my head, tending to a
<a href="https://codepen.io/argyleink/pen/QwwdjJq">brutalist garden on Codepen</a>.</p>
<p><small>Seems appropriate.</small></p>
Carousels On Shoptalk - Adam Argylehttps://nerdy.dev/carousels-on-shoptalk?utm_source=rss2025-04-07T14:21:51.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload//shoptalk-carousels.jpg" alt="some title" height="720" width="1280" />
<p>CSS <a href="https://drafts.csswg.org/css-overflow-5/#scroll-buttons"><code>::scroll-button()</code></a>, <a href="https://drafts.csswg.org/css-overflow-5/#scroll-markers"><code>::scroll-marker</code></a>, <a href="https://chrome.dev/carousel-configurator/">Carousel Configurator</a>, and <a href="https://chrome.dev/carousel/">Carousel Gallery</a> with <a href="https://chriscoyier.net">Chris</a> and <a href="https://daverupert.com">Dave</a> on <a href="https://shoptalkshow.com">ShopTalk Show</a>.</p>
<p><a href="https://www.youtube.com/watch?v=YhN177ixoJk">Watch</a> · <a href="https://shoptalkshow.com/659/">Listen</a> · <a href="https://developer.chrome.com/blog/carousels-with-css">Read</a></p>
CSS Can Do That At Smashing Meets - Adam Argylehttps://nerdy.dev/css-can-do-that-at-smashing-meets?utm_source=rss2025-04-05T18:12:17.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/smashing-meets-css.jpg" alt="CSS Can We Do That at Smashing Meets CSS" height="720" width="1280" />
<p>Recording is live!</p>
<p>Watch
<a href="https://www.youtube.com/watch?v=we2wmGKDyhY&list=PLxQqv_fazRs1VlMEbqC0Jlw6VFd97UpT2&index=3">CSS Can We Do That on YouTube</a>
via
<a href="https://smashingconf.com/meets-modern-css/speakers/adam-argyle/">Smashing Meets CSS</a>
online event.</p>
CSS Mixins are ready for experimentation! - Adam Argylehttps://nerdy.dev/css-mixins-ready-for-experimentation?utm_source=rss2025-03-26T14:43:21.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/css-mixin-experiment.png" alt="@mixin --box {
aspect-ratio: 1;
inline-size: 100px;
block-size: 100px;
}
.box {
@apply --box;
}" height="848" width="1716" />
<p>CSS <a href="https://drafts.csswg.org/css-mixins-1/">Mixins</a> and
<a href="https://developer.chrome.com/blog/delaying-shipping-of-css-functions">Functions</a>
are both ready for you to hack on 🤯. I think of functions as returning a value
and mixins as a way to apply a chunk of styles.</p>
<p>Bramus has a great intro on
<a href="https://www.bram.us/2025/02/09/css-custom-functions-teaser/"><code>@function</code></a>,
don't miss it. But this post is about <code>@mixin</code>, don't miss
<a href="https://css.oddbird.net/sasslike/mixins-functions/">the explainer</a>, it is
packed with valuable information:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@mixin</span><span style="color:var(--shiki-foreground)"> --box {</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"> aspect-ratio</span><span style="color:var(--shiki-foreground)">: 1;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"> inline-size</span><span style="color:var(--shiki-foreground)">: 100px;</span></span>
<span class="line"><span style="color:var(--shiki-token-string-expression)"> block-size</span><span style="color:var(--shiki-foreground)">: 100px;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>and using it:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">.box</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> @</span><span style="color:var(--shiki-token-constant)">apply</span><span style="color:var(--shiki-foreground)"> --box;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<h2>
Getting started
<a name="getting-started" href="#getting-started">#</a>
</h2>
<p>For CSS Mixins as of writing this, you'll need
<a href="https://www.google.com/chrome/canary/">Canary</a> and you'll need to
<a href="https://developer.chrome.com/docs/web-platform/chrome-flags#command-line_flags">launch it from the command line</a>
with this flag <code>CSSMixins</code>:</p>
<pre><code class="language-sh"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">open</span><span style="color:var(--shiki-token-string)"> -a</span><span style="color:var(--shiki-token-string-expression)"> "Google Chrome Canary"</span><span style="color:var(--shiki-token-string)"> --args</span><span style="color:var(--shiki-token-string)"> --enable-features=CSSMixins</span></span></code></pre>
</code></pre>
<h2>
Go make stuff!
<a name="go-make-stuff!" href="#go-make-stuff!">#</a>
</h2>
<p>You have all the latest information now:</p>
<ul>
<li>how to enable Canary to understand mixins</li>
<li>what the basic syntax is like</li>
<li>links to
<a href="https://css.oddbird.net/sasslike/mixins-functions/">more advanced examples and documentation</a></li>
</ul>
Customize A Select - Adam Argylehttps://nerdy.dev/customize-a-select?utm_source=rss2025-03-24T21:22:23.000Z
<video style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/video/upload/f_auto,w_auto,q_auto/argyleink/select-hype.gif" alt="A quick cut style video of a bunch of carousels from the Carousel Gallery" height="1080" width="1920" />
<p>Get ready! <a href="https://developer.chrome.com/blog/a-customizable-select">The <code><select></code> element can now be customized with CSS</a>, check out the post on the <a href="https://developer.chrome.com/blog/">Chrome Blog</a>!</p>
<ul>
<li>Finally render custom HTML inside an <code><option></code></li>
<li>Works without JS</li>
<li>Easy to progressively enhance</li>
</ul>
CSS Carousel In Chrome 135 - Adam Argylehttps://nerdy.dev/css-carousel-in-chrome-135?utm_source=rss2025-03-20T16:26:21.000Z
<video style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/video/upload/f_auto,w_auto,q_auto/argyleink/carousel-hype.gif" alt="A quick cut style video of a bunch of carousels from the Carousel Gallery" height="1080" width="1920" />
<p>We just <a href="https://developer.chrome.com/blog/carousels-with-css">announced how CSS can make carousels</a> on the <a href="https://developer.chrome.com/blog/">Chrome Blog</a>!</p>
<ul>
<li>Incredible accessibility</li>
<li>Works without JS</li>
<li>Builds upon regular scrollers</li>
</ul>
<p><a href="https://chrome.dev/carousel-configurator/"><strong>CSS Carousel Configurator</strong></a>:<br>
I made this so you can directly see the relationship of a feature you want and the related CSS.</p>
<p><a href="https://chrome.dev/carousel/"><strong>CSS Carousel Gallery</strong></a>:<br>
Showcases meaningful use cases and exemplifies how to orchestrate many capabilities together.</p>
Rainbow Shadow Button - Adam Argylehttps://nerdy.dev/rainbow-shadow-button?utm_source=rss2025-03-19T15:42:28.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/v1742399078/argyleink/rainbow-shadow-button.png" alt="A black button with a rainbow blurred shadow behind it" height="332" width="702" />
<p>Add a rainbow shadow effect with <a href="https://developer.chrome.com/docs/css-ui/access-colors-spaces#control_interpolation"><code>hue longer</code></a> interpolation and a little bit of <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/blur"><code>blur()</code></a>.</p>
<p>Try it in <a href="https://codepen.io/argyleink/pen/zxYWPxr">this Codepen</a></p>
Google Io 2025 - Adam Argylehttps://nerdy.dev/google-io-2025?utm_source=rss2025-03-17T00:28:37.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/ready-for-io.png" alt="some title" height="1698" width="3024" />
<p>Gettin' rrready for <a href="https://io.google/2025/">Google IO</a>!</p>
Smashing Meets CSS 2025 - Adam Argylehttps://nerdy.dev/smashing-meets-css-2025?utm_source=rss2025-03-16T20:09:46.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/smashing-meets-speakers-2025.png" alt="Screenshot of the four speakers from the smashing website" height="928" width="2418" />
<p>Join <a href="https://smashingconf.com/meets-modern-css/speakers/adam-argyle">me</a>,
<a href="https://smashingconf.com/meets-modern-css/speakers/julia-miocene/">Julia</a>,
<a href="https://smashingconf.com/meets-modern-css/speakers/miriam-suzanne/">Miriam</a> and
<a href="https://smashingconf.com/meets-modern-css/speakers/geoff-graham">Geoff</a> April
1st for the virtual event
<a href="https://smashingconf.com/meets-modern-css"><strong>Smashing Meets CSS</strong></a>.</p>
Humiliation - Robin Rendlehttps://robinrendle.com/notes/humiliation/2025-03-15T16:09:40.000Z<p>Here’s <a href="https://www.thewhitereview.org/feature/theyre-really-close-to-my-body/">Johanna Hedva</a>:</p>
<blockquote>
<p>...one of the reasons I’m so unabashedly a NIN fan, and have been for so long, is because they’ve never humiliated me as they’ve gone through the years, like nearly every other mainstream band I loved growing up in the 1990s. I can declare my love for them without having to suffer the scorn that so many of those bands now deserve for selling out in various, pathetic ways. Indeed, it’s recently felt as though all these years of cult devotion are being validated in a populist way, as NIN re-emerged in the late 2010s as a singular bastion of uncompromising artistic vision, the last men standing.</p>
</blockquote>
<p>(Holy shit, what a great article this is!)</p>
<p>But yes, every band I loved as a kid eventually sold me out, too. They disappointed me by turning into right wing weirdos or being horrendous and violent or having terribly useless opinions about the world, but—but!—Nine Inch Nails never did. Reznor and Ross never compromised themselves, never embarrassed me in the way that a drunk parent might.</p>Let the stagger experiments begin - Adam Argylehttps://nerdy.dev/sibling-index?utm_source=rss2025-03-11T00:08:03.000Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/sibling-index-stagger-effect.png" alt="ul > li {
--stagger: calc((sibling-index() - 1) * .1s);
transition:
opacity 1s var(--ease-3) var(--stagger),
translate 1s var(--ease-spring-3) var(--stagger);
}
" height="758" width="1272" />
<p>2019, <a href="https://github.com/w3c/csswg-drafts/issues/4559">I proposed an idea</a> to
help remove a ton of boilerplate code from CSS and HTML while also making
stagger effects easier on authors. The proposal ended up being
<a href="https://drafts.csswg.org/css-values-5/#tree-counting"><code>sibling-index()</code></a> and
<a href="https://drafts.csswg.org/css-values-5/#tree-counting"><code>sibling-count()</code></a>.</p>
<p>Fun
<a href="https://chromestatus.com/feature/6225478530367488?gate=5089301572091904">news</a>!
<strong>You can try it in <a href="https://www.google.com/chrome/canary/">Canary</a> today</strong> and
I've got this little example to help kick off some ideas for you!</p>
<p><video
src=https://res.cloudinary.com/dnpmdb8r8/video/upload/f_auto,w_auto,q_auto/f_auto,q_auto/argyleink/sibling-index-demo.mp4
width="1224"
height="918"
alt=""
preload="none"
poster="https://res.cloudinary.com/dnpmdb8r8/video/upload/so_0.5,f_auto,w_auto,q_auto/f_auto,q_auto/argyleink/sibling-index-demo.jpg"
controls
loop
muted
playsinline
allowFullScreen
/></p>
<p><a href="https://codepen.io/argyleink/pen/KwKXPYW">Try on Codepen</a></p>
<h2>
Staggering animation
<a name="staggering-animation" href="#staggering-animation">#</a>
</h2>
<p>Instead of inlining a CSS variable for each element:</p>
<pre><code class="language-html"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)"><</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> class</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"parent"</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-count: 5"</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-index: 1"</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-index: 2"</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-index: 3"</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-index: 4"</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> style</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"--sibling-index: 5"</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span></code></pre>
</code></pre>
<p>You can use <code>sibling-index()</code> to retrieve it just in time instead of doing the
work in the template or JS.</p>
<p>Clean that HTML up to make room for <code>sibling-index()</code> by removing all the inline
styles:</p>
<pre><code class="language-html"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)"><</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-token-function)"> class</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"parent"</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"></</span><span style="color:var(--shiki-token-string-expression)">div</span><span style="color:var(--shiki-foreground)">></span></span></code></pre>
</code></pre>
<p>and then drop in this new magic bomb:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">.parent</span><span style="color:var(--shiki-token-keyword)"> ></span><span style="color:var(--shiki-token-string-expression)"> *</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> transition</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> opacity 0.3</span><span style="color:var(--shiki-token-keyword)">s</span><span style="color:var(--shiki-token-constant)"> ease</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> transition-delay</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> calc</span><span style="color:var(--shiki-token-constant)">(sibling-index() * 100</span><span style="color:var(--shiki-token-keyword)">ms</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>and now you have a <code>100ms</code> staggered crossfade transition effect 🤓</p>
<h2>
Staggering color
<a name="staggering-color" href="#staggering-color">#</a>
</h2>
<p>There's nothing stopping you from using <code>sibling-index()</code> to stagger a color
change, or anything else!</p>
<p>Here the hue increments by 50 each element.</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">.parent</span><span style="color:var(--shiki-token-keyword)"> ></span><span style="color:var(--shiki-token-string-expression)"> *</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --hue</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> calc</span><span style="color:var(--shiki-token-constant)">(sibling-index() * 50</span><span style="color:var(--shiki-foreground)">);</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> color</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> oklch</span><span style="color:var(--shiki-token-constant)">(70</span><span style="color:var(--shiki-token-keyword)">%</span><span style="color:var(--shiki-token-constant)"> 70</span><span style="color:var(--shiki-token-keyword)">%</span><span style="color:var(--shiki-token-function)"> var</span><span style="color:var(--shiki-token-constant)">(--hue))</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>You could easily add a <code>min()</code> or <code>clamp()</code> or trig functions to help you too.</p>
<h2>
Time to experiment
<a name="time-to-experiment" href="#time-to-experiment">#</a>
</h2>
<p>Share with me what you build!
<a href="https://codepen.io/argyleink/pen/KwKXPYW">Fork this Codepen</a></p>
Abandon all keyboards - Robin Rendlehttps://robinrendle.com/notes/abandon-all-keyboards/2025-03-11T00:02:06.000Z<p>It’s obnoxiously beautiful right now.</p>
<p>It’s a cracking, 10/10 stunner of a California sunset and it’s pouring in through the windows of this empty cafe as I click-clack on my infinite click-clack machine. It’s as if the whole world has become a kaleidoscope of West Coast reds and oranges just for me. But, alas, I don’t feel much of anything. I am, in fact, this: a total and absolute nothing inside. Familiar feelings of course, nothing scary at all, it’s just plain ol’ burnout. There was a rush of work over a few months—go, go, go! build, build, build!—and then: something clicked and I was done. No more gas in the tank. No vacancies at the inn. All spoons gone.</p>
<p>The problem with these feelings is that they come out of nowhere and I ignore the symptoms until they bleed into other parts of my life. But if I can’t care for writing or reading or code or design or anything fun and exciting then what even am I? Enthusiasm is my middle name! I was born to point at things excitedly! And yet in the evenings now I’ll watch a great movie or a TV show or play a game where ten thousand people poured years of their lives into it and — nothing.</p>
<p>It all just kinda washes over me.</p>
<p>When this sort of thing happens I know what I need: abandon all keyboards! Discard all screens! Throw myself into a stack of books and hurl my charmless corpse across a foreign city so that my empathy and hope refills itself. But right now it’s tough to be optimistic about that because today nothing matters. Work? Eh. Friends? Bleurgh. Going outside? Taking care of myself? Planning things? Bleurgh.</p>
<p>Bleurgh to all things!</p>
<p>In moments like this there’s a shift in me towards mean and unpleasant thoughts, a kind of cynicism that’s impossible to shake. I see the worst in people, almost as if I’m hoping for the worst things to happen. But that cruelty tends to become laser-focused on me. Like the other day, when I woke up and my very first thought to start the day was: “christ, I’m such a bad designer.”</p>
<p>Yikes! What the hell, brain! Also: please pick something more cool and interesting to be sad about at the very least! I get that deep down you crave being interesting and sad but this is the least interesting way to sad! Try harder!</p>
<p>Anyway, I’ve booked two weeks off work. I’ll plan something, go somewhere, write something. I’ll figure it out.</p>
<p>But, until then: bleurgh.</p>Views on views - Hidde's bloghttps://hidde.blog/views/2025-02-28T16:13:12.240Z<p>If WCAG 3 would adopt the word “view” instead of “web page”, the standard would be more useful in non-web contexts like native apps, documents and <a href="https://www.w3.org/TR/xaur/">XR</a>. Because many wish to understand how accessible such environments are, we should consider adopting a unit that isn’t “web page”. To me, “view” is the strongest contender.</p>
<p><em>Context: as part of the Accessibility Guidelines Working Group (AGWG) work on WCAG 3, I'm leading a subgroup on (re)defining “views” for WCAG 3. This group builds further on <a href="https://www.w3.org/2024/Talks/TPAC/breakouts/defining-views/">a discussion at TPAC 2024</a>, which builds on discussions over many years about WCAG and WCAG2ICT. Opinions in this post do not reflect those of the subgroup, or of my clients.</em></p>
<p>I would love any feedback in <a href="https://github.com/w3c/wcag3/discussions/286">wcag3/discussions/286</a>.</p>
<h2>The web page</h2>
<p>In WCAG, and most WCAG-related documents, the notion of a “web page” does quite a lot of work: it's in the name of some success criteria and it's WCAG 2's “unit of conformance”, i.e. the thing people can claim conformance about.</p>
<p>A <a href="https://www.w3.org/TR/WCAG22/#dfn-web-page-s">web page, in WCAG 2</a>, is unambiguously scoped to something to obtain from a single URI:</p>
<blockquote>
<p>a non-embedded resource obtained from a single URI using HTTP plus any other resources that are used in the rendering or intended to be rendered together with it by a user agent</p>
</blockquote>
<p>It's so unambiguous that we'd struggle to come up with examples where one person would draw the boundary between two web pages differently than the next. Well done, team WCAG!</p>
<p>Inevitably, though, a unit of conformance that can apply more broadly will be more ambiguous.</p>
<h3>In other places</h3>
<p>No less than 16 success criteria in <a href="https://www.w3.org/TR/WCAG22">WCAG 2.2</a> mention web pages: <a href="https://www.w3.org/TR/WCAG22/#audio-control">1.4.2 Audio control</a>, <a href="https://www.w3.org/TR/WCAG22/#no-keyboard-trap">2.1.2 No keyboard trap</a>, <a href="https://www.w3.org/TR/WCAG22/#three-flashes-or-below-threshold">2.3.1 Three flashes or below treshold</a>, <a href="https://www.w3.org/TR/WCAG22/#three-flashes">2.3.2 Three flashes</a>, <a href="https://www.w3.org/TR/WCAG22/#bypass-blocks">2.4.1 Bypass blocks</a>, <a href="https://www.w3.org/TR/WCAG22/#page-titled">2.4.2 Page titled</a>, <a href="https://www.w3.org/TR/WCAG22/#focus-order">2.4.3 Focus order</a>, <a href="https://www.w3.org/TR/WCAG22/#multiple-ways">2.4.5 Multiple ways</a>, <a href="https://www.w3.org/TR/WCAG22/#location">2.4.8 Location</a>, <a href="https://www.w3.org/TR/WCAG22/#location">2.5.6 Concurrent input mechanisms</a>, <a href="https://www.w3.org/TR/WCAG22/#language-of-page">3.1.1 Language of page</a>, <a href="https://www.w3.org/TR/WCAG22/#consistent-navigation">3.2.3 Consistent navigation</a>, <a href="https://www.w3.org/TR/WCAG22/#consistent-identification">3.2.4 Consistent identification</a>, <a href="https://www.w3.org/TR/WCAG22/#consistent-help">3.2.6 Consistent help</a>, <a href="https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data">3.3.4 Error prevention (legal, financial data)</a> and <a href="https://www.w3.org/TR/WCAG22/#error-prevention-all">3.3.6 Error prevention (all)</a>.</p>
<p>It's also used in documents like <a href="https://www.w3.org/TR/WCAG-EM/">WCAG-EM</a>, the evaluation method.</p>
<h3>Conformance</h3>
<p>“Web page” is WCAG 2's “unit of conformance”, meaning that if you want to say something “conforms” to WCAG, that <em>something</em> should be a web page, and not something else, like a date picker component that you've built. You can use WCAG to reason about the accessibility of that date picker component, but a claim that it conforms to WCAG would not make sense.</p>
<p>Note, the phrase “unit of conformance” isn't actually mentioned or defined in WCAG itself, but WCAG2ICT explains it clearly:</p>
<blockquote>
<p>(…) the unit of conformance in WCAG 2 is a single web page (…)</p>
</blockquote>
<p>(From <a href="https://www.w3.org/TR/wcag2ict-22/#interpretation-of-web-terminology-in-a-non-web-context">Interpretation of Web Terminology in a Non-web Context</a>)</p>
<p>Conformance claims are also specifically <a href="https://www.w3.org/TR/WCAG22/#cc2">about full web pages</a>, not parts of them. They can be about more than a single page, though:</p>
<blockquote>
<p>a conformance claim may be made to cover one page, a series of pages, or multiple related web pages.</p>
</blockquote>
<p>(From: WCAG 2.2, <a href="https://www.w3.org/TR/WCAG22/#conformance-claims">section 5.3: conformance claims</a>)</p>
<p>That's common too: in fact, accessibility conformance reports usually cover a whole website.</p>
<h2>Views</h2>
<p>“Views” could be a new unit to use, meaning web pages on websites and other things in non-web contexts. View are not defined in WCAG 2 (they are <a href="https://www.w3.org/TR/UAAG20/#v">in UAAG</a> and <a href="https://www.w3.org/TR/ATAG20/#def-View">in ATAG</a>, interestingly, and a <a href="https://www.w3.org/1999/05/WCA-terms/#Page">1999 doc defines “page view”</a>). The <a href="https://www.w3.org/TR/wcag3/">latest WCAG 3 draft</a> also has a definition for view, we'll get to that later.</p>
<p>Views as a unit of conformance for WCAG have been considered before, most nobably in the WCAG2ICT groups, see for instance the discussion in reply to the concept of <a href="https://lists.w3.org/Archives/Public/public-wcag2ict-tf/2012Jul/0038.html">User Interface Context</a>. In all those years, the group could not think of a definition that wouldn’t introduce problems of its own.</p>
<p>Has anything really changed since then? Well, one thing that is different now, is that we have more variety in products that need accessibility conformance evaluated than ever. There seems to be a growing desire to bring our units of conformance up to date with that reality. It would make conformance assessments more practical to their writers and readers and simplify monitoring by governments.</p>
<p>I feel the balance between theoretical purity and practical need has shifted.</p>
<h3>Requirements for a new definition</h3>
<p>When we set off thinking about views, we discussed requirements, including that we want “views” to:</p>
<ul>
<li>Not confuse people who have an existing understanding of the word ‘view’, which is a word used by many, including developers (like <a href="https://reactnative.dev/docs/view">views in React Native</a>, <a href="https://docs.djangoproject.com/en/5.1/topics/http/views/">views in Django</a>, views that <a href="https://www.w3.org/TR/css-view-transitions-1/">CSS view transitions</a> transition and <a href="https://dev.mysql.com/doc/refman/8.4/en/views.html">views in MySQL</a>)</li>
<li>Not reduce accessibility requirements: a new definition shouldn't cause things to meet WCAG that don't today.</li>
<li>‘Work’ for a variety of different contexts, like web pages, (native) applications, VR/AR and documents (I know, a long wishlist)</li>
<li>Useful for people who do conformance assessments (accessibility specialists/consultants), or use them in some way (designers, developers, monitoring agencies, judges in some areas).</li>
</ul>
<h3>Steve Faulkner's suggestion</h3>
<p>As mentioned, there is an existing draft definition in the <a href="https://www.w3.org/TR/wcag3/#dfn-view">latest WCAG 3 draft</a>. I agree with Steve Faulker <a href="https://html5accessibility.com/stuff/2025/02/24/wcag-3-a-change-of-context/">that it is wooly</a>.</p>
<p>What the exact definition needs to be is yet to be determined, but after the initial (less-wooly) definition we presented to the Working Group, Steve proposed to base the definition around “change of context”.</p>
<p>Steve's proposed definition:</p>
<blockquote>
<p>Conformance scope that includes all content visually and programmatically available without a change of context</p>
</blockquote>
<p>In addition, he suggests updating “change of context” to be:</p>
<blockquote>
<p>Major change in the content of the view that, if made without user awareness, can disorient users who are not able to view the entire view simultaneously</p>
<p>Changes in context include changes of:</p>
<ul>
<li>user agent;</li>
<li>viewport;</li>
<li>content that changes the meaning of the view.</li>
</ul>
<p>A change of content is not always a change of context. Changes in content, such as an expanding outline, dynamic menu, opening a non-modal dialog, or a tab control do not necessarily change the context.</p>
<p>Example: Opening a new window, opening a modal dialog, going to a new view (including anything that would look to a user as if they had moved to a new view) or significantly re-arranging the content of a view are examples of changes of context.</p>
</blockquote>
<p>I like where that is going.</p>
<h2>Subviews?</h2>
<p>Sometimes it makes sense to talk about specific parts of a UI or view, like a modal overlay, drawer or full screen search functionality. We looked at a number of examples within the group and found we were internally conflicted about some cases, there was a lot of gray area.</p>
<p>For this reason, I think we should in fact <em>not</em> define “subview”, contrary to what we intitially thought. I'd love to know what others think, please add your thoughts to the <a href="https://github.com/w3c/wcag3/discussions/286#discussioncomment-12255792">subview part of the discussion</a>.</p>
<h2>Possible issues</h2>
<p>There are some disadvantages to “view”, and we got some excellent feedback from the Working Group in our initial discussion. You can see all in the <a href="https://www.w3.org/2025/02/18-ag-minutes.html">minutes of 18 February</a>, but I'll highlight two here.</p>
<h3>More subjectivity</h3>
<p>Among the feedback we got from the Accessibility Guidelines Working Group, was Gregg Vanderheiden's feedback that I'll summarise as: “web page“ is objective and “view” is not.</p>
<p>I think he's technically correct that we lose some objectivity. But I don't think that's as much of a change to the status quo. Accessibility practioners define scopes for tests today already, and, if we're honest, subjectivity already exists in accessibility conformance reports. Bad actors can act bad today, that's not a reason to avoid making things more usable for all actors. Especially if a new term would help with clarity about accessibility or inaccessibility of products.</p>
<p>Besides, the cat is out of the bag already: companies and governments need other environments than web apps assessed, and whether they do that with an unambiguous but inapplicable definition for “web page” or with a broader definition for “view” is unlikely to make the difference.</p>
<h3>In app development</h3>
<p>In native app development, a world I’ll admit I’m not very familiar with, the word “view” seems to refer not to a whole screen or page, but to parts of it, as I understand similar to what on websites, you’d call components. I learned this when I presented some of these ideas in the Mobile Accessibility Task Force (MATF), where “page” was offered as an alternative to “web page” that could work as a unit of conformance for (native) apps.</p>
<p>This may get into “confusing people with existing definitions of view” territory, I am not sure what's the best way out, I worry “page” could introduce similar problems in terms of future proofing. A potential solution, from Jan Jaap de Groot, could be that a different word than view is used in a document like WCAG2Mobile, which then points at WCAG's “view” for the definition. Others I talked to suggested something similar, we could have different units of conformance for different contexts, that all point to one broader unit.</p>
<h3>SC meaning</h3>
<p>One issue that we didn't get to much, but that is essential: what about all the SCs that mention web pages today? The published note <a href="https://www.w3.org/TR/wcag2ict-22">WCAG2ICT</a> covers mappings from “non-web software and documents” to WCAG 2 success criteria and EN 301 549 (clause 10 and 11) harmonises with that. Mapping is not be in the scope for the task of defining “views” per se, but it deserves our attention to consider what requirements would look like if we used a word like view.</p>
<h2>Feedback wanted</h2>
<p>In this post, I've tried to summarise some of the discussion around “view“ it happened over the last few months. It's a lot of information, with one goal: please share your thoughts.</p>
<p>It doens't have to be “views”, if could be “purple zebras”, as <a href="https://github.com/w3c/wcag3/discussions/286#discussioncomment-12351879">Alastair suggested</a>, but modernising what WCAG's unit(s) of conformance are will be more helpful to users than avoiding it.</p>
<p>I'd love more feedback (by email or in <a href="https://github.com/w3c/wcag3/discussions/286">the GitHub discussion</a>) on what views can be and what the potential risks are, especially from accessibility practitioners (including evaluators), folks from monitoring agencies and designers and developers who want to meet WCAG.</p>
<hr/>
<p>Originally posted as <a href="https://hidde.blog/views/">Views on views</a> on <a href="https://hidde.blog">Hidde's blog</a>.</p>
<p><a href="mailto:hidde@hiddedevries.nl?subject=Reply%20to:%20Views on views">Reply via email</a></p>View Transitions 3d Perspective - Adam Argylehttps://nerdy.dev/view-transitions-3d-perspective?utm_source=rss2025-02-27T23:06:40.703Z<p>To give <a href="https://developer.chrome.com/docs/web-platform/view-transitions">View Transitions</a> a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/perspective">perspective</a>, either:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)">::view-transition-image-pair(--foo) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> perspective</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 500</span><span style="color:var(--shiki-token-keyword)">px</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">/* or */</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">::view-transition-new(--foo) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> transform</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> perspective</span><span style="color:var(--shiki-token-constant)">(500</span><span style="color:var(--shiki-token-keyword)">px</span><span style="color:var(--shiki-token-constant)">)</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>Hope this finds someone well.</p>
CSS Kaleidoscopes - Adam Argylehttps://nerdy.dev/css-kaleidoscopes?utm_source=rss2025-02-23T00:21:40.428Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/css-kaleidoscope.png" alt="Short video switching between the two kaleidoscopes" height="1016" width="2522" />
<script type="module">
import "https://cdn.jsdelivr.net/npm/baseline-status";
</script>
<p>Gradients are so fun, so complex, so powerful. I just can't get enough of
messing with them.</p>
<p>Todays post was me wanting to create a kaleidoscope type effect using
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/easing-function/linear"><code>linear()</code></a>
easing with varied durations for <strong>hopefully infinite combinations</strong>.</p>
<p>Here's a spiffy preview of some of the combinations:</p>
<p><video
src=https://res.cloudinary.com/dnpmdb8r8/video/upload/f_auto,w_auto,q_auto/f_auto,q_auto/argyleink/css-kaleidoscopes.mp4
width="1514"
height="1514"
alt=""
preload="none"
poster="https://res.cloudinary.com/dnpmdb8r8/video/upload/so_0.5,f_auto,w_auto,q_auto/f_auto,q_auto/argyleink/css-kaleidoscopes.jpg"
controls
loop
muted
playsinline
allowFullScreen
/></p>
<p>The demo effects are thanks to
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/easing-function/linear"><code>linear()</code></a>
and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@property"><code>@property</code></a>.</p>
<p><baseline-status featureId="registered-custom-properties"></baseline-status>
<baseline-status featureId="linear-easing"></baseline-status></p>
<p>Each of the demo's has a ton of fun levers to pull in the CSS. Def try changing
variables, durations, easings, and more.</p>
<p><strong>It's super fun.</strong></p>
<h2>
Linear gradient kaleidoscope
<a name="linear-gradient-kaleidoscope" href="#linear-gradient-kaleidoscope">#</a>
</h2>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/ZYEQZaz?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/ZYEQZaz">
Hot text-emphasis</a> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<h2>
Radial gradient kaleidoscope
<a name="radial-gradient-kaleidoscope" href="#radial-gradient-kaleidoscope">#</a>
</h2>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/MYWKdbe?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/MYWKdbe">
Hot text-emphasis</a> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<h2>
Conic gradient kaleidoscope
<a name="conic-gradient-kaleidoscope" href="#conic-gradient-kaleidoscope">#</a>
</h2>
<p>[YOUR FORK HERE]</p>
<p>Send me your Codepen fork and I'll add it here!</p>
An Emoji Naming Convention - Adam Argylehttps://nerdy.dev/css-emoji-convention?utm_source=rss2025-02-20T18:16:39.738Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/emoji-convention.png" alt="A screenshot of some of the code snippets found in this blog post." height="1078" width="1798" />
<p>There are many new places in CSS for naming. You can now quickly find yourself using the same name, which is unique, but it's unique in a context… and that's really hard to remember.</p>
<p>Here's a simple example:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@keyframes</span><span style="color:var(--shiki-foreground)"> foo {}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@property</span><span style="color:var(--shiki-foreground)"> --foo {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">.element</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --foo</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> bar</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> animation</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> foo linear both</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> view-timeline-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> --foo</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> view-transition-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> foo</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> anchor-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> --foo</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> container-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> foo</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>Notice too how there's dashed names and undashed… some CSS features require the dashed names while others do not. Yay.</p>
<p>Good news is that CSS can keep track of it all. Bad news, I'm strugglin.</p>
<h2>
Not an answer, but an answer?
<a name="not-an-answer,-but-an-answer?" href="#not-an-answer,-but-an-answer?">#</a>
</h2>
<p>I'm not actually trying to tackle this problem with this suggestion, but… maybe I am? LOL</p>
<p>We could, <strong>use emoji to help delineate the intended use</strong>. </p>
<p>Here, keyframes, typed custom properties and font-palette-values are uniquely identified with <strong>an emoji prefix</strong>.</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@keyframes</span><span style="color:var(--shiki-foreground)"> 🔑-example {}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@property</span><span style="color:var(--shiki-foreground)"> --﹫-example {}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@font-palette-values</span><span style="color:var(--shiki-foreground)"> --🔡-example {}</span></span></code></pre>
</code></pre>
<p>This then makes it clear when you got to use them:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">.element</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --﹫-example</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> bar</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> animation</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 🔑-example linear both</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>So building on this, I went a little further… and have assigned emoji's for anything you can custom name:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@keyframes</span><span style="color:var(--shiki-foreground)"> 🔑-example {}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@property</span><span style="color:var(--shiki-foreground)"> --﹫-example {}</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@font-palette-values</span><span style="color:var(--shiki-foreground)"> --🔡-example {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-function)">:root</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --﹫-example-typed</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> baz</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --🔒-example-private</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> foo</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> --regular-var</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> bar</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)">::view-transition-group(</span><span style="color:var(--shiki-token-function)">.🏘️-example</span><span style="color:var(--shiki-foreground)">) {}</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">::view-transition-new(🏞️-example) {}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@layer</span><span style="color:var(--shiki-foreground)"> 🥞-example {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🤓-example-class</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> container-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 📦-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> view-transition-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 🏞️-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> view-transition-class</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 🏘️-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> view-timeline-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> --📽️-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> anchor-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> --⚓-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> font-palette</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> --🔡-example</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> animation</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 🔑-example 1</span><span style="color:var(--shiki-token-keyword)">s</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-foreground)"> > </span><span style="color:var(--shiki-token-constant)">p</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> @</span><span style="color:var(--shiki-token-constant)">container</span><span style="color:var(--shiki-foreground)"> 📦</span><span style="color:var(--shiki-token-constant)">-example</span><span style="color:var(--shiki-foreground)"> (</span><span style="color:var(--shiki-token-constant)">inline-size</span><span style="color:var(--shiki-foreground)"> < 20</span><span style="color:var(--shiki-token-constant)">ch</span><span style="color:var(--shiki-foreground)">) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> font-size</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> var</span><span style="color:var(--shiki-token-constant)">(--﹫-example)</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:var(--shiki-token-keyword)">@layer</span><span style="color:var(--shiki-foreground)"> 🥞-example-utilities {</span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🔧-utility-class</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🧹-reset-class</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🔍-debug-class</span><span style="color:var(--shiki-foreground)"> {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> …</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🗣️-sr-only</span><span style="color:var(--shiki-foreground)"> {}</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> .🍱-grid</span><span style="color:var(--shiki-foreground)"> {}</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p><strong>Does this work?!</strong></p>
<p>Yep, perfectly valid CSS. <a href="https://codepen.io/argyleink/pen/vEYLwpv">Try it on Codepen</a>.</p>
<p><strong>Did I miss an opportunity to pick an emoji prefix?</strong></p>
<p>Probably! Comment on Bluesky or Mastodon and I'll add them!</p>
<p>As a final mention here, I think it's a good idea to <code>--</code> all your custom names, just to make it really clear they aren't internal CSS keywords. </p>
Anchoreum - Adam Argylehttps://nerdy.dev/anchoreum?utm_source=rss2025-02-19T20:41:57.587Z
<img style="display: none" src="https://res.cloudinary.com/dnpmdb8r8/image/upload/argyleink/anchoreum.png" alt="Screenshot of the app editor" height="1828" width="3172" />
<p>Need a rad way to learn CSS <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/anchor">anchor</a>?</p>
<p>Look no further than <a href="https://anchoreum.com">anchoreum.com</a>!</p>