CSS Day 2023 takeaways
Imagine a conference completely dedicated to CSS. And a former church filled with over 300 CSS enthusiasts. It exists! It’s the amazing CSS Day conference and I was lucky enough to attend again this year. During the talks I’ve been taking notes to see what all the new trends and techniques mean for authoring and auditing CSS. Note: while it may seem skeptical at many points I do think we’re living in a golden era of CSS as Una proved in the opening talk this year.
Contents
- CSS Nesting
- CSS Cascade Layers
- CSS Container Queries
- Scroll driven animations and the shorthand trash fire
CSS Nesting
CSS Nesting was mentioned in almost every single talk! Even though it doesn’t really seem to add any new capabilities to the language itself, everyone seems to agree that the syntactic sugar adds a lot of benefits to the authoring experience. It’s not just nesting selectors, but also nesting atrules like @media
inside regular old CSSRules.
This will change what CSS ships to the browser, because preprocessors (PostCSS, Sass) currently ‘unwrap’ nested selectors and make it plainly visible how much nesting authors are applying to their selectors. CSS Nesting will make it harder to debug which ‘resolved’ selector is being applied, so we need browser vendors to level up their devtools to make inspection of nested selectors easier.
In the example above you can see that Chrome Devtools (Chrome 114) are trying to add helpful context about the selector, but there’s multiple levels of nesting, so we don’t get to see the full resolved selector here, which is inconvenient.
Time will tell how much profit CSS nesting will bring us. Writing the CSS will become faster, but debugging it will become harder as it requires more tooling or mental gymnastics to surface the resolved CSS.
CSS Cascade Layers
Many talks mentioned CSS Cascade Layers as a good way to manage specificity and the cascade. And it is! It’s such a useful addition to CSS that will help us avoid overly complex selectors and resorting to !important
.
Layers can be nested, it’s even a very nice method to group certain parts of the CSS, like a sort of namespace. But, like CSS Nesting, it brings with it some difficulties in inspecting the final CSS. A declaration can be nested several layers deep, so to debug why certain properties are applied we need some sort of view of the resolved layer tree. Luckily, both Firefox and Chrome devtools are already on the case, but with different levels of completeness.
Chrome showing the full layer tree is something I very much appreciate, because it will help you visualize the high-level architecture of your CSS.
CSS Container Queries
Container queries will change our code from mostly writing @media
to writing @container
to proportionally size our layouts and components. Miriam Suzanne articulated quite well that it is very likely that we’ll use @container
for sizing elements and use @media
to make decisions based on the OS level, like dark mode, and reduced motion.
It looks like Firefox is very much on top of the game here, although Chrome’s devtools are perfectly usable as well.
Scroll driven animations and the shorthand trash fire
A couple of demos and talks showed off the amazing things we can build with Scroll Driven Animations. I’m not going to explain them here, so if you need examples you can check the ones from Jhey or Bramus.
One thing that stood out is that the new animation-timeline
, animation-composition
and animation-range
properties cannot be combined with the animation
-shorthand property.
/* WARNING: will not work */
#square {
animation: 3s demoAnimation alternate scroll(block nearest);
}
/* This works */
#square {
animation-name: demoAnimation;
animation-duration: 3s;
animation-direction: alternate;
animation-timeline: scroll(block nearest);
}
/* Or, if you're a fan of shorthand, this works too */
#square {
animation: 3s demoAnimation alternate;
animation-timeline: scroll(block nearest);
}
Adding that extra property to the animation
shorthand would have made it a bit difficult, if not impossible, to parse correctly. Or as Tab Atkins said it:
the animation shorthand is already a trash fire of parsing
CSS Working Group meeting notes, 20-03-2023
CSS is moving at rocket-speed pace and I’m a big fan of all the attention it’s getting from all browser vendors. There’s more tools coming in our browsers on a daily basis and I’m so grateful to all browser and devtools teams for their hard work.
Popular posts
Making Analyze CSS render 6 times faster
A deep-dive in how the Analyze CSS page renders 6 times faster by applying 2 basic principles.
CSS complexity: it's complicated
There's lots of places in CSS to have complexity, but we tend to focus on selectors most of the time. Let's have a look at other places too.