<br />
<b>Deprecated</b>:  The each() function is deprecated. This message will be suppressed on further calls in <b>/home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php</b> on line <b>456</b><br />
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/assets/rss.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>CSSence: Recent</title>
<description>Recent posts, but every blog post type represented.</description>
<language>en</language>
<link>https://cssence.com/rss.xml</link>
<managingEditor>rss-feed@cssence.com (Matthias Zöchling)</managingEditor>
<webMaster>rss-feed@cssence.com (Matthias Zöchling)</webMaster>
<atom:link href="https://cssence.com/rss.xml" rel="self" type="application/rss+xml" />
<item>
<link>https://cssence.com/2026/frontend-graz/</link>
<title>Frontend Graz meetup #10</title>
<description>
<![CDATA[
<p>I’ve traveled to Graz to for once *not* speak at the <a href="https://www.meetup.com/frontend-graz/events/314982300/">Frontend Graz meetup,</a> and instead be a regular attendee who can simply enjoy the show. By the way, this was the tenth edition, because we include the times when it was still called CSS-in-Graz.</p>
<p>Train delays and extreme heat cannot take away from the fact that it was once again a great experience.</p>
<h2 id="talks">Talks &amp; Speakers</h2>
<ul>
<li>“Fighting Hardware Obsolescence With Greener Frontend Code” by <a href="https://ganslandt.xyz/">Björn Ganslandt</a></li>
<li>“Rslidy: Lightweight, Accessible, and Responsive HTML5 Slide Decks” by <a href="https://keithandrews.com/keith/">Keith Andrews</a></li>
<li>“Web Performance: What Actually Matters - a deep dive into Core Web Vitals, performance debugging, and real-world optimizations” by <a href="https://www.acurion.at/">Stefan Schintler</a></li>
</ul>
<h2 id="summary">(Short) Summary</h2>
<p>Björn kicked it off with a topic that truly hit home, fighting hardware obsolescence is something I deeply care about. Progressive enhancement and testing on older devices can keep hardware around for longer, thus slowing down the increase of e-waste.</p>
<p>Keith then talked about <a href="https://github.com/tugraz-isds/rslidy">Rslidy</a>, which allows you to run HTML slide decks in the browser. Its file size is already impressive, but guess what, it comes with zero dependencies. Goes without saying, Rslidy has been used to present Rslidy, clearly a case of dogfooding.</p>
<p>Finally, Stefan sealed the deal by talking about what actually matters when it comes to web performance, with his fresh take on Lighthouse scores.</p>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><a href="https://front-end.social/@matuzo/116835202588861418" data-u="MM"><b>Manuel Matuzović</b> wrote on <time datetime="2026-06-29T20:08:31Z">June 29, 2026 at 20:08</time></a></h3>
<p>It warms my heart when friends from Vienna travel 2-3 hours just to attend my meetup in Graz. Today, two of them were here. ❤️</p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><span data-href="https://mas.to/@CSSence/116835383666378433"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-29T20:54:34Z">June 29, 2026 at 20:54</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@matuzo@front-end.social</span>.</small></p>
<p>Thank you Manuel for hosting this great event.</p>
<p>Three excellent talks, good food and good company. 🤗</p>
</article>
]]>
</description>
<pubDate>Mon, 29 Jun 2026 20:50:00 GMT</pubDate>
<guid>https://cssence.com/2026/frontend-graz/</guid>
</item>
<item>
<link>https://cssence.com/2026/better-be-unhurried/</link>
<title>Better be unhurried</title>
<description>
<![CDATA[
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href="https://mas.to/@CSSence/116742929113559129, https://bsky.app/profile/cssence.com/post/3mo6cvqaogc2e"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-13T13:02:09Z">June 13, 2026 at 13:02</time></span></h3>
<blockquote cite="https://blog.jim-nielsen.com/2026/speed-not-conducive-to-wisdom/">
<p>Speed is how you avoid reckoning. It guarantees you miss things, and you can’t learn from what you don’t notice.</p>
</blockquote>
<p>A blog post full of wisdom, by @jim-nielsen.com<br><span aria-hidden="true">🔗 </span><a href="https://blog.jim-nielsen.com/2026/speed-not-conducive-to-wisdom/">“Speed is Not Conducive to Wisdom”</a></p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><a href="https://hci.social/@simulo/116743348010831889" data-u="JD"><b>Jan Dittrich</b> wrote on <time datetime="2026-06-13T14:48:41Z">June 13, 2026 at 14:48</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@CSSence@mas.to</span>.</small></p><p></p>
<p>there is a great book, “moral mazes”, on raising in corporate hierarchies, among other things by not investing in maintenance, thus being “efficient” and thus being promoted, so a successor deals with the fallout.</p>
</article>
]]>
</description>
<pubDate>Sat, 13 Jun 2026 13:02:09 GMT</pubDate>
<guid>https://cssence.com/2026/better-be-unhurried/</guid>
</item>
<item>
<link>https://cssence.com/2026/gaps-rule/</link>
<title>Gaps rule!</title>
<description>
<![CDATA[
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href=""><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-05T08:13:05Z">June 5, 2026 at 08:13</time></span></h3>
<blockquote cite="https://front-end.social/@utilitybend/116611933466445226">
<p>🚀 New article on gap decorations (coming soon) in CSS. I have a small obsession with clean layout lines, and this is the first time it feels easy to draw them without polluting the markup. Goes through the new properties, a playground, and some experiments… 👾</p>
</blockquote>
<p><span aria-hidden="true">🔗 </span><a href="https://utilitybend.com/blog/css-is-filling-the-gaps-with-rules-a-way-to-style-gaps-in-grid-and-flex">“CSS is filling the gaps with rules”</a></p>
<p>Great article by @utilitybend@front-end.social on styling grid/flex gaps. Makes me wonder if this should become a thing in tables as well.</p>
<p>Sure, we could override <code>display: table-row</code> to get there. (Though at some point we lost the table role in certain browsers when we did that, I hope that’s no longer the case.)</p>
</article>
]]>
</description>
<pubDate>Fri, 05 Jun 2026 08:13:05 GMT</pubDate>
<guid>https://cssence.com/2026/gaps-rule/</guid>
</item>
<item>
<link>https://cssence.com/2026/breaking-bad/</link>
<title>Breaking bad</title>
<description>
<![CDATA[
<aside class="standoff -large" aria-labelledby="miniseries">
<p>This is the third blog post of my <a href="https://cssence.com/2026/tales-from-the-hospital/"><strong id="miniseries">Tales from the hospital</strong></a> miniseries. I wrote about edge cases in web design that I encountered between surgeries.</p>
<ol class="figure" aria-labelledby="miniseries">
<li><a href="https://cssence.com/2026/breakpoints/">Breakpoints</a></li>
<li><a href="https://cssence.com/2026/breaking-points/">Breaking points</a></li>
<li>Breaking bad</li>
</ol>
</aside>
<p>Contrary to my earlier hospital encounters this year, my third visit was planned. As are most site designs <strong>not</strong> an accident, someone did put in the effort.</p>
<p>Which makes one thing even more worrisome: There being so little emphasis on the actual content these days must have happened according to someone’s plan.</p>
<p>I cannot find the source, but I saw a conference talk on the subject, and this was my takeaway: On desktop, only 30% of the initial viewport is filled with the content someone came for. On mobile, it’s 17%. Whether I remember these numbers correctly does not matter, because we can see for ourselves. Open any popular website in incognito mode, and try to spot the content. Here’s what I got when I went to FIFA.com.</p>
<figure><img loading="lazy" src="https://cssence.com/2026/breaking-bad/fifa-com.webp" alt="On larger screens, a popover is centered atop the content, which itself is partly covered by a cookie consent banner. On smaller screens, no content to be found, even the cookie consent banner’s action buttons are out of view." style="--frame: ">
</figure>
<p>On mobile, I see a glimpse of the site’s primary navigation, but almost the entire screen is covered by letting me know that they care about my privacy, an information so long it requires scrolling. On desktop, two popovers compete for my attention. I didn’t calculate how much content I can still see. On desktop I’d anyhow have to look past the fact that the content is dimmed. On mobile it’s easy, as the answer is zero percent.</p>
<p>Now, you could argue that some obstrusive banner is only presented on first visit and can be dismissed permanently. But usually it doesn’t stop there, because many sites also want you to look at advertisement, sign up for their newsletter, and download their app. And let’s not forget these popovers that open automatically if you haven’t interacted with the page for more than two seconds.</p>
<h2>Past to present</h2>
<p>While the <a href="https://geocities.restorativland.org/">early days of the web</a> may be compared to the Wild West, eventually sites became more polished, but along the way something must have happened that made us pivot to the current state of web design. We are quick to blame legislative directives like the <em>General Data Protection Regulation</em>. Sure, it did cause all those pesky cookie consent banners, but the European Union does not require you to inform your visitors that they should prefer your app instead, nor to come up with any of these other questionable UX patterns.</p>
<p>There’s a chance I’m seeing the past through rose-tinted glasses. Maybe the situation was never really great, except for one point in time: The rise of the mobile web and in turn responsive design required us get rid of a lot of the crap that had been sitting next to our content, but after that brief period in the first half of the last decade, <a href="https://cssence.com/2015/we-broke-the-internet/">site design started to deteriorate</a> again.</p>
<p>Working on the web, I get to enjoy a lot of personal blogs that show me <a href="https://whimsical.club/">whimsical design</a> instead of said questionable patterns. But those are the exception. And while this miniseries was supposed to be about edge cases in web design, I’m afraid what I’m describing in this third blog post has become the norm.</p>
<p>So how do we get out of this mess?</p>
<h2>Present to future</h2>
<p>Apparently it has to get worse before it gets better. And it sure does.</p>
<p>Matthias Ott concludes that <a href="https://matthiasott.com/notes/ad-infinitum">we no longer get people sent our way.</a></p>
<blockquote cite="https://matthiasott.com/notes/ad-infinitum">
<p>Generative UI doesn’t link to your article, necessarily. It absorbs your article, synthesizes it into a widget, and presents it as Google’s own answer. Information agents don’t send users to websites.</p>
</blockquote>
<p>Great, without visitors there’s no need to fix all these broken sites, right?<sup><a id="ref-fn-1" href="https://cssence.com/2026/breaking-bad/#fn-1" role="doc-noteref" aria-label="Footnote #1">[1]</a></sup></p>
<p>My personal site shows no advertisement, I pay it out of my own pocket. So I don’t mind whether people come to my site or not. I happily provide other forms to consume my content, like <a href="https://cssence.com/rss/">RSS.</a> Back in the day, when we were all still trying to figure out if XHTML is the way to go, I envisioned a future where the use of valid XML would give us an easy way for humans and machines to consume our content. But the latest turn of events, namely <a href="https://www.techpolicy.press/the-web-is-being-made-accessible-for-ai-not-people/">providing instructions for LLMs</a> so AI can easily consume the content, is quite something. Wait, what?</p>
<p>Well, yes, we actually do “fix” broken sites, just <strong>not for people, but for AI.</strong> Amazing! After an eternity of being told that improving accessibility is hard, along comes AI, and now we have no problem spending the time and effort to make sites accessible for something that requires vast amounts of energy and water, as if there was no climate crisis to begin with.</p>
<blockquote>
<p>When a society is unmoved by decades of advocacy from disabled communities but springs into action when a tech company needs the same accommodation, it reveals whose claims on shared resources are treated as legitimate and whose are treated as optional.</p>
<footer>— <cite><a href="https://www.techpolicy.press/the-web-is-being-made-accessible-for-ai-not-people/">The Web Is Being Made Accessible for AI, Not People</a>, by Jonathan Zong &amp; Frank Elavsky.</cite></footer>
</blockquote>
<p>I don’t see a silver lining at the moment.<sup><a id="ref-fn-2" href="https://cssence.com/2026/breaking-bad/#fn-2" role="doc-noteref" aria-label="Footnote #2">[2]</a></sup></p>
<section>
<h2 id="fns">Footnotes</h2>
<ol>
<li id="fn-1">In case you can’t tell, I’m being sarcastic. <a href="https://cssence.com/2026/breaking-bad/#ref-fn-1" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
<li id="fn-2">I’ll revist this article in five years, on June&nbsp;4, 2031. Maybe, by then, the AI bubble has burst, and things have improved. <a href="https://adactio.com/journal/22540">One can dream.</a> <a href="https://cssence.com/2026/breaking-bad/#ref-fn-2" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
</ol>
</section>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-0" hidden>
<h3 id="comment-0"><span data-href="https://mas.to/@CSSence/116691235241510552, https://bsky.app/profile/cssence.com/post/3mnheajfwcs2o"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-04T09:29:00Z">June 4, 2026 at 09:29</time></span></h3>
<p>Part Three of my miniseries about edge cases in web design:</p>
<p>Will your site still be seen by anyone?</p>
<p>Outlook not so good.<br><a href="https://cssence.com/2026/breaking-bad/">cssence.com/2026/breaking-bad</a></p>
</article>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href="https://bsky.app/profile/cssence.com/post/3mnhihqdbyc2c"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-04T10:44:00Z">June 4, 2026 at 10:44</time></span></h3>
<p>As it happens, I just watched <a href="https://youtu.be/KSFsZmxM9sA">“The future of the web might lie in its past”</a> by @kevinpowell.co … he too wants to revisit the topic in five years. 🙃</p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><a href="https://bsky.app/profile/sam-rivera.bsky.social/post/3mnhhvfbdsn2q" data-u="SR"><b>Sam Rivera</b> wrote on <time datetime="2026-06-04T11:01:00Z">June 4, 2026 at 11:01</time></a></h3>
<p>That generative AI synthesizing content claim is wild. What’s the move for creators?</p>
</article>
<article aria-labelledby="comment-3">
<h3 id="comment-3"><span data-href="https://bsky.app/profile/cssence.com/post/3mnhihqdbyc2c"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-04T11:11:00Z">June 4, 2026 at 11:11</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@sam-rivera.bsky.social</span>.</small></p>
<p>Dance like nobody’s watching?</p>
</article>
<article aria-labelledby="comment-4">
<h3 id="comment-4"><span data-href="https://mas.to/@CSSence/116696162627688404"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-05T06:48:49Z">June 5, 2026 at 06:48</time></span></h3>
<p>Thanks @annaecook@mastodon.social for that Forbes article link, I too think we should fix the actual issues, not work around them just to make LLMs happy.</p>
<blockquote>
<p>I’ve used the “AI reads like people do” case to justify continued accessibility work <a href="https://www.forbes.com/councils/forbesagencycouncil/2025/11/13/how-accessibility-prepares-your-website-for-ai-search/">(link to Forbes on that).</a></p>
<p>But there’s something really upsetting about having to do that when ultimately we’ve always had people who need accessibility.</p>
<p>All people need accessibility.</p>
<footer>— <cite><a href="https://mastodon.social/@annaecook/116693022595575272">mastodon.social/@annaecook/116693022595575272</a></cite></footer>
</blockquote>
<p>In addition, the second link in the thread is the very article I’ve quoted when writing mine.</p>
</article>
]]>
</description>
<pubDate>Thu, 04 Jun 2026 09:29:00 GMT</pubDate>
<guid>https://cssence.com/2026/breaking-bad/</guid>
</item>
<item>
<link>https://cssence.com/2026/html-boilerplate/</link>
<title>HTML boilerplate</title>
<description>
<![CDATA[
<article aria-labelledby="comment-1">
<h3 id="comment-1"><a href="https://front-end.social/@matuzo/116679187282249130" data-u="MM"><b>Manuel Matuzović</b> wrote on <time datetime="2026-06-02T06:51:46Z">June 2, 2026 at 06:51</time></a></h3>
<p>I should probably do a 2026 update of my <a href="https://www.matuzo.at/blog/html-boilerplate/">HTML boilerplate</a> post. I just need to figure out what changed in the past 5 years.</p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><span data-href="https://mas.to/@CSSence/116679423362112170"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-02T07:51:49Z">June 2, 2026 at 07:51</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@matuzo@front-end.social</span>.</small></p>
<p>Please do. Looking forward to the <em>cutting the mustard</em> part.</p>
</article>
<article aria-labelledby="comment-3">
<h3 id="comment-3"><a href="https://mastodon.social/@gray17/116681101133588991" data-u="@gray17@mastodon.social"><b>@gray17@mastodon.social</b> wrote on <time datetime="2026-06-02T14:58:29Z">June 2, 2026 at 14:58</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@matuzo@front-end.social</span>.</small></p>
<p>I omit the <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> tags (reduces unnecessary indentation)</p>
<p><code>og:title</code> is redundant with <code>&lt;title&gt;</code>, it seems silly to do both.<br><code>og:description</code> seems to me the only useful og: tag.<br>well, <code>og:image</code> and <code>og:image:alt</code> are useful too if there’s a meaningful image. (I strongly resist the idea of meaningless hero images.)</p>
<p>add <code>&lt;meta name="color-scheme"&gt;</code><br>maybe also <code>&lt;meta name="text-scale"&gt;</code></p>
</article>
<article aria-labelledby="comment-4">
<h3 id="comment-4"><a href="https://typo.social/@myfonj/116687467267303924" data-u="@myfonj@typo.social"><b>@myfonj@typo.social</b> wrote on <time datetime="2026-06-02T14:58:29Z">June 2, 2026 at 14:58</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@gray17@mastodon.social</span>.</small></p>
<p>This 👆️. Although, personally, for <code>"light dark"</code> I’ve settled on using inline style on HTML, (like <code>&lt;html lang="…" style="color-scheme: light dark;"&gt;</code>) rather than meta tag inside the head, since it seems more straightforward and can be leveraged later in a user toggle: <code>html[style*="color-scheme: dark;"]</code>.</p>
</article>
<article aria-labelledby="comment-5">
<h3 id="comment-5"><span data-href="https://mas.to/@CSSence/116833876218107974"><b>Matthias Zöchling</b> wrote on <time datetime="2026-06-29T14:31:12Z">June 29, 2026 at 14:31</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@myfonj@typo.social</span>.</small></p>
<p>Thanks to <code>:has()</code> you can <a href="https://cssence.com/2024/color-scheme-switcher/">have your cake and eat it.</a> 🙂</p>
</article>
<article aria-labelledby="comment-6">
<h3 id="comment-6"><a href="https://typo.social/@myfonj/116838401534640264" data-u="@myfonj@typo.social"><b>@myfonj@typo.social</b> wrote on <time datetime="2026-06-30T09:42:03Z">June 30, 2026 at 09:42</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@CSSence@mas.to</span>.</small></p>
<p>Sure, just that <code>html[style*="…"]</code> feels a little bit more straightforward and possibly much more performant than <code>html:has(&gt;head&gt;meta[…])</code>. Either way, this hatch is basically just a very sad workaround for something we should not be forced to deal with to begin with: simply setting the palette through light-dark() function and setting color-scheme on element(s) should be all we need; no “prefers”, no classes, no attributes, nothing. It’s just the non-colour and non-images stuff, such as font weight, that we have to anchor this way, till CSS functions arrive…</p>
</article>
]]>
</description>
<pubDate>Tue, 02 Jun 2026 07:51:49 GMT</pubDate>
<guid>https://cssence.com/2026/html-boilerplate/</guid>
</item>
<item>
<link>https://cssence.com/2026/react-space/</link>
<title>React space</title>
<description>
<![CDATA[
<article aria-labelledby="comment-1">
<h3 id="comment-1"><a href="https://bsky.app/profile/sjoy.lol/post/3mjekvgwem224" data-u="SJ"><b>Sara Joy</b> wrote on <time datetime="2026-04-13T09:36:00Z">April 13, 2026 at 09:36</time></a></h3>
<p>Quick front end question:<br>How often have you seen elaborate mid-sentence CSS flex and gap or padding styling within React apps, when all that’s missing is what I’m calling a “React space”: <code>{' '}</code>?</p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><span data-href="https://bsky.app/profile/cssence.com/post/3mjelzgpxxk2q"><b>Matthias Zöchling</b> wrote on <time datetime="2026-04-13T09:56:00Z">April 13, 2026 at 09:56</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@sjoy.lol</span>.</small></p>
<p>My answer is “not yet”, and I’d hope so is yours, but I guess there’s a reason the question exists.</p>
<p>Full disclosure: The answer comes from someone who has to endure React. And I sprinkle in quite a few <code>{' '}</code> on an average work day.</p>
</article>
<article aria-labelledby="comment-3">
<h3 id="comment-3"><a href="https://bsky.app/profile/sjoy.lol/post/3mjestho6lk2b" data-u="SJ"><b>Sara Joy</b> wrote on <time datetime="2026-04-13T11:58:00Z">April 13, 2026 at 11:58</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@CSSence@mas.to</span>.</small></p>
<p>Nope I’ve had to fix/simplify issues like this twice now 😅 just wondering how common it is!</p>
</article>
]]>
</description>
<pubDate>Mon, 13 Apr 2026 09:56:00 GMT</pubDate>
<guid>https://cssence.com/2026/react-space/</guid>
</item>
<item>
<link>https://cssence.com/2026/font-variant-emoji/</link>
<title>Unicode Variation Selectors</title>
<description>
<![CDATA[
<p>While I knew that Unicode has <a href="https://en.wikipedia.org/wiki/Variation_Selectors_(Unicode_block)">Variation Selectors (VS),</a> I had no idea that CSS has a <code>font-variant-emoji</code> property. So it was time to connect the dots.</p>
<blockquote>
<p>A <strong>variation selector</strong> is a Unicode code point that, when placed immediately after another character, signals a specific presentation preference to the renderer. Variation selectors produce no visible output of their own — they are invisible modifiers.</p>
<footer>— <cite><a href="https://symbolfyi.com/guides/variation-selectors-explained/">Variation Selectors: How Unicode Controls Text vs Emoji Display</a>, symbolfyi.com</cite></footer>
</blockquote>
<p>Of particular importance are the last two, VS15 and VS16, because they act as the emoji/text presentation toggle. It’s worth noting that not all emojis come in both forms, but if we <a href="https://www.unicode.org/emoji/charts/emoji-variants.html">look at those that do,</a> appending the variation selector can make a difference.</p>
<blockquote>
<p>When VS15 is appended to a symbol, it forces it to be displayed as text (black and white glyph). Contrarily, when VS16 is appended, it forces the color version to be displayed (emoji).</p>
<footer>— <cite><a href="https://www.codejam.info/2021/11/emoji-variation-selector.html">Emoji displayed as monochrome symbol? 🤔 The Unicode variation selector</a>, codejam.info</cite></footer>
</blockquote>
<p>This leaves us with the default case, i.e. an emoji that is all by itself, without variation selector. How will it be displayed? While there should be a simple answer, in practice it’s a bit more complicated, as the article I just quoted explains.</p>
<p>But what I actually wanted to talk about is what CSS adds to the mix with the <code>font-variant-emoji</code> property. Safari does not support the property (yet), in other browsers it only has an effect on emojis without a variation selector, which makes sense.</p>
<p>Long story short, I created a test page<sup><a id="ref-fn-1" href="https://cssence.com/2026/font-variant-emoji/#fn-1" role="doc-noteref" aria-label="Footnote #1">[1]</a></sup> to see how emojis are presented, and to see what the impact of <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-variant-emoji">the different values</a> of <code>font-variant-emoji</code> is. While the values <code>text</code> and <code>emoji</code> live up to their purpose, the values <code>normal</code> and <code>unicode</code> always resulted in the text form, independent of operating system, web browser, and emoji used.<sup><a id="ref-fn-2" href="https://cssence.com/2026/font-variant-emoji/#fn-2" role="doc-noteref" aria-label="Footnote #2">[2]</a></sup></p>
<h2 id="showcase">Showcase</h2>
<p><a href="https://codepen.io/cssence/pen/WbGYvXz">View “Unicode meets font-variant-emoji” on CodePen.</a></p>
<section>
<h2 id="fns">Footnotes</h2>
<ol>
<li id="fn-1">Fair warning, the test page ended up being unnecessarily complex, because initially I thought browsers have issues with monochromatic emojis in combination with <code>color-scheme</code> declarations that are not set on the <code>:root</code> level. But upon further investigation I realized that’s not the case. <a href="https://cssence.com/2026/font-variant-emoji/#ref-fn-1" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
<li id="fn-2">I’m not yet sure what to make of it. But as with most of <a href="https://cssence.com/series/test-pages/">my test pages:</a> To be continued. <a href="https://cssence.com/2026/font-variant-emoji/#ref-fn-2" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
</ol>
</section>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-0" hidden>
<h3 id="comment-0"><span data-href="https://mas.to/@CSSence/116395556590205462, https://bsky.app/profile/cssence.com/post/3mje2f6rxos2u"><b>Matthias Zöchling</b> wrote on <time datetime="2026-04-12T20:54:00Z">April 12, 2026 at 20:54</time></span></h3>
<p>✍️ In case you haven’t heard of <code>font-variant-emoji</code>, neither have I.</p>
<p><a href="https://cssence.com/2026/font-variant-emoji/">cssence.com/2026/font-variant-emoji</a></p>
</article>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><a href="https://bsky.app/profile/littlefair.ca/post/3mjerrbz2f22i" data-u="SL"><b>Sam Littlefair</b> wrote on <time datetime="2026-04-13T11:39:00Z">April 13, 2026 at 11:39</time></a></h3>
<p>This is excellent! I hate it when I try to insert a Unicode pictogram and it renders as an emoji.</p>
</article>
]]>
</description>
<pubDate>Sun, 12 Apr 2026 20:54:00 GMT</pubDate>
<guid>https://cssence.com/2026/font-variant-emoji/</guid>
</item>
<item>
<link>https://cssence.com/2026/animating-emojis/</link>
<title>Animating emojis (2026)</title>
<description>
<![CDATA[
<p>I dedided to stay in <em>glass</em> territory: After last year’s use of the two <a href="https://cssence.com/2025/animating-emojis/">Hourglass</a> emojis I’m moving on to <strong>sunglasses</strong>.</p>
<p>We all know that the <a href="https://emojipedia.org/smiling-face-with-sunglasses">smiling face with sunglasses</a>&nbsp;<span aria-hidden="true">😎</span> exists in Unicode, but what about creating it manually? Putting 🕶️ on 🙂 should take us there.</p>
<p>After finishing the initial animation, I realized I could throw in another one, so I made the smiley squint while the glasses are off. In doing so, I paid an homage to the <a href="https://cssence.com/2019/animating-emojis/">original animation</a> that started it all.</p>
<p>I also realized that I could add sunglasses to many other emojis. Put them on a cat&nbsp;<span aria-hidden="true">😺</span>, you get a cool cat. Nothing is off limits, but I beg you to leave the <a href="https://cssence.com/2020/animating-emojis/">monkey</a>&nbsp;<span aria-hidden="true">🐵</span> alone.</p>
<h2 id="showcase">Showcase</h2>
<p><a href="https://codepen.io/cssence/pen/wBzYNxm">View “Animating Emojis - Sunglasses” on CodePen.</a></p>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href="https://mas.to/@CSSence/116385604233287342, https://bsky.app/profile/cssence.com/post/3mj7mxmpmns2q"><b>Matthias Zöchling</b> wrote on <time datetime="2026-04-11T08:17:00Z">April 11, 2026 at 08:17</time></span></h3>
<p>My <a href="https://cssence.com/series/animating-emojis/">annual Emoji animation</a> returns, meaning there are now eight animations nobody asked for.</p>
<p>I made this on Linux, fingers crossed that it’ll look decent with the emoji set on your OS too.</p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><a href="https://mas.to/@iamdtms/116385669685727027" data-u="TD"><b>Tamás Dohány</b> wrote on <time datetime="2026-04-11T10:46:23Z">April 11, 2026 at 10:46</time></a></h3>
<p><a href="https://codepen.io/iamdtms/pen/LgeeMZ">Time flies! pen</a><br>- Animate Pseudo Emoji Content</p>
</article>
]]>
</description>
<pubDate>Sat, 11 Apr 2026 08:17:00 GMT</pubDate>
<guid>https://cssence.com/2026/animating-emojis/</guid>
</item>
<item>
<link>https://cssence.com/2026/breaking-points/</link>
<title>Breaking points</title>
<description>
<![CDATA[
<aside class="standoff -large" aria-labelledby="miniseries">
<p>This is the second blog post of my <a href="https://cssence.com/2026/tales-from-the-hospital/"><strong id="miniseries">Tales from the hospital</strong></a> miniseries. I wrote about edge cases in web design that I encountered between surgeries.</p>
<ol class="figure" aria-labelledby="miniseries">
<li><a href="https://cssence.com/2026/breakpoints/">Breakpoints</a></li>
<li>Breaking points</li>
<li><a href="https://cssence.com/2026/breaking-bad/">Breaking bad</a></li>
</ol>
</aside>
<p>For the first couple of weeks I refused to join the hospital Wi-Fi, instead I relied on my phone’s data plan. The problem is, there are thousands of patients and personnel all connecting to the same set of cellular towers, which obviously puts a burden on the system.</p>
<p>What I got in terms of connection speed I would rank somewhere slightly below 3G. Videos on YouTube would load sometimes, depending on the time of day. All other videos did not, I got network errors, most likely due to improperly handled timeouts.</p>
<p>Videos aside, for the majority of websites to load in the first place, I had to be very patient. (Not a problem, I’ve been a patient after all. Get it? Sorry.)</p>
<p>Here’s what I got trying to access a repository on GitHub. The HTML did load, but no stylesheets nor any JavaScript had been applied.</p>
<figure><img src="https://cssence.com/2026/breaking-points/github-without-css.webp" alt="My attempt to open the open-ui GitHub repository on a slow internet connection had essentially been a failure." style="--frame:#fff">
</figure>
<p>No stylesheets? Might as well use a <a href="https://cssence.com/2026/text-based-web-browsers/">text-based web browser.</a></p>
<h2>Client-side rendering</h2>
<p>How well a site fares also depends on the underlying technology. If you are lucky, the server already returns your requested content in the retrieved HTML.</p>
<p>On the other hand, if you have to wait for a large JavaScript file to get requested, downloaded, parsed, and executed, so that it then hopefully will fetch actual content, there’s a chance some step along the way won’t be successful, especially on a slow connection. As a result, you may be starring at a blank page indefinitely, usually without any information that something went wrong.</p>
<p>Put simply, I have a feeling that the “HTML” you got looks like this, courtesy of <em>insert name of JavaScript framework:</em></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
	&lt;head&gt;&lt;!-- … --&gt;&lt;/head&gt;
	&lt;body&gt;
		&lt;script src=&quot;/app.js&quot;&gt;&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>Whenever that’s the case, <strong>someone did not do the <a href="https://cssence.com/2021/the-day-the-website-stood-still/">progressive enhancement</a> homework.</strong></p>
<h2>A call for lightweight websites</h2>
<p>Don’t leave your site visitors empty-handed, do this instead:</p>
<ul>
<li>Prioritize content.</li>
<li>Put emphasis on performance.</li>
<li>Fail gracefully.</li>
</ul>
<p>I’ll keep this essay short, because I’m gonna hand over to Marijke Luttekes, who already wrote what needs to be said in her superb article <a href="https://marijkeluttekes.dev/blog/articles/2026/01/21/why-light-weight-websites-may-one-day-save-your-life/">»Why light-weight websites may one day save your life«.</a></p>
<blockquote cite="https://marijkeluttekes.dev/blog/articles/2026/01/21/why-light-weight-websites-may-one-day-save-your-life/">
<p>I do not see as much talk about website performance and size as I would. Usually, the people talking about it are the artisans who care, or those who have been told by tools like Lighthouse that their stats are wrong.</p>
</blockquote>
<p>On the upside, my own site performed well on said slow connection. Am I one of those artisans Marijke is talking about?</p>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-0" hidden>
<h3 id="comment-0"><span data-href="https://mas.to/@CSSence/116130032183771712, https://bsky.app/profile/cssence.com/post/3mfo52yq5sk2f"><b>Matthias Zöchling</b> wrote on <time datetime="2026-02-25T07:14:00Z">February 25, 2026 at 07:14</time></span></h3>
<p>Part Two of my miniseries about edge cases in web design:</p>
<p>Will all the resources on your site finish loading?</p>
<p>Only at the best of times.<br><a href="https://cssence.com/2026/breaking-points/">cssence.com/2026/breaking-points</a></p>
</article>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href="https://mas.to/@CSSence/116130038061363436"><b>Matthias Zöchling</b> wrote on <time datetime="2026-02-25T07:15:00Z">February 25, 2026 at 07:15</time></span></h3>
<p>Tl;dr, you can skip reading my article, instead head straight over to @mahryekuh@hachyderm.io’s site and read <a href="https://marijkeluttekes.dev/blog/articles/2026/01/21/why-light-weight-websites-may-one-day-save-your-life/">»Why light-weight websites may one day save your life«.</a></p>
</article>
<article aria-labelledby="comment-2">
<h3 id="comment-2"><a href="https://hachyderm.io/@mahryekuh/116137871016892582" data-u="ML"><b>Marijke Luttekes</b> wrote on <time datetime="2026-02-26T16:27:56Z">February 26, 2026 at 16:27</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@CSSence@mas.to</span>.</small></p>
<p>Thank you for mentioning me! Loved your article too.</p>
<p>I hope you get well soon!</p>
</article>
<article aria-labelledby="comment-3">
<h3 id="comment-3"><span data-href="https://mas.to/@CSSence/116138413487226674"><b>Matthias Zöchling</b> wrote on <time datetime="2026-02-26T18:45:53Z">February 26, 2026 at 18:45</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@mahryekuh@hachyderm.io</span>.</small></p>
<p>Aw, thanks for the kind words.</p>
</article>
<article aria-labelledby="comment-4">
<h3 id="comment-4"><span data-href="https://bsky.app/profile/cssence.com/post/3mfo5xepdgk2f"><b>Matthias Zöchling</b> wrote on <time datetime="2026-02-25T07:31:00Z">February 25, 2026 at 07:31</time></span></h3>
<p>Seconds after I posted my latest article I ran into this gem from @dbushell.com, so I’m gonna link to it:<br><span aria-hidden="true">🔗 </span><a href="https://dbushell.com/2025/06/13/your-framework-is-showing-nextjs-error/">»Your Framework is Showing«</a></p>
<p>Throwing such an error message towards your visitors violates my “Fail gracefully” bullet point.</p>
</article>
<article aria-labelledby="comment-5">
<h3 id="comment-5"><a href="https://bsky.app/profile/dbushell.com/post/3mfo6dfxx2k2f" data-u="DB"><b>David Bushell</b> wrote on <time datetime="2026-02-25T07:37:00Z">February 25, 2026 at 07:37</time></a></h3>
<p data-chain="reply"><small>In reply to: <span>@cssence.com</span>.</small></p>
<p>great article!</p>
<p>yours i mean! and mine i guess 🙂</p>
</article>
<article aria-labelledby="comment-6">
<h3 id="comment-6"><span data-href="https://bsky.app/profile/cssence.com/post/3mfo6ioqw4c2f"><b>Matthias Zöchling</b> wrote on <time datetime="2026-02-25T07:40:00Z">February 25, 2026 at 07:40</time></span></h3>
<p data-chain="reply"><small>In reply to: <span>@dbushell.com</span>.</small></p>
<p>Long Distance High Five! 🙂</p>
</article>
]]>
</description>
<pubDate>Wed, 25 Feb 2026 07:14:00 GMT</pubDate>
<guid>https://cssence.com/2026/breaking-points/</guid>
</item>
<item>
<link>https://cssence.com/2025/without-further-notice/</link>
<title>Redesigning in the open - Without further notice</title>
<description>
<![CDATA[
<p>New design coming soon?</p>
<blockquote cite="https://cssence.com/2024/redesigning-in-the-open/">
<p><strong>No, not on this site</strong> in <a href="https://cssence.com/about/versions/">the foreseeable future.</a> I like my current way of doing incremental changes.</p>
</blockquote>
<p>… is <a href="https://cssence.com/2024/redesigning-in-the-open/">what I wrote last year</a> about this site’s design, only to start working on another redesign a couple of months later.</p>
<p>Well, guess what, after working incrementally on it from February to May, I think I’m done. But now it’s November, and you still see the to-be-replaced design. What gives?</p>
<p>Despite all those incremental changes, there never was a banner message indicating an ongoing redesign, stating “if things look wonky, that’s why”, because those changes remained hidden. In the unlikely event that someone headed over the my Settings page, they could have encountered the new design in the <em>page style</em> dropdown, which is where is was (and still is) buried for all those months. In other words, I’ve been <strong>redesigning in the open, hidden behind a flag.</strong></p>
<p>This may not work for everybody, as not everyone has multiple styles on their site, let alone a Settings page that allows you to choose a style, but there are other ways to pull this off in the open. Alas, they are not the scope of today’s article.</p>
<p>Personally, my stategy has served me well, because the new design uses a lot new CSS features that are not yet classified as <em>widely available</em> in <a href="https://web.dev/baseline/">Baseline</a> terms, so it remains to be seen when I’m going to make the switch, i.e. when the new design will become the default. To make things worse, I still like my old design more. Obviously, it will eventually happen, because writing CSS in 2025 is different, especially when compared to the CSS I wrote four years ago, when my last major redesign took place. In other words, looks aside, I like the new CSS under the hood a lot.</p>
<hr>
<p>Whenever I do a major redesign, I jot down a couple of noteworthy facts, which is exactly what I’ll do for the remainder of this editorial.</p>
<h2>Starting from scratch</h2>
<p>A clean slate can be very liberating, but in my case I had to be backwards-compatible at the same time, because changing the HTML meant I had to retrofit such changes into the existing design(s). Luckily, the semantic markup I had in place was very capable of housing the new design too, only minor tweaks were necessary. Most importantly, no additional wrapper divs had to be introduced. 😌</p>
<h2>Included features</h2>
<p>Okay, no more stalling, let me run through the interesting bits.</p>
<h3>Native CSS nesting</h3>
<p>I started using native nesting for everything: Not just regular selectors, but also pseudo elements and media queries. When I wrote <a href="https://cssence.com/2024/is-css-alive/">»Is CSS alive«</a>, my verdict on nesting has been <q cite="https://cssence.com/2024/is-css-alive/">Take it or leave it.</q> To my own surprise I grew very fond of it. Just make sure that your selectors do not get unnecessary complex, don’t let your nesting levels run too deep, and avoid <a href="https://dev.to/kilianvalkhof/the-gotchas-of-css-nesting-58m9">the gotchas that come with nesting.</a></p>
<h3>Nested color scheme</h3>
<p>Yeah, the new design features a dark color scheme on the top level, but the actual content adapts to user preference. Confused? I already blogged about this technique in depth in my <a href="https://cssence.com/2025/nesting-color-schemes/">»Nesting color schemes«</a> essay.</p>
<h3>Logical properties</h3>
<p>I’m a big fan of logical properties, and by starting from scratch I was finally able to use them exclusively.</p>
<h3>Media queries &amp; breakpoints</h3>
<p>I was leaning towards <a href="https://youtu.be/AMPKmh98XLY">Intrinsic Web Design</a> to let my content roam free, in hopes of needing little to no breakpoints. But I didn’t achieve that in this redesign. It turned out to be almost the opposite, for the first time I even have additional tweaks for screen sizes below 360&nbsp;pixels, intended for smartwatches. In said smartwatch territory I even made sure that my site works on circular displays.</p>
<figure id="figure-1"><img loading="lazy" src="smartwatch.webp" alt="How the top part of this article might look like when viewed on a circular smart watch display." style="--frame: ">
<figcaption>The new design on a 240x240pixel circular screen.</figcaption>
</figure>
<h3>Layout …</h3>
<p>Floats are back. Yes, you read that right, but obviously I’m using floats for their true purpose, not in the hacky way we did layout in the past. Floats are for minor things, the heavy lifting is done with Grid and Flexbox. And I even ended up with my first use of <code>display: contents</code>.</p>
<h3>… and more</h3>
<p>Speaking of using a property for the first time, in the new design I even made use of <code>border-image</code><sup><a id="ref-fn-1" href="https://cssence.com/2025/without-further-notice/#fn-1" role="doc-noteref" aria-label="Footnote #1">[1]</a></sup>. Just like floats that’s something from ye olden days. We used border images to <a href="https://cssence.com/2011/sliding-door-no-more/">do weird things in the past</a><sup><a id="ref-fn-2" href="https://cssence.com/2025/without-further-notice/#fn-2" role="doc-noteref" aria-label="Footnote #2">[2]</a></sup>, but there are lots of <a href="https://www.smashingmagazine.com/2024/01/css-border-image-property/">clever ways you can use them today.</a></p>
<p>That’s about it, but if you look closely you’ll find <code>text-wrap</code>’s pretty and balance options, the <code>clamp()</code> function, and more. Color is the only thing I haven’t fully embraced yet, I’m still predominantely using hex notation and the sRGB color space.</p>
<p>One last thing: Like in previous redesigns, the site navigation (and footer) is a defining feature, and this time I had some fun with the number of columns.</p>
<h2>Still hidden</h2>
<p>I’ve named my new page style “Elegant”. As stated, at the time of writing this post, it hasn’t become the default yet, I’m still showing the old “Advanced” style. You can head over to <a href="https://cssence.com/settings/">Settings</a> and flip the switch yourself.</p>
<p>With all that being said, I have a strange feeling that the next redesign is right around the corner.</p>
<section>
<h2 id="updates">Update</h2>
<p id="update-1"><time class="update" datetime="2025-12-02">December 2, 2025:</time> I pulled the switch, the <em>Elegant page style</em> is now the default.</p>
</section>
<section>
<h2 id="fns">Footnotes</h2>
<ol>
<li id="fn-1">To be exact, I only have a single use case, I’m applying it to some images in my blog posts, namely those that should not touch the edge of their <code>&lt;figure&gt;</code> container. While photos usually go edge-to-edge, for certain graphics I use the border image to add a colored frame that matches their dominant background color. <a href="https://cssence.com/2025/without-further-notice/#figure-1">The screenshot above</a> even has a transparent frame. <a href="https://cssence.com/2025/without-further-notice/#ref-fn-1" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
<li id="fn-2">Case in point, that link goes to an old article of mine called »Sliding door, no more« from 2011. It starts with an introduction that is <em>floated</em> to the right in the new design—well, actually to the <code>inline-end</code>, you do remember I said logical properties? 😉 <a href="https://cssence.com/2025/without-further-notice/#ref-fn-2" role="doc-backlink" aria-label="Back to article">↩︎</a></li>
</ol>
</section>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-0" hidden>
<h3 id="comment-0"><span data-href="https://mas.to/@CSSence/115510256498379995, https://bsky.app/profile/cssence.com/post/3m4zxlgkqis2t"><b>Matthias Zöchling</b> wrote on <time datetime="2025-11-07T11:15:00Z">November 7, 2025 at 11:15</time></span></h3>
<p>I have a philosophical thought experiment for you:<br>If a redesign happens in the open, and no one is around to see it, did it go live?</p>
<p><a href="https://cssence.com/2025/without-further-notice/">cssence.com/2025/without-further-notice</a></p>
</article>
<article aria-labelledby="comment-1">
<h3 id="comment-1"><span data-href="https://mas.to/@CSSence/115650667380184994, https://bsky.app/profile/cssence.com/post/3m6zavcrhps2m"><b>Matthias Zöchling</b> wrote on <time datetime="2025-12-02T15:09:00Z">December 2, 2025 at 15:09</time></span></h3>
<p>“Baseline widely available” is a good thing to look out for when it comes to CSS features, but given that my blog’s core audience uses the latest browsers, I just went all in and made my new design the default.</p>
</article>
]]>
</description>
<pubDate>Fri, 07 Nov 2025 11:15:00 GMT</pubDate>
<guid>https://cssence.com/2025/without-further-notice/</guid>
</item>
<item>
<link>https://cssence.com/2025/css-in-graz/</link>
<title>CSS-in-Graz meetup #7</title>
<description>
<![CDATA[
<p>I went to Graz with a talk named <a href="https://cssence.github.io/slides-cssingraz2025/">“CSS has come full circle”</a> in my backpack, that I presented at the <a href="https://www.meetup.com/css-in-graz/events/308080536/">seventh CSS-in-Graz meetup.</a> I was followed by other attendees and our host <a href="https://www.matuzo.at/">Manuel</a>, who made up some inspiring impromptu talks on the spot.</p>
<hr>
<p>Usually I do a little coverage of the event, but it was <a href="https://www.bbc.com/news/articles/ced27g4e6xwo">overshadowed by current events [content warning: disturbing scenes].</a> Violence has no place in society. 💔</p>

<hr>
<h2 id="comments">Comments</h2>
<p>Comments are closed.</p>
]]>
</description>
<pubDate>Tue, 10 Jun 2025 21:58:00 GMT</pubDate>
<guid>https://cssence.com/2025/css-in-graz/</guid>
</item>
<item>
<link>https://cssence.com/2025/blog-questions-challenge/</link>
<title>Blog questions challenge</title>
<description>
<![CDATA[
<p>Last week, Jeremy Keith tagged me to take part in the <em>Blog Questions Challenge</em> … well, not me per se, but everyone who has read <a href="https://adactio.com/journal/21674">his blog post on the subject,</a> where he did follow suit after being tagged. The goal is to answer a particular set of questions.</p>
<p>So let me get right to it.</p>
<h2 class="visually-hidden">Questions and answers</h2>
<h3>Why did you start blogging in the first place?</h3>
<p>I’ve been <a href="https://cssence.com/2023/view-source/">tinkering with websites</a> since forever, and already in those early days I created pages that looked like blog posts about my personal life. Alas, these sites I’ve had in the late ’90s no longer exist, and even though I eventually got paid to make websites, in the first decade of the ongoing millenium I myself had no public-facing site to speak of.</p>
<p>It was <a href="https://cssence.com/2024/keep-blogging/">more than 5000 days ago</a> when I figured <em>CSSence</em> would be a good user name for someone who is very fond of Cascading Style Sheets, and I’ve pondered the idea of creating <a href="https://cssence.com/about/">an online magazine,</a> where I would write one article per month. I did start in January 2011, but I only managed to write seven long-form articles, meaning things already came to a halt after July.</p>
<p>I pretty much found myself in a similar situation as Max Böck, in the sense that I would find <a href="https://mxb.dev/blog/seven-reasons-why-i-dont-write/">excuses to not write more.</a> Thus, the site remained in a dormant state until 2015, when something ignited the spark again.</p>
<h3>What platform are you using to manage your blog and why did you choose it? Have you blogged on other platforms before?</h3>
<p>I started on WordPress, but early on it was clear that I wanted to be in full control of the styling, without the limitations of a WordPress theme. I already had my own domain and webspace, only to have my initial deployment followed by years of “coming soon”.</p>
<p>My desire to be in control of the styling came at the expense of something rather important: I had no proper workflow to get the actual content out.</p>
<p>This changed with the aforementioned spark, I got back to blogging by writing on medium.com. Oh the irony, it took another place out of my control to get affairs on my own site in order. I started with my own lightweight solution, that I later replaced with the <a href="https://cssence.com/2017/metalsmith-io/">Metalsmith static site generator.</a> Around that time I switched to publishing on my own site first. I even kept medium.com as a <a href="https://cssence.com/2019/leaving-social-sites/">syndication target for a little while.</a></p>
<p>I got to the point where I was finally in control of everything. Not only did my site become my IndieWeb hub, I’ve also replaced MetalSmith with <a href="https://cssence.com/2022/zero-vulnerabilities-found/">a static site generator I wrote myself.</a></p>
<h3>How do you write your posts? For example, in a local editing tool, or in a panel/dashboard that’s part of your blog?</h3>
<p>Writing my own static site generator resulted in moving away from Markdown, nowadays all my pages are raw HTML files, which are part of the same GitHub repository as the hand-rolled generator.</p>
<p>So I write everything in the IDE, which currently happens to be VSCode, but I’m working on a simple HTML form (that is going to be part of the site), that enables me to create new blog posts faster, and even amend existing posts.</p>
<h3>When do you feel most inspired to write?</h3>
<p>An idea may errupt at any time, but sometimes it’s as simple as stumbling upon an issue that needs investigation. Down the rabbit hole I go.</p>
<h3>Do you publish immediately after writing, or do you let it simmer a bit as a draft?</h3>
<p>Immediately. I blog about HTML, CSS and sometimes even JS. In the fast-paced world of web development, staying in draft makes little sense. The only reason something doesn’t get out immediately is because real life gets in the way. And there is more real life than ever, as my family keeps growing. Currently the household consists of (in order of appearance): Wife, dog, husband, child #1, child #2, and most recently child #3.</p>
<h3>What’s your favorite post on your blog?</h3>
<p>It’s always the one that I’m working on, i.e. the one that I’ll publish next.</p>
<h3>Any future plans for your blog? Maybe a redesign, a move to another platform, or adding a new feature?</h3>
<p>Jeremy wrote that he likes <q cite="https://adactio.com/journal/21674">making little incremental changes.</q> So do I. In the early days, doing a complete overhaul was appealing, but today my site has over 300&nbsp;pages. Luckily the markup I have in place is versatile, this allows me to simply add a new theme and make it available on my Settings page, which is a different approach to <a href="https://cssence.com/2024/redesigning-in-the-open/">redesigning in the open.</a> At some point it may make sense to make such an added theme the new default. But keeping the old themes around allows me to grow my own CSS Zen Garden.</p>
<h3>Next?</h3>
<p>On the one hand I’d like these questions answered by anyone who follows me on social media, but on the other hand I have a very specific request: If you aren’t a blogger already, why not start in 2025? Go ahead and create a blog, and then take part in the <em>Blog Questions Challenge.</em> By doing so you already have your first blog post.</p>

<hr>
<h2 id="comments">Comments</h2>
<article aria-labelledby="comment-0" hidden>
<h3 id="comment-0"><span data-href="https://mas.to/@CSSence/113939458832640204, https://bsky.app/profile/cssence.com/post/3lhbd5non5224"><b>Matthias Zöchling</b> wrote on <time datetime="2025-02-03T10:22:00Z">February 3, 2025 at 10:22</time></span></h3>
<p>Last week, @adactio@mastodon.social tagged me to take part in the <em>Blog Questions Challenge</em> … well, not me per se, but all of us.<br><a href="https://cssence.com/2025/blog-questions-challenge/">cssence.com/2025/blog-questions-challenge</a></p>
</article>
<p>No comments have been added so far.</p>
]]>
</description>
<pubDate>Mon, 03 Feb 2025 05:38:00 GMT</pubDate>
<guid>https://cssence.com/2025/blog-questions-challenge/</guid>
</item>
</channel>
</rss>
