Sign up

Original Content – Bram.us

Not verified No WebSub updates No webmention support Valid

A rather geeky/technical weblog, est. 2001, by Bramus

Generator
https://wordpress.org/?v=7.1
Public lists
btconf 2026 speakers
Fetched

Original Content – Bram.us Valid
Text • Bramus!

Introducing <​rich-input>, a GitHub-like search/filter text input to embed on your site

While working on a side-project to better navigate and search through my record collection, I found myself in need of a rich search input: one that accepts free-form text alongside structured filters like artist:“Aphex Twin” or label:“Warp Records” — You know, like the one you see on GitHub when searching/filtering issues.

When I quickly realized a standalone custom element for this didn’t exist yet, I nerd sniped myself into building curating one.

Original Content – Bram.us Valid
Text • Bramus!

WebKit supports interactive-widget … and hopefully Safari will too?

About a month ago, WebKit gained support for interactive-widget. While it’s not clear whether this will end up in Safari or not, this is pretty exciting news: If you have ever had a virtual keyboard obscure your fixed navigation bar, then interactive-widget is for you.

This post details a quick recap of what the feature does, how we got here, and a sneak peek at it running in WebKit.

Original Content – Bram.us Valid
Text • Bramus!

Introducing <​mermaid-element>, a custom element to display Mermaid diagrams

Today I learned that CodePen supports Mermaid diagramsChris Coyier has a a whole collection with examples here — and I also learned that there is no custom element to show Mermaid diagrams … so I built one.

Original Content – Bram.us Valid
Video • Bramus!

Animating CSS Grid Layouts with CSS Anchor Positioning

At CSS Day (back in June), someone asked me how Brave (the browser) might have built their New Tab Page which features some tiles laid out in a grid. While the grid is nothing spectacular, something special happens with it when you resize the viewport: as the available space changes, the grid nicely reorganizes itself in an animated way. The animations are also interruptible, so no View Transitions seem to be at play.

So, how did they do it? I’m not sure. But if I were to recreate it, I’d use CSS Anchor Positioning with regular CSS Transitions on top.

Original Content – Bram.us Valid
Video • Bramus!

Introducing <​hic-pageflip>: Interactive Pageflip/Flipbook Interface powered by HTML-in-Canvas

Way back in 2005, I first used PageFlip as a Flash component to display pages of images on a website. Ever since, recreating a modern version has been on my backlog to investigate. With the arrival of the experimental HTML-in-Canvas API, we can finally bring it back — this time displaying real HTML.

Original Content – Bram.us Valid
Text • Bramus!

Feature Detecting “Undetectable” CSS Features with @supports named-feature()

In CSS you can feature detect support for things like selectors, properties + values, and at-rules using @supports. But how do you feature detect a change to an underlying implementation, or two existing properties suddenly working together? Enter @supports named-feature(), a function designed to expose these specific capabilities without relying on hacky workarounds.

<

Original Content – Bram.us Valid
Text • Bramus!

The Future of CSS: Target Multiple Classes with the Class Prefix Selector

To target multiple classes that share the same prefix, you'd typically have to resort to brittle attribute selectors or add extra base classes to your markup. To make things easier, CSS is getting a new selector: The Class Prefix Selector (.prefix-*).

Original Content – Bram.us Valid
Text • Bramus!

The Case for Tri-State Dark Mode Toggles

Adding a Dark Mode toggle to your website is a nice touch that many users appreciate. When implementing one, the default instinct for many developers is to reach for a simple binary switch: Light on one side, Dark on the other.

While a two-state control might seem like the most straightforward solution, I firmly believe it’s flawed from a user experience perspective. Instead, we should all be using tri-state controls. Let me explain why.

Original Content – Bram.us Valid
Video • Bramus!

Unlock Immediate Diagonal Scrolling with CSS scroll-axis-lock: none

The new CSS scroll-axis-lock property allows you to disable the browser's default scroll-locking behavior (aka “railing”) to enable immediate diagonal scrolling.

Original Content – Bram.us Valid
Text • Bramus!

MDN Traffic Browser

TIL: MDN exposes up-to-date page view data through https://popularities.mdn.mozilla.net/current.csv. Using Google AI Studio, I generated a visualizer to explore the data.

Original Content – Bram.us Valid
Video • Bramus!

Styling the Navigation: Declarative Route and Navigation Matching in CSS

One of the things that we at Chrome have been thinking about for a while now is a way to do declarative route and navigation matching in CSS. Together with Noam Rosenthal and David Baron I’ve been working on it for the past few months.

After an initial introduction at the CSS Working Group back in January, and a quick feedback session at CSS Day in June, we think we have something that is ready for further discussion.

At next week’s CSS Working Group F2F (face-to-face) meeting in Berlin, we’ll be presenting our current line of thinking. This post is a quick intro to the concepts we’ll be covering.

Original Content – Bram.us Valid
Text • Bramus!

Cranking View Transtions up to 11 (2026.05.07 @ All Day Hey!)

In May I spoke at the 10th (and final 😔) edition All Day Hey! in Leeds, UK. I opened the conference with a talk on View Transitions.

Original Content – Bram.us Valid
Text • Bramus!

Cranking View Transtions up to 11 (2026.04.28 @ Beyond Tellerrand)

Back in April I went to Beyond Tellerrand in Düsseldorf. I initially planned on going as an attendee, but when organizer Marc asked me to speak I couldn’t say no …

Original Content – Bram.us Valid
Text • Bramus!

Do Websites Need to Function Exactly the Same on Every Platform?

