The Fermi Paradox is a contradiction between high estimates of the probability of the existence of extraterrestrial civilizations, such as in the Drake equation, and lack of any evidence for such civilizations.
– There are billions of stars in the galaxy that are similar to the Sun including many billions of years older than Earth. – With high probability, some of these stars will have Earth-like planets, and if the Earth is typical, some might develop intelligent life. – Some of these civilizations might develop interstellar travel, a step the Earth is investigating now. – Even at the slow pace of currently envisioned interstellar travel, the Milky Way galaxy could be completely traversed in about a million years.
According to this line of thinking, the Earth should have already been visited by extraterrestrial aliens. In an informal conversation, Fermi noted no convincing evidence of this, nor any signs of alien intelligence anywhere in the observable universe, leading him to ask, “Where is everybody?”
Many have argued that the absence of time travelers from the future demonstrates that such technology will never be developed, suggesting that it is impossible. This is analogous to the Fermi paradox related to the absence of evidence of extraterrestrial life. As the absence of extraterrestrial visitors does not categorically prove they do not exist, so the absence of time travelers fails to prove time travel is physically impossible; it might be that time travel is physically possible but is never developed or is cautiously used. Carl Sagan once suggested the possibility that time travelers could be here but are disguising their existence or are not recognized as time travelers.
It seems, to me at least, clear evidence that time travel is not possible, given the enormous amount of time behind us. Something, somewhere, would certainly have invented it by now… right?
The Great Filter theory says that at some point from pre-life to Type III intelligence, there’s a wall that all or nearly all attempts at life hit. There’s some stage in that long evolutionary process that is extremely unlikely or impossible for life to get beyond. That stage is The Great Filter.
We are not a rare form of life, but near the first to evolve
Almost no life makes it to this point
Those are three Great Filter possibilities, but the question remains: why are we so alone in the observable universe? I grant you that what we can observe is appallingly tiny given the unimaginable scale of the universe, so “what we can observe” may not be enough by many orders of magnitude.
I encourage you to read the entire article, it’s full of great ideas explained well, including many other Great Filter possibilites. But Mostly I want to share my personal theory of why we haven’t encountered alien life by now. Like computers themselves, things don’t get larger. They get smaller. And faster. And so does intelligent life.
Why build planet-size anything when the real action is in the small things? Small spaces, small units of time, everything gets smaller.
Large is inefficient and unnecessary. Look at the history of computers: from giant to tiny and tinier. From slow to fast and faster. Personally, I have a feeling really advanced life eventually does away with all physical stuff that slows you down as soon as they can, and enters the infinite spaces between:
This is, of course, a variant on the Fermi paradox: We don’t see clues to widespread, large-scale engineering, and consequently we must conclude that we’re alone. But the possibly flawed assumption here is when we say that highly visible construction projects are an inevitable outcome of intelligence. It could be that it’s the engineering of the small, rather than the large, that is inevitable. This follows from the laws of inertia (smaller machines are faster, and require less energy to function) as well as the speed of light (small computers have faster internal communication). It may be – and this is, of course, speculation – that advanced societies are building small technology and have little incentive or need to rearrange the stars in their neighborhoods, for instance. They may prefer to build nanobots instead.
It’s that time of year again—Spotify Wrapped season is just around the corner, and this year, the streaming giant has found a new way to keep us guessing.
Instead of the usual hints, Spotify is teasing 2024 Wrapped with mysterious, cryptic logos, and the internet is buzzing with theories.
What’s Spotify Wrapped Again?
If you’ve somehow missed the Wrapped craze, here’s a quick recap: every December, Spotify drops a personalized, colorful snapshot of your music habits from the year. It tells you everything from your most-played songs and artists to the oddest hours you were up listening to your guilty pleasure tracks.
It’s a total vibe—and a major flex when you post your stats on Instagram or TikTok.
Wrapped isn’t just fun; it’s a whole cultural moment. Everyone’s sharing their playlists, tagging friends, and debating their “Top Artist” results. And now, Spotify’s teasing its 2024 edition in the most cryptic way possible.
What’s Up with These Logos?
Instead of a straightforward teaser, Spotify has dropped these wild logo designs that feel like a puzzle waiting to be cracked. They’re bold, colorful, and kind of trippy—think warped shapes, motion-inspired graphics, and colors that pop like your favorite album cover.
So, what’s the deal? Are these logos hinting at new Wrapped features? Maybe we’ll get more dynamic visuals or an entirely new way to interact with our year-end stats. Whatever it is, people are losing it trying to figure it out.
Fans Are ALL In
Naturally, the internet is doing what it does best—overanalyzing everything. Some think Spotify is gearing up to introduce community stats, like regional trends or playlists that show what your city’s been vibing to.
Others are hoping for AI-generated insights (think: “What song defines your 2024 energy?”). And there’s speculation about AR or 3D Wrapped experiences because those logos definitely look futuristic.
On TikTok, users are stitching videos with their predictions, while on Twitter, the theories are flying. And Reddit? Let’s just say the rabbit hole of Wrapped conspiracies runs deep.
Why This Works
Honestly, Spotify knows exactly what it’s doing. These cryptic teasers are brilliant marketing. They’ve turned a yearly recap into an event—and now, the mystery has everyone hyped. Instead of just waiting around for Wrapped, people are talking about it, guessing about it, and hyping it up even more.
This playful, design-forward approach is peak Spotify: it’s creative, engaging, and just cryptic enough to keep us on edge.
So, What Can We Expect?
Let’s be real—we won’t know for sure until Spotify officially drops Wrapped, but the teaser logos definitely suggest some exciting updates. Whether it’s next-level visuals, interactive features, or entirely new ways to relive your year in music, one thing’s for sure: Wrapped 2024 is going to hit differently.
In the meantime, why not revisit your favorite songs and playlists from this year? Who knows—your 3 a.m. summer anthem might just become your top track.
Keep your eyes on Spotify’s socials, and get ready to wrap up 2024 in style!
Welcome to “Anchor Positioning 101” where we will be exploring this interesting new CSS feature. Our textbook for this class will be the extensive “Anchor Positioning Guide” that Juan Diego Rodriguez published here on CSS-Tricks.
I’m excited for this one. Some of you may remember when CSS-Tricks released the “Flexbox Layout Guide” or the “Grid Layout Guide” — I certainly do and still have them both bookmarked! I spend a lot of time flipping between tabs to make sure I have the right syntax in my “experimental” CodePens.
I’ve been experimenting with CSS anchor positioning like the “good old days” since Juan published his guide, so I figured it’d be fun to share some of the excitement, learn a bit, experiment, and of course: build stuff!
CSS Anchor Positioning introduction
Anchor positioning lets us attach — or “anchor” — one element to one or more other elements. More than that, it allows us to define how a “target” element (that’s what we call the element we’re attaching to an anchor element) is positioned next to the anchor-positioned element, including fallback positioning in the form of a new @position-try at-rule.
The most hand-wavy way to explain the benefits of anchor positioning is to think of it as a powerful enhancement to position: absolute; as it helps absolutely-positioned elements do what you expect. Don’t worry, we’ll see how this works as we go.
Anchor positioning is currently a W3C draft spec, so you know it’s fresh. It’s marked as “limited availability” in Baseline which at the time of writing means it is limited to Chromium-based browsers (versions 125+). That said, the considerate folks over at Oddbird have a polyfill available that’ll help out other browsers until they ship support.
This browser support data is from Caniuse, which has more detail. A number indicates that browser supports the feature at that version and up.
Desktop
Chrome
Firefox
IE
Edge
Safari
125
No
No
125
No
Mobile / Tablet
Android Chrome
Android Firefox
Android
iOS Safari
131
No
131
No
Oddbird contributes polyfills for many new CSS features and you (yes, you!) can support their work on Github or Open Collective!
Tab Atkins-Bittner, contributing author to the W3C draft spec on anchor positioning, spoke on the topic at CSS Day 2024. The full conference talk is available on YouTube:
And finally, in the tradition of “making fun games to learn CSS,” Thomas Park released Anchoreum (a “Flexbox Froggy“-type game) to learn about CSS anchor positioning. Highly recommend checking this out to get the hang of the position-area property!
The homework
OK, now that we’re caught up on what CSS anchor positioning is and the excitement surrounding it, let’s talk about what it does. Tethering an element to another element? That has a lot of potential. Quite a few instances I can remember where I’ve had to fight with absolute positioning and z-index in order to get something positioned just right.
Let’s take a quick look at the basic syntax. First, we need two elements, an anchor-positioned element and the target element that will be tethered to it.
<!-- Anchor element -->
<div id="anchor">
Anchor
</div>
<!-- Target element -->
<div id="target">
Target
</div>
We set an element as an anchor-positioned element by providing it with an anchor-name. This is a unique name of our choosing, however it needs the double-dash prefix, like CSS custom properties.
#anchor {
anchor-name: --anchor;
}
As for our target element, we’ll need to set position: absolute; on it as well as tell the element what anchor to tether to. We do that with a new CSS property, position-anchor using a value that matches the anchor-name of our anchor-positioned element.
May not look like it yet, but now our two elements are attached. We can set the actual positioning on the target element by providing a position-area. To position our target element, position-area creates an invisible 3×3 grid over the anchor-positioned element. Using positioning keywords, we can designate where the target element appears near the anchor-positioned element.
#target {
position: absolute;
position-anchor: --anchor;
position-area: top center;
}
Now we see that our target element is anchored to the top-center of our anchor-positioned element!
CodePen Embed Fallback
Anchoring pseudo-elements
While playing with anchor positioning, I noticed you can anchor pseudo-elements, just the same as any other element.
CSS anchor functions are an alternate way to position target elements based on the computed values of the anchor-positioned element itself. Here we are setting the target element’s top property value to match the anchor-positioned element’s bottom value. Similarly, we can set the target’s left property value to match the anchor-positioned element’s left value.
Hovering over the container element swaps the position-anchor from --anchor-one to --anchor-two.
We are also able to set a transition as we position the target using top and left, which makes it swap smoothly between anchors.
Extra experimental
Along with being the first to release CSS anchor-positioning, the Chrome dev team recently released new pseudo-selectors related to the
and elements. The ::details-content pseudo-selector allows you to style the “hidden” part of the element.
With this information, I thought: “can I anchor it?” and sure enough, you can!
CodePen Embed Fallback
Again, this is definitely not ready for prime-time, but it’s always fun to experiment!
Practical examinations
Let’s take this a bit further and tackle more practical challenges using CSS anchor positioning. Please keep in mind that all these examples are Chrome-only at the time of writing!
Tooltips
One of the most straightforward use cases for CSS anchor positioning is possibly a tooltip. Makes a lot of sense: hover over an icon and a label floats nearby to explain what the icon does. I didn’t quite want to make yet another tutorial on how to make a tooltip and luckily for me, Zell Liew recently wrote an article on tooltip best practices, so we can focus purely on anchor positioning and refer to Zell’s work for the semantics.
The HTML is structured in a way where the tooltip element is a sibling of our anchor-positioned , notice how it has the [aria-labelledby] attribute set to match the tooltip’s [id]. The tooltip itself is a generic
, semantically enhanced to become a tooltip with the [role="tooltip"] attribute. We can also use [role="tooltip"] as a semantic selector to add common styles to tooltips, including the tooltip’s positioning relative to its anchor.
First, let’s turn our button into an anchored element by giving it an anchor-name. Next, we can set the target element’s position-anchor to match the anchor-name of the anchored element. By default, we can set the tooltip’s visibility to hidden, then using CSS sibling selectors, if the target element receives hover or focus-visible, we can then swap the visibility to visible.
/* Anchor-positioned Element */
#inbox-tool {
anchor-name: --inbox-tool;
}
/* Target element */
[role="tooltip"]#inbox-label {
position-anchor: --inbox-tool
}
/* Target positioning */
[role="tooltip"] {
position: absolute;
position-area: end center;
/* Hidden by default */
visibility: hidden;
}
/* Visible when tool is hovered or receives focus */
.tool:hover + [role="tooltip"],
.tool:focus-visible + [role="tooltip"] {
visibility: visible;
}
Ta-da! Here we have a working, CSS anchor-positioned tooltip!
As users of touch devices aren’t able to hover over elements, you may want to explore toggletips instead!
Floating disclosures
Disclosures are another common component pattern that might be a perfect use case for anchor positioning. Disclosures are typically a component where interacting with a toggle will open and close a corresponding element. Think of the good ol’ /
HTML element duo, for example.
Currently, if you are looking to create a disclosure-like component which floats over other portions of your user interface, you might be in for some JavaScript, absolute positioning, and z-index related troubles. Soon enough though, we’ll be able to combine CSS anchor positioning with another newer platform feature [popover] to create some incredibly straightforward (and semantically accurate) floating disclosure elements.
The Popover API provides a non-modal way to elevate elements to the top-layer, while also baking in some great functionality, such as light dismissals.
, to be our popover element by adding the [popover] attribute.
To control the popover, let’s add the attribute [popoveraction="toggle"] to enable the button as a toggle, and point the [popovertarget] attribute to the [id] of our target element.
No JavaScript is necessary, and now we have a toggle-able [popover] disclosure element! The problem is that it’s still not tethered to the anchor-positioned element, let’s fix that in our CSS.
First, as this is a popover, let’s add a small bit of styling to remove the intrinsic margin popovers receive by default from browsers.
ul[popover] {
margin: 0;
}
Let’s turn our button into an anchor-positioned element by providing it with an anchor-name:
As for our target element, we can attach it to the anchor-positioned element by setting its position to absolute and the position-anchor to our anchor-positioned element’s anchor-name:
We can also adjust the target’s positioning near the anchor-positioned element with the position-area property, similar to what we did with our tooltip.
You may notice another CSS anchor function in here, anchor-size()! We can set the target’s width to match the width of the anchor-positioned element by using anchor-size(width).
CodePen Embed Fallback
There is one more neat thing we can apply here, fallback positioning! Let’s consider that maybe this dropdown menu might sometimes be located at the bottom of the viewport, either from scrolling or some other reason. We don’t really want it to overflow or cause any extra scrolling, but instead, swap to an alternate location that is visible to the user.
Anchor positioning makes this possible with the postion-try-fallbacks property, a way to provide an alternate location for the target element to display near an anchor-positioned element.
To keep things simple for our demo, we can add the opposite value of the value of the postion-area property: top.
CodePen Embed Fallback
Shopping cart component
We know how to make a tooltip and a disclosure element, now let’s build upon what we’ve learned so far and create a neat, interactive shopping cart component.
Let’s think about how we want to mark this up. First, we’ll need a button with a shopping cart icon:
We can already reuse what we learned with our tooltip styles to provide a functioning label for this toggle. Let’s add the class .tool to the button, then include a tooltip as our label.
We’ll need to specify our is an anchor-positioned element in CSS with an anchor-name, which we can also set as the tooltip’s position-anchor value to match.
Now we should have a nice-looking tooltip labeling our shopping cart button!
But wait, we want this thing to do more than that! Let’s turn it into a disclosure component that reveals a list of items inside the user’s cart. As we are looking to have a floating user-interface with a few actions included, we should consider a element. However, we don’t necessarily want to be blocking background content, so we can opt for a non-modal dialog using the[popover] attribute again!
To control the popover, we’ve added [popovertarget="shopping-cart"] and [popoveraction="toggle"] to our anchor-positioned element and included a second button within the that can also be used to close the dialog with [popoveraction="close"].
To anchor the shopping cart to the toggle, we can set position-anchor and position-area:
#shopping-cart {
position-anchor: --shopping-cart;
position-area: end center;
}
At this point, we should take a moment to realize that we have tethered two elements to the same anchor!
We won’t stop there, though. There is one more enhancement we can make to really show how helpful anchor positioning can be: Let’s add a notification badge to the element to describe how many items are inside the cart.
Let’s place the badge inside of our anchor-positioned element this time.
Now the accessible name of our anchor-positioned element will be read as Shopping Cart (1 item in cart), which helps provide context to assistive technologies like screen readers.
Let’s tether this notification badge to the same anchor as our tooltip and shopping cart , we can do this by setting the position-anchor property of the badge to --shopping-cart-toggle:
Let’s look at positioning. We don’t want it below or next to the anchor, we want it overlapping, so we can use CSS anchor functions to position it based on the anchor-positioned element’s dimensions.
Here we are setting the bottom and left of the target element to match the anchor’s center. This places it in the upper-right corner of the SVG icon!
Folks, this means we have three elements anchored now. Isn’t that fantastic?
CodePen Embed Fallback
Combining things
To put these anchor-positioned elements into perspective, I’ve combined all the techniques we’ve learned so far into a more familiar setting:
CodePen Embed Fallback
Disclosure components, dropdown menus, tooltips (and toggletips!), as well as notification badges all made much simpler using CSS anchor positioning!
Final project
As a final project for myself (and to bring this whole thing around full-circle), I decided to try to build a CSS anchor-positioned-based onboarding tool. I’ve previously attempted to build a tool like this at work, which I called “HandHoldJS” and it… well, it didn’t go so great. I managed to have a lot of the core functionality working using JavaScript, but it meant keeping track of quite a lot of positions and lots of weird things kept happening!
Let’s see if we can do better with CSS anchor positioning.
CodePen Embed Fallback
Feel free to check out the code on CodePen! I went down quite a rabbit hole on this one, so I’ll provide a bit of a high-level overview here.
is a native custom element that works entirely in the light DOM. It sort of falls into the category of an HTML web component, as it is mostly based on enabling its inner HTML. You can specify tour stops to any element on the page by adding [data-tour-stop] attributes with values in the order you want the tour to occur.
Inside the element contains a to start the tour, a element to contain the tour information,
elements to separate content between tour stops, a fieldset[data-handhold-navigation] element which holds navigation radio buttons, as well as another to end the tour.
Each
element corresponds to a tour stop with a matching [data-handhold-content] attribute applied. Using JavaScript, dynamically updates tour stops to be anchor-positioned elements, which the can attach itself (there is a sneaky pseudo-element attached to the anchor to highlight the tour stop element!).
Although the element is attached via CSS anchor positioning, it also moves within the DOM to appear next to the anchor-position element in the accessibility tree. The (well-meaning) intention here is to help provide more context to those who may be navigating via assistive devices by figuring out which element the dialog is referring to. Believe me, though, this thing is far from perfect as an accessible user experience.
Also, since the moves throughout the DOM, unfortunately, a simple CSS transition would not suffice. Another modern browser feature to the rescue yet again, as we can pass a DOM manipulation function into a View Transition, making the transitions feel smoother!
There is still quite a lot to test with this, so I would not recommend using in a production setting. If for no other reason than browser support is quite limited at the moment!
This is just an experiment to see what I could cook up using CSS anchor positioning, I’m excited for the potential!
Class dismissed!
After seeing what CSS anchor positioning is capable of, I have suspicions that it may change a lot of the ways we write CSS, similar to the introduction of flexbox or grid.
I’m excited to see what other user interface patterns can be accomplished with anchor positioning, and I’m even more excited to see what the community will do with it once it’s more broadly available!
Welcome to our monthly roundup of the best new fonts we’ve found online in the previous four weeks.
November’s edition is particularly strong for script-inspired sans, display faces with motion and energy, and a charming blackletter font. Enjoy!
Formiga
Formiga is a versatile, humanist display typeface designed for attention-grabbing editorials. It has a clear, confident, and fun style, making it perfect for B2C branding projects. There are seven weights (from light to black) with a ton of OpenType features.
Geoscript
GeoScript is a lovely chunky brush script with three weights: Light, Medium, and Bold. It effortlessly combines handwritten and geometric elements making it perfect for a corporate logo with a bit more personality.
Anathera
Anathera is a bold, minimalist typeface with a distinctive pixelation of its diagonal strokes. At large sizes the pixelated details feel disruptive, and at small sizes they create a sense of motion in the text. It’s a great choice for any project that needs to stand out.
Morph
Morph is a versatile display type system built from several different stencil and doubleline styles. It’s a clean modern family with enough variety to create visually interesting word shapes. It’s a great choice for logos, editorial, signage, and poster designs.
Brisca Miera
Brisca Miera is a graceful serif, with swashes and alternate characters to add variety and a sense of hand-crafted typography. It’s an excellent option any time you need a font for a sophisticated design.
Dorat
Dorat is an extremely modern blackletter font. The style is vastly under-used — thanks to some unhappy associations — and this font provides the opportunity to lean into a visually strong style while remaining distinctly contemporary.
Mars
Mars is a carefully drawn humanist sans, offering a more interesting corporate face than fonts like Helvetica. It features four different weights: Condensed, Standard, SemiCondensed, and Extended; providing tremendous versatility. It’s a good choice for a company looking for an original voice in its communications.
Milling
Milling was designed after research into the shapes that lend themselves to CNC machining. There are three styles: Simplex, Duplex, and Triplex. It’s a practical font for anyone machining lettering, but it’s also an excellent font for conveying industrial production.
Wild Lines
Wild Lines is a straight, urban graffiti font that captures the raw energy and edginess of street culture. Its clean, linear style adds structure while preserving graffiti’s rebellious feel. Ideal for projects needing an urban, bold aesthetic, it brings a fresh, city-inspired vibe to designs.
LiebeHeide Fineliner
LiebeHeide Fineliner is a friendly script font with clean lines and smooth curves. Featuring plenty of ligatures and alternatives, it ensures natural, organic text flow and unique designs. It adds a personal touch to any project.
Arkbro
Arkbro is a variable typeface inspired by Ellen Arkbro’s track Mountain of Air, reflecting geometric principles and spatial harmony. Featuring extreme weight contrasts, it’s ideal for playful, animated displays. It’s an excellent choice for designs relating to music.
Hentak
Hentak is a script font with a flowing, handwritten style and a vintage feel. Featuring dramatic curves and ornamental details, it combines modern and classic calligraphic qualities.
Formale Grotesque
Formale Grotesque is a sans-serif typeface inspired by a 1930s alphabet board, blending geometric and dynamic forms with low stroke contrast. Its alternates shift from grotesque to humanist styles, adding versatility and depth.
Gonzaga
Gonzaga is a vibrant modern slab serif with contemporary lines and playful rhythms. It has an energy that makes it perfect for logos, posters, and hero text on the web.
VFU
VFU (Visionary Font Ultra) is a humble sans with flared strokes that lean in the direction of serifs. It comes with nine weights with matching italics, and a display version.