Roma Komarov
banner
kizu.front-end.social.ap.brid.gy
Roma Komarov
@kizu.front-end.social.ap.brid.gy
Inventing weird CSS things.

CSSWG Member (previously: an invited expert).

Frontend engineer working on Datadog's design system.

Ask me about: #CSS, #Frontend […]

🌉 bridged from ⁂ https://front-end.social/@kizu, follow @ap.brid.gy to interact
New blog post: “Build Bridges”.

https://blog.kizu.dev/build-bridges/

This is a very quick shout-out to the Bridgy Fed project by @snarfed.org.

If you know people who are only present on one of the networks and are not bridging their accounts — nudge them to do so!

#indieweb #bluesky #fediverse
Build Bridges Build Bridges Build Bridges Build Bridges
# Build Bridges Build Bridges Build Bridges Build Bridges Published on: November 29, 2025 Categories: Fediverse 3, Mastodon 6, IndieWeb 11 Current music: 36 — _Inside (2:56AM Mix)_ {fallback} Current drink: Lemongrass, Ginger & Black Pepper tea This is a very quick shout-out to the Bridgy Fed project by Ryan Barrett. Its goal is to connect people across otherwise unrelated federated network: Fediverse, Bluesky, and even IndieWeb sites. After the exodus from more corporate and capitalist networks, people ended up in different parts of the web. Each segment could be well-connected inside, but if you want to participate _everywhere_ where people are now, you often need to create and maintain multiple accounts. I often see people reposting the same thing in multiple places — which is fine, but not everyone has the spoons to do so. Not everyone is also ready to create an account in a network they do not understand or do not like. That’s where Bridgy can really help: it is the _easiest_ and most straightforward way to connect your account to other networks. * If you’re on Mastodon or elsewhere in the Fediverse and want to make it possible for people from Bluesky to follow you, you can either log in with your account here or just follow the `@bsky.brid.gy@bsky.brid.gy` account from your client (you can use search to find it there via its handle). * If you’re on Bluesky, and want to make it possible for people on Mastodon and the Fediverse at large to follow you, you can either log in with your account here, or just follow @ap.brid.gy from Bluesky. That’s it. Bridgy works as opt-in — nothing is bridged without your consent, and by default it will only bridge your public posts. Here is, for example, my bridged account on Bluesky, where the posts from my Mastodon profile go automatically. And here is my bridged Pixey (Pixelfed instance) account where the photos from my Pixey gallery go. Bridgy even handles replies, DMs, and more. It is zero maintenance, and there is zero reason not to use it. If you know people who are only present on one of the networks and are not bridging their accounts — nudge them to do so! The more interconnected our web is, the more powerful it is. I find it awesome that vastly different networks can talk to each other thanks to projects like that.
blog.kizu.dev
November 29, 2025 at 10:49 PM
New blog post: “Bolder Links”.

https://blog.kizu.dev/bolder-links/

This is another post about a small design tweak that I made around two years ago to both my blog and main website. I never shared it, because, well, it feels very small. But I liked it a lot, and I don’t think I could ever come […]
Original post on front-end.social
front-end.social
November 28, 2025 at 10:29 PM
New blog post: “Conditional JSX in Astro”.

https://blog.kizu.dev/conditional-jsx-in-astro/

This is me documenting the way I am handling some of the more complex conditional rendering in Astro’s JSX. Well, not strictly _JSX_ — but its “Component Template” part of `.astro` components and […]
Original post on front-end.social
front-end.social
November 27, 2025 at 10:49 PM
New blog post: “Border: 2px double”.

https://blog.kizu.dev/border-2px-double/

I wanted to write a different post today, but did not have time to finish it, oops.

So let me tell you one pretty useless but fun #css fact.
November 26, 2025 at 10:26 PM
CSS wish related to my last post: inside a flexbox, for a single element, being able to control the `flex-shrink` & `flex-grow` differently for margins, borders, paddings, and content.

Make the content-box not shrink, but the margins shrink. Make the paddings expand. Etc.
November 26, 2025 at 12:44 PM
You write expansive articles, but the one that goes to HN is a post you wrote in 15 minutes after not sleeping for 22 hours and pseudo-jet-lagged after remotely attending TPAC: https://news.ycombinator.com/item?id=46048229

