Chris’ Corner: Relatively Recent Great CSS Writing
Chen Hui Jing, So your designer wants stuff to overlap
Love that title. Elements in HTML don’t just overlap each other by default. In fact, they intentionally push other elements around so that they don’t. You’ll need CSS to force elements to overlap if you need them to. The traditional ways:
- negative margins
- transform translate
- absolute positioning
But Chen Hui Jing makes sure we don’t forget about grid! It might not come to mind immediately as we mostly think about making a grid and placing individual elements in individual grid cells. But grid cells don’t care! You can put as many elements as you want in a grid cell (or multiple grid cells). They are really just placement coordinates, not slots that only take one element.
Michelle Barker, Quick Tip: Negative Animation Delay
This is one of my favorite classic CSS tricks because it’s so obvious… but only after you’ve learned it. The point is mainly staggered animations. If you want animations to all be at different points along the same animation when they start animating, you can use animation-delay
. But if you use a positive time value, the animation won’t start for the first time until that delay (duh). So instead, you use a negative value. The animation starts immediately, but backed up to where it needs to be to have the beginning of the animation hit once the negative delay elapses.
Charlotte Dann, Fancy Frames with CSS
Awesome research from Charlotte, covering lots of ways to make interesting “framed” shapes like these:
So is there one obvious clear best path forward to do this in CSS (and friends)? No — haha. Charlotte explores using 1️⃣ multiple gradient backgrounds (very complicated to construct, limitations with transparency), 2️⃣ border-image
(one of the weirder CSS properties, but does help with placing gradients, or SVGs), 3️⃣ mask-border
which I’m not sure I’ve ever even looked at in my life (no Firefox support), and finally, 4️⃣ Houdini which has no Firefox or Safari support, but does bring interesting JavaScript-powered opportunities into the mix.
Just to throw another one in the mix here… I happened to be playing with Open Props the other day and it has a “Mask Corner Cuts” section. It just uses mask
(or -webkit-mask
, as apparently the vendor-prefixed version alone gets the best support).
Scott Vandehey, The Power of CSS Blend Modes
Scott is inspired by other-Scott’s Pen (which happens to be #91 on the Top Pens of 2022 list) and breaks down exactly how it works. It’s a combination of filtering and blending layers. that’s just cool as heck.
You gotta go check out the article to see how Scott was able to stretch the idea to other effects, like a halftone filter.
Kate Rose Morley, Tree views in CSS
This is entirely doable in just semantic HTML and CSS alone:
The trick is putting all the list items that have a sub-list with a <details>
element. The text of that <li>
becomes whatever the <summary>
is. Then you can style the ::marker
of the details elements to have the plus-and-minus look rather than the default triangle. I appreciated Kate’s usage of :focus-visible
too which keeps the focus styles away from mouse clicks.