Sign in

iiinova is part of the Atmosphere — an open, public network where you own your identity.

Roma Komarov

@kizu.front-end.social.ap.brid.gy
98 followers 9 following 565 posts

Inventing weird CSS things. CSSWG Member (previously: an invited expert). Worked on Datadog’s design system. Ask me about: #CSS, #Frontend, #DesignSystems. Located […] 🌉 bridged from ⁂ front-end.social/@kizu, follow @ap.brid.gy to interact

PostsRepliesMedia
Roma Komarov @kizu.front-end.social.ap.brid.gy · 18/10/2026
Currently playing: Titanium Court.
010 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 17/10/2026
Even if this were possible, the reason it would never be implemented is that it would add another bit to the fingerprinting surface, of course.
010 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 17/10/2026
A “prefers reduced slop” setting, where instead of all of that, you only see the original prompts instead.
110 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 13/10/2026
@nikitonsky ok, but what if we could control the volume of audio or video tags just with CSS scroll-driven animations
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 13/10/2026
@nikitonsky I noticed that tend to like just plain `git diff` more than (m)any of those, proving that you really don’t need a lot of that noise.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/10/2026
@AmeliaBR Chrome, Safari, and Firefox agree, so… :D
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/10/2026
Cursed HTML crimes: ``` <p><a href="#nope">Try me</a></p> <details name="cursed"> <p>Will toggle, but only after second invocation</p> <details name="cursed"> <p id="nope">Inaccessible</p> </details> </details> ```
210 2
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/10/2026
Checked today, and the built-in hidden-until-found of `<details>` also works well with anchor links inside.
1273 27
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/10/2026
I want to build a cobweb site
110 1
Reposted by Roma Komarov
IntentToShip @intenttoship.dev · 30/09/2026
Blink: Intent to Ship: HTML-in-canvas
groups.google.com
Blink: Intent to Ship: HTML-in-canvas
Blink: Intent to Ship: HTML-in-canvas
0213 21
Roma Komarov @kizu.front-end.social.ap.brid.gy · 30/09/2026
Container queries? :blobcatthink: Descendant queries! :blob_cat_aww:
001 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 26/09/2026
@nikitonsky I remember reporting this to the Chrome team at CSS Day a while ago — issues.chromium.org/issues/543049053 — the bug is still open, but _I think_ the recent chromiums had some changes that improved that, but I imagine it is not yet in yours. This is not unique to GH, mostly […]
front-end.social
Original post on front-end.social
000 0
Reposted by Roma Komarov
IntentToShip @intenttoship.dev · 25/09/2026
Gecko: Intent to Ship: Scroll-driven Animations
groups.google.com
Gecko: Intent to Ship: Scroll-driven Animations
Gecko: Intent to Ship: Scroll-driven Animations
1459 45
Roma Komarov @kizu.front-end.social.ap.brid.gy · 23/09/2026
Like `light-dark()` but for increased contrast mode: ```css @function --default-or-contrast(--default, --contrast) { result: if( media(prefers-contrast: more): var(--contrast); else: var(--default); ); } ``` `border-color: --default-or-contrast(color-mix(currentColor, transparent) […]
front-end.social
Original post on front-end.social
001 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 23/09/2026
Will attend Fronteers Dark Mode (www.fronteersconf.org) next week. The last time I was at the proper Fronteers conf was in 2013. This is not exactly it, but hey. See some of you there!
fronteersconf.org
Fronteers Dark Mode, Friday, October 2nd, Dordrecht
Join us at Cinema de Witt in Dordrecht for our after work conference.
000 0
Reposted by Roma Komarov
IntentToShip @intenttoship.dev · 22/09/2026
Gecko: Intent to Ship: CSS Typed Arithmetic
groups.google.com
Gecko: Intent to Ship: CSS Typed Arithmetic
Gecko: Intent to Ship: CSS Typed Arithmetic
0104 10
Roma Komarov @kizu.front-end.social.ap.brid.gy · 17/09/2026
I am a big fan of pre-moderated comments/replies almost anywhere, with an allowlist. Places that are too open are too loud, too vulnerable.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 16/09/2026
`let mh=0;while(1){mh--};`
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 04/09/2026
Got to play a bit with smart playlists in Navidrome, and while they’re awkward, it is nice to have one that gives you random songs with the lowest play counts. Even with the regular shuffle, I discovered so many things in a much more limited library that algorithms in streaming services were […]
front-end.social
Original post on front-end.social
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 01/09/2026
@bigandy @bramus Yeah, I do not think so. We need some way to convert an ident to a string. The more general issue about this I guess is github.com/w3c/csswg-drafts/issues/…, and there is a `string()` in the generated content module, although I am not sure it is _that_ string, as it […]
front-end.social
Original post on front-end.social
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 31/08/2026
@bigandy Ooooh, and alongside `ident()` among other things!
200 2
Roma Komarov @kizu.front-end.social.ap.brid.gy · 25/08/2026
(ok, ok, I am stopping, just had to get it out of my… system)
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 25/08/2026
Dork mode.
101 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 24/08/2026
Bark mode.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 24/08/2026
Dark modem.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 16/08/2026
Who needs to write articles when you can write 7k+ words of feedback for a card game you are participating in playtesting.
020 2
Roma Komarov @kizu.front-end.social.ap.brid.gy · 14/08/2026
Some time ago, I started using vertical tabs in Firefox Nightly. It led to me not closing them as often as before. With the recent Firefox UI update, it seemed that something broke, and my UI started to feel very sluggish. Like, when writing something in […] [Original post on front-end.social]
A crop of a screenshot showing a dialog “Close 851 tabs?” with “Cancel” and “Close tabs” buttons.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 13/08/2026
And instead of `ident()` another possibility could be `children-count()` which I proposed in github.com/w3c/csswg-drafts/issues/…, as then it would be possible to define the random index on the parent of all those links. Right now we are relying on them sharing the custom key, so the […]
front-end.social
Original post on front-end.social
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 13/08/2026
With `ident()` and maybe something else could be generalized to be just a `--on-random-sibling(a, b)` function, to apply any value `a` on one element and `b` on all others. So you could have just some random one-off style for any sibling. Should also be possible to create the same for two or […]
front-end.social
Original post on front-end.social
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 13/08/2026
Had the idea of how to “fix” the CSS-only `random()` link by @chriscoyier. codepen.io/editor/kizu/pen/019ffc68… Chrome Canary only: requires both `random()`, `if()`, and `sibling-index()/-count()` (+ a `@function` for making it reusable): ```CSS @function […]
front-end.social
Original post on front-end.social
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/08/2026
Thinking about `@layer` and directed acyclic graphs. CSS needs proper dependency management, and current layers do not give it to us. But it could, with a few tweaks, I think.
040 4
Roma Komarov @kizu.front-end.social.ap.brid.gy · 09/08/2026
Me: wants to write a simple quick blog post. Also me: gathers 15+ links and references to include. I guess that’s some work done; maybe will finish it at some point later lol.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 08/08/2026
@rosewsgf The duplicate class name is highly likely for an increased specificity, probably to override something else that could target the same element. Usually, the same can be better achieved by adding `[class]` instead, as then you don’t have to actually read the class names to check if they […]
front-end.social
Original post on front-end.social
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 07/08/2026
ok maybe not, at least not fully how I wanted it, oh well. Still could be useful in certain cases.
001 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 07/08/2026
I think I came up with an inheritable version of cyclic toggles, but need to test a few things first.
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 06/08/2026
`appearance: based`
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 02/08/2026
In a lapse of memory, forgot that `hypot()` exists in CSS, and implemented it via all the registered custom properties, `tan(atan2())`, `sqrt()` etc. It was nice to then remember about it and delete some now useless code.
030 3
Roma Komarov @kizu.front-end.social.ap.brid.gy · 28/07/2026
Someone should invent a teleporter. Or — same compelxity — a way to fix Deutsche Bahn. (my direct train to/from Berlin for the next week is basically cancelled, cool cool, trying now to come up with a not too bad connection version, including a potential fallback that won't take 4 hours to wait […]
front-end.social
Original post on front-end.social
001 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 22/07/2026
Oooh, Chrome thinks about prototyping a solution for basic cases for shrinkwrap: github.com/w3c/csswg-drafts/issues/… github.com/explainers-by-googlers/c… That would be great, as the only current CSS-only solution […]
front-end.social
Original post on front-end.social
022 2
Reposted by Roma Komarov
IntentToShip @intenttoship.dev · 09/07/2026
Gecko: Intent to prototype: margin-trim
groups.google.com
Gecko: Intent to prototype: margin-trim
Gecko: Intent to prototype: margin-trim
1204 20
Roma Komarov @kizu.front-end.social.ap.brid.gy · 11/07/2026
@westbrook A solution: to use dashed idents _for every_ custom ident, and then you will never forget about it :) blog.kizu.dev/dashed-idents-for-eve…
blog.kizu.dev
Dashed Idents for Everything
# Dashed Idents for Everything Published on: November 18, 2023 Categories: CSS 89, Dashed Idents 2 Current drink: Yunnan tea What do you think when you see `--foo` in CSS? Is this a custom CSS property? Maybe, but not necessary. It is a “dashed ident”, which is a variation of a “custom ident” (an author-defined identifier). You can read why we have these in the specs by the links above, but the main difference is: in the dashed ident there are two dashes at the start. That’s it, that’s the whole difference. At least in how it looks. But there is a big difference in how it works. **Not all places that accept a dashed ident would accept a custom ident**. If something wants a “dashed” one explicitly, for example, `anchor-name` in anchor positioning, or a `view-timeline-name` in scroll-driven animations — they won’t accept a regular ident. When first encountering this difference, it might be challenging to adjust initially — and I did actually mention this in my article about anchor positioning: > One common mistake I initially had in my experiments — using the names without the double dashes in the beginning. The spec defines the names as `<dashed-ident>`, so they won’t be your usual idents, like with animation names or grid areas, but more like a CSS custom property’s name. My solution to this problem? See the title of this post. We can just use dashed idents for any author-defined identifiers. Yes, not all places would accept a custom ident, but **any place that accepts custom idents, would also accept a dashed one**. By doing this, we achieve the following: * We don’t have to remember if something accepts a custom ident or a dashed one. * We make it easier to understand that these idents are _author-defined_ — the main reason to have them was to be able to distinguish them for the parser in places where there might be both author-defined identifiers present and other CSS keywords. There will never be a conflict between a dashed ident and a CSS keyword, this is guaranteed. Yes, the syntax is a bit more verbose, and yes, you might get used to dashed idents only being used for CSS variables. But that is changing, and I suspect more and more specs would allow only dashed idents, just because this makes writing the properties’ syntax definitions much easier. What are the properties that we could start dashed idents for now? * The counter name in CSS counters: * `counter-reset: --foo 1;`, * `content: counter(--foo);`, and so on. * Keyframes’ names in CSS animations: * `@keyframes --foo {}`, * `animation: --foo 1s linear infinite;`, and so on. * View transitions names (I was a bit surprised that these were not required to be dashed): * `view-transition-name: --foo;`. * Named grid lines and areas in CSS grids. Ok, this one might be controversial, just because the definitions that are already rather verbose could become even more verbose. However! A usual mistake I do with CSS grids is using a string for the area name when doing something like `grid-column: 'foo'`, which, obviously, won’t work. I think this can often happen if you’d define the `grid-template-areas` as an ASCII string — it is logical to follow-up with it with a string usage as well. Using a dashed ident could remove this issue. * `grid-template-areas: "--start --content --end"`, or even * `grid-template-rows: [--header-top] auto [--header-bottom --main-top] 1fr [--main-bottom]` But yes, it can get verbose. But I think it is still worth it. Did I miss something? Maybe! I have been using this notation for a while, and so far, I’m happy with it. If you’re attentive, you could’ve noticed it in my previous post, where I used it for the keyframes’ name! One thing I wanted to try: create a stylelint rule that would enforse this. Maybe one day.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/07/2026
Even more: it could be possible for browsers to update this base stylesheet if they would version it. And allow authors to _freeze_ the version by choosing the corresponding version in the meta tag, plus this could be exposed in CSS so you could query the version if you want to base your styles […]
front-end.social
Original post on front-end.social
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/07/2026
Honestly, there should be, like, some meta tag that would assign some _good_ classless default stylesheet to a site as a UA stylesheet, so you could make a nice webpage _with just HTML_.
110 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 10/07/2026
What a “standard site” should be: an HTML page. That’s it. With some CSS sprinkled on it if you’re feeling like it.
100 1
Roma Komarov @kizu.front-end.social.ap.brid.gy · 08/07/2026
cute microtask
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 05/07/2026
Needed to get a random number, created an empty HTML page with just this CSS body::before { counter-set: --r random(1, 8, 1); content: counter(--r); } Opened in Safari/Chrome Canary, profit.
031 3
Roma Komarov @kizu.front-end.social.ap.brid.gy · 05/07/2026
This website is the best when viewed.
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 02/07/2026
dril candles tweet, but with tokens instead
000 0
Roma Komarov @kizu.front-end.social.ap.brid.gy · 02/07/2026
calc-mix() in Safari Technology Preview 247! :blob_cat_aww:
010 1
Reposted by Roma Komarov
Roma Komarov @kizu.pixey.org.ap.brid.gy · 30/06/2026
Today’s sunset 📷 OM-3 & 17 mm ƒ1.8 II
A photo of the evening sky above a city. Most of the frame is taken by the cloudy sky filled with a gradient that starts as orange on the bottom, then highlights the clouds with bright pink over a blue sky, and then goes into dark blue. Many layers of the clouds can be visible, some are highlighted by the sunset, and some are visible as shadows, making the sky resemble marble a bit. A few roofs of various buildings can be seen at the bottom of the frame, dark and almost without any details apart from the silhouettes of the antennas, chimneys, and other things that are usually on top of the roofs.
012 2