I mean, among other things, I call HTML a programming language in my […]
Original post on front-end.social
front-end.social
November 26, 2025 at 9:57 AM
New blog post: “Responsive Cyclic Margins”.

https://blog.kizu.dev/responsive-cyclic-margins/

The title of this post might not seem like a big deal, but the problem I will talk about was pretty fun to work out: how do you make a margin between elements responsive based on the available space in […]
Original post on front-end.social
front-end.social
November 25, 2025 at 10:36 PM
New blog post: “Play With Inherit Function”.

https://blog.kizu.dev/play-with-inherit-function/

One of the things that might flight under many people’s radars is the incoming `inherit()`. Not the `inherit` keyword — we had it for quite a while already.

Now it is available in Chrome Canary with […]
Original post on front-end.social
front-end.social
November 24, 2025 at 10:35 PM
Any skeuomorphic radio buttons should behave as checkboxes with enough effort applied.
November 24, 2025 at 10:22 AM
New blog post: “Photo Walk, April”.

https://blog.kizu.dev/walk-april-2025/

I am back with reposting some of my old photos from my Pixelfed, but now in my blog.
November 23, 2025 at 8:09 PM
New blog post: “On Perfectionism and Chaotic Messes”.

https://blog.kizu.dev/on-perfectionism-and-chaotic-messes/

I don’t have a topic for today, so I decided to ramble a bit on a random topic: wondering how the two things in the title of today’s post can live at the same time in me. I have a […]
Original post on front-end.social
front-end.social
November 22, 2025 at 8:52 PM
New blog post: “I Want to Rewrite Everything”.

https://blog.kizu.dev/i-want-to-rewrite-everything/

This whole week, I am switching between writing posts in this blog and working on my next article for my main site. My blog has a much more modern setup for writing posts. The old setup? It is an […]
Original post on front-end.social
front-end.social
November 21, 2025 at 7:17 PM
Reposted by Roma Komarov
Blink: Intent to Ship: Focus's focusVisible option
Blink: Intent to Ship: Focus's focusVisible option
Blink: Intent to Ship: Focus's focusVisible option
groups.google.com
November 20, 2025 at 6:24 PM
New blog post: “Scope for Examples”

https://blog.kizu.dev/scope-for-examples/

With yesterday’s post, — “Anchoring to a Containing Block” — I started to use `@scope` for my #css code examples.
Scope for Examples Scope for Examples Scope for Examples Scope for Examples
# Scope for Examples Scope for Examples Scope for Examples Scope for Examples Published on: November 20, 2025 Categories: CSS Scope, CSS Scopes 4, CSS 83 Current music: Jenn Champion — Going Nowhere Current drink: Thyme, rosemary & lemon infusion With yesterday’s post, — “Anchoring to a Containing Block” — I started to use `@scope` for my code examples. This is one of the most exciting use cases I saw for the `@scope` — an ability to do something like this: Hello! p { outline: 2px solid var(--PINK); } <p>Hello!</p> See how I render this code inline in my post, and the `p` selector is not applying to this literal paragraph that I am writing right now? And, actually, let me show you how this looks like in my markdown: I am not mentioning it in this post, but I also have a `require` prop to signify the support of the feature and add a warning to browsers that do not support it yet. <LiveExample isScoped require="at-scope"> ```CSS p { outline: 2px solid var(--PINK); } ``` ```HTML <p>Hello!</p> ``` </LiveExample> This is how I write all the examples in my blog: I have my custom Astro `<LiveExample>` component, which takes the Markdown code blocks inside, and both shows the corresponding code, but also outputs these code blocks’ content on the page, so I can just write my examples once, have their code visible, and not have to duplicate the effort when I need to update something. In the above case you can see the `isScoped` prop: before I had it, all examples did output their code _literally_ , so whenever I had to have similar examples, I had always to come up with some prefix or unique class names for them. With `isScoped`, I wrap the content of the inner CSS block with just `@scope {}`, so that code will be equivalent to @scope { p { outline: 2px solid var(--PINK); } } Which can be called “local scoping”, see the “Identifying Scoping Roots and Limits” section of the Cascading and Inheritance Module 6. How it works is: if we add an HTML `<style>` tag in our HTML, and inside this tag there will be an `@scope` without the scope start selector, it will be scoped to that `<style>`’s parent element: > If no `<scope-start>` is specified, the scoping root is the parent element of the owner node of the stylesheet where the `@scope` rule is defined. And that is very useful for any blog posts with code examples — this makes every example to work independently of others. There are a few things I will need to improve with how I use these types of examples: * Sometimes, there is a need to share some styles across different examples. Possible solution: use named scopes, and overload the prop to allow also doing `isScoped="foo"`, where I could mention some ident, and then both the example will get this ident automatically added as a class name to the example’s wrapper, and it will go into the `@scope` like `@scope (.scope-foo)` or something. * It can still be useful for understanding of the examples to have their full code, so maybe there could also be something done on the LiveExample’s side to add some automatic diffing of consequtive examples, where we could highlight the changed lines in some way? In yesterday’s post, that would’ve been pretty handy. ## But… `@scope` is not Baseline? Yeah, but I also write about non-baseline things. When writing about CSS features like anchor positioning or scroll-driven animations, or anything newer, there is no reason _not_ to use `@scope`. If you have a blog, write about modern CSS, and create inline demos there (not by embedding CodePens or anything else as `<iframe>`s), I highly recommend you to try `@scope`. It is cool.
blog.kizu.dev
November 20, 2025 at 8:09 PM
white-space: unwrap
November 20, 2025 at 10:11 AM
New blog post: “Anchoring to a Containing Block”

