The "Most Hated" CSS Feature: asin(), acos(), atan() and atan2()
If we have a ratio that represents the sine, cosine or tangent of an angle, how can we get the original angle? This is where inverse trigonometric functions come in!
If we have a ratio that represents the sine, cosine or tangent of an angle, how can we get the original angle? This is where inverse trigonometric functions come in!
Powered by
DigitalOcean
The extremely new framework that caught lots of attention will continue as a personal project.
Being able to use the range syntax with container style queries — which we can do starting with Chrome 142 — means that we can compare literal numeric values as well as numeric values tokenized by custom properties or the attr() function.
A few links about headings that I’ve had stored under my top hat.
Why should you use a semantic <button> instead of a generic <div>? Accessibility, right? By how exactly does it help accessibility?
Last time, we discussed that, sadly, according to the State of CSS 2025 survey, trigonometric functions are deemed the “Most Hated” […]
CSS Masonry shaping up now that the CSSWG has landed on display: grid-lanes to trigger the layout switch.
#
Bramus shares that Chrome Canary no longer forces CSS animations using width and height properties to run on the main thread.
#
Alignment might be one of the more confusing (or misunderstood) parts of CSS. I love having a thorough explanation from someone like Temani Afif who has it mastered.
#
A working draft for CSS Environment Variables is posted. Same concept as var(), but env() is a "global" variable at the document level for values the user agent is privy to.
#
Properties, selectors, rules, and functions!
::picker-icon { content: "✓"; }
.element { background-image: paint(polka-dots); }
.element { transform: translateY(calc(tan(15deg * var(--i)) * 5dvh)); }
.element { transform: translateY(calc(sin(20deg * var(--i)) * 100px)); }
.element { transform: translateY(calc(cos(20deg * var(--i)) * 100px)); }
.element { background-image: cross-fade(url(a), url(b)); }
.element { background-image: image-set(url("image.png") 1x, url("image-large.png") 2x);
}
.element { color: color-mix(in oklab, red 20%, bisque 80%); }
.element { grid-template-columns: 1fr 1fr fit-content(200px); }
.element { animation-timeline: scroll(); }
.element { animation-timeline: view(); }
.triangle { clip-path: shape(from 50% 0%, line by 50% 100%, hline to 0%, line to 50% 0%, close); }
Dive deep into CSS features and concepts
Timeless CSS gems