While we’ve accepted that websites don't need to look the same everywhere, we seem to be stuck on a new hurdle: the idea that websites need to function the same everywhere.

Original Content – Bram.us Valid
Video • Bramus!

View Transitions: Use the new attr() or match-element for the view-transition-name?

At CSS Day, “YouTube guy” Kevin Powell showed a lot of demos that relied on the advanced attr() function. In one of the examples he used attr() to set view-transition-name values — a technique I covered in my article on advanced attr() function.

But then during the Q&A, Cyd Stumpel wondered if he couldn’t just use match-element there.

The short answer to that question is yes. The longer answer is … It Depends™

Original Content – Bram.us Valid
Text • Bramus!

Introducing view-transitions-toolkit, a collection of utility functions to more easily work with View Transitions.

Over the past years, I’ve published a bunch of View Transitions contents: articles, talks, demos, etc. I’ve also done a bunch of more experimental things with them, such as optimizing the keyframes or driving a View Transition by scroll.

What I noticed while doing all those experiments is that I repeated a lot of the code … and they were scattered a bit all over the place as well. So I bundled that all up in a package: view-transitions-toolkit.

Original Content – Bram.us Valid
Video • Bramus!

CSS position: sticky now sticks to the nearest scroller on a per axis basis!

If you’ve ever tried to build a data table with a sticky header and a sticky first column, you know the pain. You’d think a simple position: sticky with top: 0 and left: 0 would be enough, but the reality was that only one of both would stick.

A recent change to CSS fixes this: position: sticky now plays nice with single-axis scrollers, allowing you to have sticky elements that track different scroll containers on different axes. This change is available in Chrome 148.

Original Content – Bram.us Valid
Text • Bramus!

More Easy Light-Dark Mode Switching: light-dark() is about to support images!

CSS light-dark() is being extended to support images.

Original Content – Bram.us Valid
Text • Bramus!

Detect at-rule support in CSS with @supports at-rule(@keyword)

Back in January 2022, I wrote about an exciting new CSS Working Group decision: a function to detect at-rule support using @supports at-rule(@keyword). Fast forward to today, and the CSS Conditional Rules Module Level 5 specification has solidified how this feature works and Chromium (Chrome, Edge, etc.) is about to ship it in Chromium 148!

Original Content – Bram.us Valid
Text • Bramus!

Introducing view-transitions-mock: A non-visual Polyfill for Same-Document View Transitions

View Transitions are a powerful Modern Web feature allow for smooth seamless animated transitions two between different states of a web page. They can make for a much more pleasant user experience, but as with any new web platform feature, browser support is not yet fully universal so you need to add some fallback logic to your code.

view-transitions-mock bridges that gap by polyfilling the full JavaScript API surface of Same-Document View Transitions, without the animation bits.

Original Content – Bram.us Valid
Video • Bramus!

Experiment: Animating CSS position-area with View Transitions

CSS Anchor Positioning is a powerful tool, but one of the things that you cannot do natively (yet) is animating the position-area property. This blog post introduces a technique to animate position-area changes using View Transitions.

Original Content – Bram.us Valid
Text • Bramus!

Anchors Aweigh! (2026.02.28 @ State of the Browser)

Talk on CSS Anchor Positioning

Original Content – Bram.us Valid
Text • Bramus!

Anchors Aweigh! (2026.02.26 @ PHP Antwerp)

Talk on CSS Anchor Positioning.

Original Content – Bram.us Valid
Text • Bramus!

Chrome 145 146 adds Experimental Support for Vertical Tabs

Vertical Tabs are available behind a flag in Chrome 145 (current beta)

Original Content – Bram.us Valid
Text • Bramus!

Using 100vw is now scrollbar-aware (in Chrome 145+, under the right conditions)

From Chrome 145 onwards, 100vw will automatically subtract the size of the (vertical) scrollbar from it if you have forced the html element to always show a vertical scrollbar (using overflow[-y]: scroll) or if you reserve space for it (using scrollbar-gutter: stable). The same applies to vh with a horizontal scrollbar, as well as all small, large, and dynamic variants.

Original Content – Bram.us Valid
Video • Bramus!

How to Find the public WebKit Bug from the Apple-internal rdar:// Bug ID

If you read the Safari release notes – like the Safari 26.2 release notes – you see a lot of trailing “(12345678)”-mentions in the list of fixed bugs. These numbers are Apple-internal bug IDs, as used within Apple’s internal bug tracker (fka?) named “Radar”.

These numbers are not linked to anything because Radar is Apple-internal, so to external people these numbers are practically useless … or are they?

Original Content – Bram.us Valid
Video • Bramus!

CSS Scroll-Triggered Animations are coming to Chrome!

We have Scroll-Driven Animations. Now say hi to Scroll-Triggered Animations.

Original Content – Bram.us Valid
Text • Bramus!

CSS Wrapped 2025

Once again, it has been an AMAZING year for CSS and UI. To celebrate this, we – the Chrome CSS/UI DevRel Team – created another edition of CSS Wrapped!

Original Content – Bram.us Valid
Text • Bramus!

The Google Antigravity website, rebuilt with Modern CSS

As an experiment to see if Modern CSS is up to the task, I recreated the Google Antigravity website with Modern CSS.

Original Content – Bram.us Valid
Video • Bramus!

Anchor Positioning and the Inset-Modified Containing Block (IMCB)

If you kinda understand Anchor Positioning, but it still surprises you from time to time, then most likely this is the missing piece of information: the Inset-Modified Containing Block (or IMCB for short).