https://blog.kizu.dev/anchoring-to-a-containing-block/

Today I stumbled upon a #css issue that I and some others (like @jamessw) had in the past: an inability to use an anchored element’s containing block with anchor positioning. At least — to […]
Original post on front-end.social
front-end.social
November 19, 2025 at 9:21 PM
New blog post: “Minimal Reproductions”

https://blog.kizu.dev/minimal-reproductions/

I am continuing working on my new article, and while making examples for it, I stumbled upon a crash in Safari — both in its stable version and in Technology Preview. I managed to reduce it to a minimal […]
Original post on front-end.social
front-end.social
November 18, 2025 at 10:03 PM
PTO choices: continue writing an article about a groundbreaking new CSS technique, or continue a stale, months-old playthrough of Expedition 33?

Probably, both: just cleaned some literal dust from my steamdeck, and waiting for it to charge from an empty battery.
November 18, 2025 at 12:18 PM
RE: https://front-end.social/@kizu/115546765910089031

Reminder about this poll: it already gives us a bunch of useful info, but we'd like to have even more participants!

When answering, feel free to interpret it as what *you* would like it to be, rather than what you think it will eventually […]
Original post on front-end.social
front-end.social
November 18, 2025 at 10:45 AM
Love to crash stable Safari when writing a new article.
November 18, 2025 at 9:15 AM
New blog post: “Whitespace in Code”

https://blog.kizu.dev/whitespace-in-code/

I always liked to pay a lot of attention to how I format my #css, with the roots of it coming from the conventions that @pepelsbey shared when we worked together in ~2007–2008.

Currently, I don’t have spoons for […]
Original post on front-end.social
front-end.social
November 17, 2025 at 6:35 PM
running out of holy grails to put on my shelf; please help
November 17, 2025 at 1:25 PM
New blog post: “Preparing Images for Pixelfed”

https://blog.kizu.dev/preparing-images-for-pixelfed/

I wanted to share for quite some time how I prepare photos before uploading them to #pixelfed, and now is a good opportunity to do so. There were a few things I noticed that made a difference in […]
Original post on front-end.social
front-end.social
November 16, 2025 at 7:50 PM
New blog post: “My Most-Used Obsidian Plugins”

https://blog.kizu.dev/my-most-used-obsidian-plugins/

I've used @obsidian for quite a while. While my vault’s contents are a chaotic mess, it really helps me to be the place where I can put my notes and then find them when the need arises.

I use a […]
Original post on front-end.social
front-end.social
November 15, 2025 at 10:25 PM
That feeling when you invent a new technique, and then manage to simplify it, removing some unnecessary complexities in its execution.
November 15, 2025 at 4:46 PM