Baseline 2025 Features Web Gained in 2025 ![rw-book-cover](https://img.youtube.com/vi/jg8gJz82kZg/maxresdefault.jpg) ๐Ÿ”— **Source:** [Baseline 2025 Features Web Gained in 2025](https://www.youtube.com/watch?v=jg8gJz82kZg) > [!note]+ Document Notes > tags: [baseline, web-development, css, javascript] > author: Syntax > source: YouTube > reference: https://www.youtube.com/watch?v=jg8gJz82kZg > date created: 2024-12-20 10:30 > > # ๐Ÿท๏ธ Title: Baseline 2025 Features - Web APIs and CSS Now Available in All Browsers > <!-- deep-read:sections start --> ## ๐Ÿงฐ Action Inbox - [H1] Implement view transitions for CRUD animations โ€” same document API now stable #animation - [H2] Replace window.atob/btoa with uint8array methods โ€” better performance #optimization - [H3] Test popover API for tooltips and dropdowns โ€” baseline stable #ui ## ๐Ÿงญ Table of Contents - [๐Ÿ“ Summary](#-summary) - [๐Ÿ“– Main Content](#-main-content) - [๐Ÿ—’๏ธ Notes](#๏ธ-notes) - [๐Ÿ“š References](#-references) - [๐Ÿ—ฃ๏ธ Paraphrase](#๏ธ-paraphrase) - [๐Ÿ“ฐ Newsletter](#-newsletter) - [โœ… Action Items](#-action-items) - [๐Ÿงช Hypotheses](#-hypotheses) - [๐Ÿ“Š Methodology](#-methodology) - [โ“ Questions](#-questions) - [๐Ÿ”ฎ Future Research](#-future-research) - [๐Ÿ’ก Implications](#-implications) - [๐Ÿง  Learning Styles Assessment](#-learning-styles-assessment) - [๐Ÿ“Š Accessibility Assessment](#-accessibility-assessment) - [๐ŸŒ DEIB Assessment](#-deib-assessment) - [โœ… Logical Validity](#-logical-validity) - [๐Ÿ›ก๏ธ DARVO Analysis](#-darvo-analysis) - [๐ŸŽฏ Conclusion](#-conclusion) ### ๐Ÿ”— References - [Baseline 2025 Features](https://web.dev/baseline) - [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API) ## ๐Ÿ“ Summary - Baseline 2025 adds 24 new web APIs and CSS features available across all browsers - Key additions include same-document view transitions, popover API, and CSS absolute value function - Features enable advanced animations and UI patterns without requiring JavaScript frameworks - Performance improvements through better binary data handling and rendering optimization - Developers can now safely use these features without worrying about browser compatibility ## ๐Ÿ“– Main Content Baseline is a web industry initiative that tracks when features become available across all modern browsers. Unlike Can I Use, which shows complex compatibility matrices, Baseline simply indicates whether a feature is "newly available" or ready to use. The 2025 release includes 24 new APIs spanning CSS animation improvements, better data handling, and enhanced UI capabilities. Same-document view transitions allow smooth element animations within single-page applications. The popover API provides declarative tooltips and overlays. CSS gains mathematical functions and better display property transitions. These features reduce reliance on JavaScript frameworks and bundlers while improving performance through native browser optimizations. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/jg8gJz82kZg?t=0) โ€” [H1] Baseline 2025 Introduction - Key idea: Baseline tracks features available across all browsers, unlike Can I Use complexity - Evidence: "Baseline will just tell you like newly available or like go for it son you know you can use this thing" #### โฑ๏ธ [02:30](https://youtu.be/jg8gJz82kZg?t=150) โ€” [H1] Same Document View Transitions - Key idea: Enables smooth element animations between DOM states without page changes - Evidence: "You can now transition any element to any element, not just when you're changing pages" #### โฑ๏ธ [04:45](https://youtu.be/jg8gJz82kZg?t=285) โ€” [H2] View Transitions Implementation - Key idea: Uses document.startViewTransition API with view-transition-name CSS property - Evidence: "Takes a snapshot of where it is and then in the callback you apply some changes" #### โฑ๏ธ [07:15](https://youtu.be/jg8gJz82kZg?t=435) โ€” [H2] CSS Absolute Value Function - Key idea: CSS gains abs() function for mathematical calculations - Evidence: "CSS has got abs, folks. It makes the value always positive" #### โฑ๏ธ [09:30](https://youtu.be/jg8gJz82kZg?t=570) โ€” [H2] JSON Modules Support - Key idea: Import JSON files directly as ES modules with type assertion - Evidence: "Simply just import your JSON and then you add a with type of JSON onto the end" #### โฑ๏ธ [11:00](https://youtu.be/jg8gJz82kZg?t=660) โ€” [H1] Popover API - Key idea: Declarative popovers with top layer positioning and automatic focus management - Evidence: "Puts it on the top layer which takes things and sets it on a new layer stacking layer" #### โฑ๏ธ [13:45](https://youtu.be/jg8gJz82kZg?t=825) โ€” [H2] Base64 to Uint8Array - Key idea: Better binary data handling replacing deprecated atob/btoa methods - Evidence: "Storing the data as an array is significantly smaller in the DOM" #### โฑ๏ธ [16:30](https://youtu.be/jg8gJz82kZg?t=990) โ€” [H1] Starting Style and Allow Discrete - Key idea: Animate elements entering/leaving DOM with display property transitions - Evidence: "Animate from display none to display block using allow discrete" #### โฑ๏ธ [19:15](https://youtu.be/jg8gJz82kZg?t=1155) โ€” [H2] Promise.try Method - Key idea: Wrap synchronous functions in promise-compatible interface - Evidence: "Allows you to take synchronous methods and use them in a way in which they were a promise" #### โฑ๏ธ [21:00](https://youtu.be/jg8gJz82kZg?t=1260) โ€” [H1] Content Visibility - Key idea: Control element rendering to improve performance with preserved state - Evidence: "Facebook engineers observed up to 250 millisecond improvement in navigation times" #### โฑ๏ธ [23:30](https://youtu.be/jg8gJz82kZg?t=1410) โ€” [H2] Content Visibility Auto - Key idea: Automatically defer rendering of offscreen elements - Evidence: "Things hidden when they are off screen and renders things offscreen later" #### โฑ๏ธ [25:45](https://youtu.be/jg8gJz82kZg?t=1545) โ€” [H3] Implementation Warnings - Key idea: Content visibility requires careful testing to avoid layout shift - Evidence: "You want to be more surgical with it. You want to test with it" ## ๐Ÿ“š References - [Baseline 2025 Official List](https://web.dev/baseline) - [View Transitions Specification](https://drafts.csswg.org/css-view-transitions/) - [Popover API Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API) - [Blobfolio Base64 Performance Analysis](https://blobfolio.com/) ## ๐Ÿ—ฃ๏ธ Paraphrase - Baseline 2025 brings 24 web platform features that work consistently across all modern browsers, eliminating the need to check complex compatibility charts - Same-document view transitions enable smooth animations between DOM states, making it easier to create polished user interfaces without heavy JavaScript libraries - New CSS functions like abs() and improved display property transitions give developers more control over styling and animations natively ## ๐Ÿ“ฐ Newsletter **Baseline 2025 Unlocks Native Web Animations and Performance** WordPress developers can now safely use 24 new web platform features across all browsers! The standout addition is same-document view transitions, perfect for animating block editor changes or theme customizer previews. The popover API simplifies tooltip and dropdown creation without JavaScript libraries. For performance gains, try the new content-visibility property on heavy widgets or the updated base64 handling for media processing. These native features reduce plugin dependencies and improve Core Web Vitals. **Key benefits for WordPress:** - Smoother admin interface animations - Lighter themes with native CSS features - Better performance on content-heavy sites Resources: [Learn WordPress](https://learn.wordpress.org/), [Developer Docs](https://developer.wordpress.org/), [WP-CLI](https://wp-cli.org/) ## โœ… Action Items #### WordPress - Core: Evaluate view transitions for block editor state changes, explore popover API for tooltips - Themes: Update animation patterns using native CSS instead of jQuery animations - Performance: Audit heavy widgets for content-visibility opportunities - Documentation: Create guides for baseline 2025 features in theme development ## ๐Ÿงช Hypotheses - View transitions will reduce JavaScript animation library usage by 40% in new projects - Content visibility auto will improve initial page load times for content-heavy sites by 15% - Popover API adoption will decrease modal/tooltip plugin installations - Native CSS math functions will enable more responsive design patterns ### ๐Ÿ“Š Methodology - Survey frontend developers on animation library usage before/after baseline 2025 - A/B test content visibility on high-traffic WordPress sites measuring Core Web Vitals - Track plugin repository downloads for tooltip/modal solutions over 6 months ### โ“ Questions - How will WordPress core integrate these features into the block editor? - What performance impact will widespread view transition adoption have on older devices? - Which baseline 2025 features provide the biggest accessibility improvements? ### ๐Ÿ”ฎ Future Research - Measure real-world performance gains from native CSS animations vs JavaScript - Study user experience improvements from smoother web transitions - Explore combining baseline 2025 features for advanced interaction patterns ### ๐Ÿ’ก Implications - Practice: Developers can reduce JavaScript dependencies and simplify animation code - Performance: Native browser optimizations provide better performance than polyfills - Security: Fewer third-party libraries reduce attack surface and dependency vulnerabilities - Education: Frontend curricula need updates to include these native capabilities ### ๐Ÿง  Learning Styles Assessment Reading level estimate: Grade 9-10 #### ๐Ÿ‘€ Visual learners - Present: Video demonstrations of view transitions, grid animations - Improve: Side-by-side comparisons of old vs new implementation methods #### ๐Ÿ”Š Aural learners - Present: Podcast format with detailed explanations - Improve: Audio descriptions of visual animations and code changes #### ๐Ÿ—ฃ๏ธ Verbal learners - Present: Clear API explanations with analogies - Improve: Glossary of technical terms and their relationships #### ๐Ÿงฉ Kinesthetic learners - Present: Live coding demonstrations, interactive examples - Improve: Step-by-step tutorials with downloadable starter code #### ๐Ÿง  Logical learners - Present: Performance comparisons, browser support timelines - Improve: Decision trees for when to use each new feature #### ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Social learners - Present: Discussion format between hosts - Improve: Community challenges to implement baseline 2025 features #### ๐Ÿง˜โ€โ™€๏ธ Solitary learners - Present: Comprehensive documentation links - Improve: Self-assessment checklist for feature implementation #### ๐ŸŒฟ Naturalistic learners - Present: Evolution of web standards over time - Improve: Ecosystem impact analysis of new features ### ๐Ÿ“Š Accessibility Assessment #### Screen reader semantics - Present: Audio descriptions of visual demonstrations - Improve: Transcript with code snippets marked as such #### Keyboard navigation - Present: Popover API includes focus management - Improve: Examples should demonstrate keyboard accessibility #### Contrast and readability - Present: Video maintains good contrast - Improve: Code examples need higher contrast backgrounds #### Media and captions - Present: Full transcript provided - Improve: Visual code examples need audio descriptions ### ๐ŸŒ DEIB Assessment #### Cultural breadth - Present: Technical content accessible globally - Improve: Examples could use diverse naming conventions #### Inclusive language - Present: Neutral technical language throughout - Improve: Avoid colloquialisms like "go for it son" #### Neurodiversity support - Present: Clear section breaks with timestamps - Improve: Chapter markers for easier navigation #### Representation - Present: Technical focus without bias - Improve: Diverse example applications and use cases ### โœ… Logical Validity #### Strong reasoning - Deductive strength: Features in baseline โ†’ safe to use โ†’ reduced compatibility concerns - Inductive strength: Performance examples from Facebook support broader benefits - Causal reasoning: Native implementations โ†’ better performance than polyfills #### Fallacies - Appeal to novelty: Assumes new features are automatically better without considering edge cases - Hasty generalization: Content visibility benefits may not apply to all use cases #### Tone of voice - Overall tone: Enthusiastic and educational with practical focus ### ๐Ÿ›ก๏ธ DARVO Analysis - No defensive patterns detected - Content focuses on technical capabilities rather than justifying decisions - Balanced presentation of benefits and limitations ## ๐ŸŽฏ Conclusion Baseline 2025 represents a significant step forward in web platform maturity, providing developers with powerful native capabilities that previously required JavaScript libraries. The combination of view transitions, popover API, and CSS enhancements enables more performant and accessible user interfaces. Developers should evaluate these features for new projects while considering progressive enhancement for existing applications. ## ๐Ÿงฑ Refactor Appendix ### ๐Ÿ“š Literature Split Pad Purpose: Stage CEE units that become Literature notes. Split level: H3 ### [H1] View transitions enable native DOM animation > [!quote] [Baseline 2025 Features](https://www.youtube.com/watch?v=jg8gJz82kZg) by [[Syntax]] via [[YouTube]]. Published 2024-12-20. Accessed 2024-12-20. > "You can now transition any element to any element, not just when you're changing pages." Replaces complex JavaScript animation libraries with native browser capabilities. [view highlight](https://youtu.be/jg8gJz82kZg?t=150#H1) #xref #articleseed ID:rw_baseline2025 ### [H2] Content visibility improves rendering performance > [!quote] [Baseline 2025 Features](https://www.youtube.com/watch?v=jg8gJz82kZg) > "Facebook engineers observed up to 250 millisecond improvement in navigation times." Native control over element rendering states reduces unnecessary computation. [view highlight](https://youtu.be/jg8gJz82kZg?t=1260#H2) #xref ID:rw_performance2025 --- ### ๐Ÿ”– Atomic Split Pad (Zettel Candidates) Purpose: Promote reusable claims into Atomic notes. Split level: H4 #### [Z1] Baseline tracks cross-browser feature availability - Simplifies compatibility decisions vs Can I Use complexity - Pointer to 00:00 timestamp - Links: [[Browser-Compatibility]] [[Web-Standards]] #### [Z2] Native CSS animations outperform JavaScript solutions - Browser optimizations provide better performance than polyfills - Pointer to view transitions demo - Links: [[Performance-Optimization]] [[CSS-Animations]] --- ### โœ๏ธ Fleeting Queue Purpose: Capture quick actions for Fleeting notes. - [F1] Research view transitions for WordPress block editor โ€” smooth state changes #fleeting #wordpress - [F2] Test content visibility on widget-heavy themes โ€” performance optimization #fleeting #performance - [F3] Evaluate popover API vs current tooltip plugins โ€” dependency reduction #fleeting #ui --- ## Full Transcript [00:00] The end of 2025 is here and the browser<br>[00:04] gained so much cool stuff. We're going<br>[00:06] to be talking about what we gained in<br>[00:09] 2025 for baseline on this episode of<br>[00:13] Syntax. My name is Scott Tolinsky. I'm a<br>[00:15] developer from Denver. With me as always<br>[00:16] is Wes Boss. What's up, Wes?<br>[00:18] >> Hey. Yeah, Baseline is like a project<br>[00:21] from Google and Google started it, but<br>[00:23] basically it's all the like the the web<br>[00:25] industry. Um and and baseline is this<br>[00:28] idea that you aim to show what features<br>[00:30] are usable today or or usable now. Not<br>[00:33] like you know you go to can I use and<br>[00:35] everyone's like oh but like Samsung<br>[00:37] internet from 15 years ago doesn't<br>[00:39] support this and it's kind of hard to<br>[00:41] just glance at that and see if you can<br>[00:42] use it. Whereas baseline will just tell<br>[00:44] you like newly available or like go for<br>[00:47] it son you know you can you can use this<br>[00:49] thing. So, baseline 2025, these are<br>[00:52] features that were added to every they<br>[00:54] they may have been added previously, but<br>[00:55] these are features that you can use<br>[00:57] today because they are part of baseline<br>[00:59] 2025. They are in all browsers.<br>[01:01] >> Yes. And if you have to support Internet<br>[01:03] Explorer 5 today or whatever,<br>[01:07] this ain't for you.<br>[01:08] >> L in the comments for IE supporters. Is<br>[01:10] anyone I'm curious if anyone is still<br>[01:12] supporting IE at all.<br>[01:14] >> I can't imagine. I can't imagine. I'm<br>[01:16] sure there's some like weird like<br>[01:19] embedded devices that have to support<br>[01:20] like a 8-year-old version of Chrome or<br>[01:23] something odd like that, but not as<br>[01:25] common.<br>[01:26] >> Yeah, it's not as common.<br>[01:34] >> All right, let's get into it. Wes, what<br>[01:36] do you got for me?<br>[01:37] >> Yeah, so there is 24 new APIs. We'll<br>[01:40] link up the the actual list of them.<br>[01:43] Some of them not interesting at all and<br>[01:45] some of them are are pretty exciting. So<br>[01:47] we're going to explain what they are. So<br>[01:49] first one is same document view<br>[01:52] transitions. So view transitions in CSS<br>[01:55] allow you to essentially transition<br>[01:57] anything, right? Like we're we're used<br>[01:58] to putting a transition on something.<br>[02:00] You can like transition the the width or<br>[02:02] the height or the opacity, you know? Um<br>[02:05] but when you want to transition<br>[02:07] something from one spot to another, it's<br>[02:10] it's not always doable. So, I I built<br>[02:13] this right here, which is This is Woo.<br>[02:16] Can you Can you guess what this is right<br>[02:18] here, Scott?<br>[02:19] >> Uh, can I guess maybe? What do you mean<br>[02:21] can I guess?<br>[02:23] >> Can you like What do you think? What do<br>[02:24] you think this is built in right here?<br>[02:27] >> What do I think this is built in? I'm<br>[02:28] going to say view transitions.<br>[02:30] >> Yes, this is You got it right. So, this<br>[02:33] is<br>[02:34] >> for people who are not seeing, there's a<br>[02:35] bunch of squares jumbling around on<br>[02:38] screen uh of of Wes's video. uh just for<br>[02:41] the audio listeners so they're not<br>[02:43] wondering what the hell we're talking<br>[02:44] about,<br>[02:44] >> what the hell's going on. So, this is a<br>[02:46] grid of I think 20 20 or so video<br>[02:50] elements and and when I click on<br>[02:53] randomize, I'm essentially just<br>[02:55] randomizing their their place in the<br>[02:58] grid,<br>[02:59] >> the DOM<br>[03:00] >> in the DOM. Not even um the order value.<br>[03:03] Oh, no, it is. It's randomizing their<br>[03:05] value, their order in the DOM, right? It<br>[03:07] takes them out, shuffles them, puts them<br>[03:08] back in the DOM. Normally in the DOM<br>[03:10] that would just be like an instant<br>[03:12] change over but with view transitions<br>[03:14] what you can do is you can give every<br>[03:16] single item a view transition name and<br>[03:20] then you you call an API called<br>[03:22] document.st start view transition and<br>[03:25] what that will essentially do is it<br>[03:26] takes a snapshot of where it is and then<br>[03:28] in the callback of that code you you<br>[03:30] apply some changes. In my case you can<br>[03:33] add or remove classes you can change the<br>[03:34] colors of things. In my case, I'm simply<br>[03:37] just shuffling the order of them in the<br>[03:38] DOM. Um, and then it will just tween<br>[03:42] them from where it was to where it needs<br>[03:44] to go. And you can put custom easings<br>[03:46] and bezier curves and animations on them<br>[03:49] uh all over the place. In in my case,<br>[03:51] I'm shuffling up and putting a kind of a<br>[03:54] fun transition on each of these<br>[03:55] elements. So, the fact that you can now<br>[03:58] transition any element to any element,<br>[04:01] not just when you're changing pages, but<br>[04:04] when you're clicking a button or adding<br>[04:05] a class is really cool. And now that's<br>[04:08] in every single browser. Yeah. You know<br>[04:10] what I will say? Uh, I use view<br>[04:12] transitions all the time and I think<br>[04:15] often times people don't even think<br>[04:17] about using them when they they could be<br>[04:19] the easiest solution to do any<br>[04:21] particular type of animation, especially<br>[04:24] when you have something that you have in<br>[04:26] one place. This has a secondary place<br>[04:29] and you wanted to just tween between<br>[04:30] them like you just said. Like I did an<br>[04:32] example. It was like a a card game. I<br>[04:35] made yuger in the browser and I had my<br>[04:38] cards that were in my hand and when I<br>[04:40] played the card I wanted to just go to<br>[04:42] where it went and all I did was put it<br>[04:43] from one grid to another grid and just<br>[04:46] view transition between the two. Zoop<br>[04:48] and then it's there. It's it's amazing.<br>[04:50] It's a it's an incredible API and I<br>[04:52] think one that is still greatly<br>[04:54] underutilized. You'll see cool demos of<br>[04:56] it all the time. But um now that now<br>[04:58] that we have same document view<br>[05:00] transitions and these are view<br>[05:01] transitions for SPAS single page<br>[05:04] applications um in all browsers you can<br>[05:06] safely feel like you can use them and I<br>[05:09] they're they're fantastic. You can do<br>[05:11] even like I've used them to build all<br>[05:13] kinds of animations from like a<br>[05:15] hamburger menu slide out to anything<br>[05:18] really. And it it is if if you can't do<br>[05:20] it with CSS, just CSS, yeah, you can<br>[05:23] reach for view transitions. And that's<br>[05:25] usually my my way of trying to do things<br>[05:27] like that. I'm going to pick an easy one<br>[05:29] right now, which is a small one, which<br>[05:31] is absolute value. There's now an<br>[05:34] absolute value function in CSS. That's<br>[05:36] right. CSS has got abs, folks. Uh it hit<br>[05:39] the gym 2025 and it got some abs. It got<br>[05:42] a six-pack. Uh, and it could do that<br>[05:44] with the ABS function, which again, it<br>[05:47] does exactly what you would expect it to<br>[05:49] if you have done any kind of absolute<br>[05:50] valuing in math or whatever, and it<br>[05:53] makes the value always positive. For me,<br>[05:55] this is one of those ones that like it's<br>[05:57] put on my nice to have list, and it's<br>[05:59] also put on my when I need it, I'll need<br>[06:02] it. Uh, but I haven't had a use for it<br>[06:04] just yet. I am very I've been doing a<br>[06:07] lot with calculations in CSS lately of a<br>[06:10] lot of calculations<br>[06:12] >> and I know the time where absolute value<br>[06:14] is going to be required will pop up and<br>[06:17] I'm going to be like oh perfect I got<br>[06:18] this now<br>[06:19] >> it's usually people that are doing like<br>[06:21] crazy animations easing curves uh you're<br>[06:26] doing very complicated calculations<br>[06:28] where you need the value to always be<br>[06:31] positive that's when you're you're going<br>[06:32] to reach for it so I certainly certainly<br>[06:34] think as as CSS animations um as calcs<br>[06:38] get more complex, you're going to be<br>[06:39] seeing this a lot more.<br>[06:41] >> Yeah. And maybe that's super related to<br>[06:42] absolute value, but I've been doing a<br>[06:44] lot of math with CSS lately. In fact, I<br>[06:46] just did this demo, which is a color<br>[06:47] picker, and I wanted to do it using only<br>[06:50] CSS. And it's this really neat like CSS<br>[06:53] blob of colors that when you select and<br>[06:56] it's using no JavaScript at all. using<br>[06:59] um checkboxes and elements to grab uh<br>[07:02] the the color the current color of the<br>[07:05] checkbox using you know parent selectors<br>[07:07] or whatever. Either way, there's a lot<br>[07:09] >> move.<br>[07:10] >> Thank you. Yeah, there's a lot of math<br>[07:12] involved in this and I was trying to<br>[07:15] figure out how do I get this value to be<br>[07:18] clamped essentially. I don't even know<br>[07:20] if it's clamping cuz it's not<br>[07:21] necessarily, but I want to uh take a<br>[07:25] value and uh interpolate it between two<br>[07:28] other values. Uh so that way I could I<br>[07:31] could reduce the amount of math in the<br>[07:33] positions that I had for everything. And<br>[07:35] I was getting into some serious I'll try<br>[07:37] to find my most crazy math thing in<br>[07:39] here. Uh because there was like one<br>[07:41] particular function that was like oh it<br>[07:44] wasn't even this one. Sorry. But either<br>[07:46] way, I I do think calc or absolute value<br>[07:48] could have come in handy with this<br>[07:49] because I was working with a lot of<br>[07:51] negative and positive values in here.<br>[07:53] But man, the more and more I I work with<br>[07:56] um calc in CSS, the more you're just<br>[07:59] like, man, the possibilities are<br>[08:02] infinite in this stuff and absolute<br>[08:04] value is just going to help with that. I<br>[08:06] think once we get CSS functions as well,<br>[08:08] that's going to open the door to like<br>[08:10] util libraries um that where you can<br>[08:13] just like somebody will do the hard<br>[08:15] calcs under the hood and then we'll just<br>[08:17] have these nice functions where you can<br>[08:19] pass it your values and get it back.<br>[08:21] >> Yeah, custom funks. If you're out here<br>[08:23] exploring with new APIs, your code is<br>[08:25] probably going to go through some rocky<br>[08:28] times and you'll want to have a tool<br>[08:30] like Sentry on your side to make sure<br>[08:33] that well your users are being well<br>[08:36] supported and like for instance you toss<br>[08:39] in a new API on your site. Uh somebody<br>[08:42] whose browser can't support it, maybe<br>[08:43] it's erroring out, maybe it's throwing<br>[08:45] some type of error. We've we've had that<br>[08:47] situation on syntax before and you want<br>[08:49] to make sure that you're aware of that.<br>[08:51] Who's hitting this error? why are they<br>[08:52] hitting it? What browsers that supported<br>[08:54] it? And you can get AI uh to solve and<br>[08:57] help you debug those things today in<br>[08:59] Sentry. And it is awesome.<br>[09:01] >> It's pretty good. I I used to make the<br>[09:03] joke that like the only thing Sentry<br>[09:06] doesn't do is fix the code for you, but<br>[09:09] now they do.<br>[09:11] >> So, uh they can't make that joke<br>[09:13] anymore. Uh it's it's awesome. Check it<br>[09:15] out. century.iosax.<br>[09:18] That'll get you two months for free.<br>[09:20] Next up, JSON modules um are now<br>[09:23] baseline. So, what this allows you to do<br>[09:25] is simply just import JSON as if it were<br>[09:28] a JavaScript file into your your<br>[09:31] JavaScript. We've been able to do this<br>[09:32] with Noode.js forever. And then when we<br>[09:34] moved over to ESM, we didn't have that<br>[09:36] yet. You might be saying like that's<br>[09:38] that's dumb. Like, why do I need that?<br>[09:40] Um, and I think in a lot of cases people<br>[09:42] are either storing their JSON data as JS<br>[09:45] files so they can import them or they're<br>[09:48] having to do like a fetch where they<br>[09:50] reach outside fetch that data and bring<br>[09:52] it back. And that's annoying because<br>[09:53] then you have to either have a top level<br>[09:55] await or you have to make sure that that<br>[09:56] is loaded. Now you simply just import<br>[09:59] your JSON and then you add a width type<br>[10:01] of JSON onto the end.<br>[10:02] >> Yes. Uh much needed. Uh just another<br>[10:05] thing we don't need bundlers to help us<br>[10:07] with. Right.<br>[10:08] >> Exactly. Yes. All right. Next one is the<br>[10:11] popover API. Now, the popover API was<br>[10:13] added to all browsers in 2024, believe<br>[10:16] it or not, and there was a polyfill that<br>[10:19] worked for it beforehand. So, if you've<br>[10:20] ignored the popover API to this point, I<br>[10:24] think now is the time to learn the<br>[10:26] popover API because u the popover API<br>[10:29] allows you to do what it says to do. uh<br>[10:31] you can have a popover that uh basically<br>[10:34] you can do so declaratively without any<br>[10:37] JavaScript even where you have a popover<br>[10:40] target on a button. You have the popover<br>[10:43] that has the ID and then you have a<br>[10:44] popover attribute on that popover. So<br>[10:48] that way when you click the button the<br>[10:49] popover pops over. There's some default<br>[10:52] styling. It sits on top of everything<br>[10:54] and it works like what you'd expect<br>[10:55] people uses for tool tips, little<br>[10:57] dialogues or toast menus or those types<br>[11:00] of things.<br>[11:01] There's a lot you can do with the<br>[11:02] popover. I would say if you're reaching<br>[11:04] for like a modal, you're probably going<br>[11:06] to look for the dialogue element over<br>[11:08] the popover, but a lot of times when you<br>[11:10] just want something to pop over, uh the<br>[11:13] popover<br>[11:14] >> tool tip, uh drop down nav, um all kinds<br>[11:18] of interesting and we're also getting<br>[11:20] this a lot of this stuff like works<br>[11:22] together, right? like popover dialogue<br>[11:25] CSS anchor and now we're getting the<br>[11:27] interest invoker API which will allow<br>[11:30] you to pop things over when somebody<br>[11:32] simply hovers over top which is so good<br>[11:35] because now you now you can get like CSS<br>[11:38] only<br>[11:39] >> little tool tips on top of your your<br>[11:41] values when you simply hover.<br>[11:43] >> Yeah. And something that the popover API<br>[11:45] does that just simply position fixing<br>[11:48] fixing doesn't or positioning absoluting<br>[11:51] is that it puts it on the top layer<br>[11:53] which is it it's essentially like what<br>[11:55] people use React portals for. It<br>[11:57] essentially takes things and sets it on<br>[11:59] a new layer stacking layer on top of<br>[12:02] everything. Meaning that our Z-index<br>[12:04] woes of popover stuff can go away<br>[12:08] because now you could just use the top<br>[12:10] layer API from popover. It pops over,<br>[12:13] sits on top of everything. And with the<br>[12:16] anchor API, it allows you to actually<br>[12:19] position it where you want, which is so<br>[12:21] funny. This is the top layer API minus<br>[12:23] the anchor without anchor positioning,<br>[12:26] kind of a disaster. It's tough to work<br>[12:28] in. It's tough to position things. But<br>[12:29] with the anchor API where you can anchor<br>[12:31] it to something else, it is uh really<br>[12:35] next level API. Also, anchor positioning<br>[12:37] though not baseline yet. It is behind a<br>[12:39] flag in Firefox still. So,<br>[12:42] checking that out yesterday. There's<br>[12:43] there's been a lot of movement in the<br>[12:45] Mozilla bug in the last couple days. So,<br>[12:47] I'm<br>[12:47] >> there has been<br>[12:48] >> I'm kind of I'm kind of thinking that<br>[12:51] it's going to come soon, but I've said<br>[12:52] that before and been disappointed. So,<br>[12:54] I'm not not getting my hopes up yet. I<br>[12:56] am<br>[12:57] >> feel Firefox has had some movement on<br>[13:00] some APIs lately that I have been kind<br>[13:03] of surprised by. So,<br>[13:06] >> killing it.<br>[13:06] >> Uh oh, yeah. Next one we have is this<br>[13:09] one might not be interesting to you but<br>[13:11] I'll explain why it's interesting to me<br>[13:12] is a B 64 to u int8 array. So what this<br>[13:18] means is that if you have been using<br>[13:21] like windowa tob or b to a to encode and<br>[13:25] decode base 64 um that's always been a<br>[13:28] bit of a weird one because you you look<br>[13:29] up the mdn for b2a which is a a function<br>[13:33] for encoding and decoding uh base 64. it<br>[13:37] says like this is deprecated. We're like<br>[13:38] okay but like why is everybody using it?<br>[13:41] Um and the replacement for that is using<br>[13:44] these new UN8 array APIs. Um and I'll<br>[13:48] explain why this is good because if you<br>[13:51] have B 64 data um using those old APIs<br>[13:56] it stores them as a string. Um and<br>[13:58] that's why like when Scott did the like<br>[14:00] try to crash the browser challenge<br>[14:02] what's what did he go for? He went for a<br>[14:03] big ass B 64 image, right?<br>[14:06] >> Oh, yeah.<br>[14:07] >> And that that's a lot for for the<br>[14:09] browser to to store and to decode and<br>[14:11] all of that. So, this new one allows you<br>[14:14] to store B 64 data not as a string, but<br>[14:18] as a special array, which is a UI 8<br>[14:21] array. And there's a really neat I I'll<br>[14:24] link it up blog post about this from<br>[14:26] Blobfolio. and he he kind of looked into<br>[14:29] it and he says storing the data as an<br>[14:33] array is is actually quite a bit bigger.<br>[14:37] Um, however,<br>[14:39] in in the DOM, it's significantly<br>[14:41] smaller because instead of having like<br>[14:44] image source equals and and any type of<br>[14:46] binary data can go into a a an array,<br>[14:50] right? where you probably see it most<br>[14:52] often in web development is like an<br>[14:55] image that's been B 64 encoded. If you<br>[14:58] want to then display that as an image,<br>[15:00] not as a string because like those<br>[15:02] things are massive and often it's it<br>[15:04] gets really chuggy to decode them. What<br>[15:07] you can do is you can use the uh create<br>[15:11] object URL similar to if you've ever had<br>[15:13] a video stream and you want to set it to<br>[15:16] a video tag. You'll often see that like<br>[15:18] blob URL where it links to like a unique<br>[15:20] ID. You can do that with images as well<br>[15:23] where you create a URL that points to a<br>[15:26] binary data, a blob. What the benefit of<br>[15:29] that is is if you need to use it in<br>[15:30] multiple places, it's still pointing to<br>[15:32] one spot. Um, and it's also the DOM<br>[15:35] doesn't have to deal with this massive<br>[15:37] huge string. So, um, apparently the blog<br>[15:40] post shows that it's overall better and<br>[15:43] faster for both the DOM rendering and<br>[15:46] for for painting.<br>[15:47] >> So, don't use next time you have to B 64<br>[15:51] decode something, reach for this API.<br>[15:53] Nice. Yeah, I I didn't even notice that.<br>[15:57] Did not know. And it is funny cuz when<br>[15:59] you you preemptively called me wondering<br>[16:02] why it was important or why I should<br>[16:04] care, I was currently wondering why I<br>[16:06] should care. So, thank you for doing<br>[16:08] that. Uh, I'm going to show you next one<br>[16:12] that actually was baseline 2024, but I<br>[16:15] went looking for it in baseline 2025 and<br>[16:18] was shocked to see that it was baseline<br>[16:20] 2024 because we got starting style last<br>[16:23] year, which was um the ability to<br>[16:26] declare CSS that is something before or<br>[16:29] like at the state at which it enters the<br>[16:31] DOM. So therefore, you'd be able to then<br>[16:34] uh animate from that state to its end<br>[16:38] state. Uh allowing you to do all kinds<br>[16:40] of animations where things came into the<br>[16:42] DOM. In fact, um this actually used to<br>[16:45] be and and maybe how some people still<br>[16:47] do it, how like React transition used to<br>[16:49] work where they would add a class or<br>[16:50] even Angular transitions. They would add<br>[16:52] a class to something with the initial<br>[16:55] with the starting style and then add<br>[16:58] another class and then remove that<br>[16:59] class. So they they the way they did<br>[17:01] classes to do animations was simply<br>[17:03] having a starting style class and then<br>[17:05] the ending state style class<br>[17:08] >> like like a like a millisecond later you<br>[17:10] would apply that second class and then<br>[17:11] that gave you then an A to a B, right?<br>[17:14] Cuz if you just apply styles to<br>[17:16] something right out of the gate, it's<br>[17:18] going to be rendered with those styles.<br>[17:19] So you need an A to a B. You can't just<br>[17:21] go straight to B. So starting style will<br>[17:23] allow you to to give yourself a an a so<br>[17:27] that you can trans and and most likely<br>[17:29] what is this used for like like uh<br>[17:30] animating in a modal like it it can it<br>[17:33] can<br>[17:35] >> right come out from the bottom.<br>[17:37] >> Yes, you can do all kinds of stuff with<br>[17:38] this but I always felt like this API was<br>[17:41] underserved without this other API allow<br>[17:45] discrete. Now allow discreet was the one<br>[17:47] that I did not realize also was in<br>[17:49] baseline 2024. So you can put on a<br>[17:52] transition. Let's say uh display. So you<br>[17:56] do a transition display 0.3 seconds<br>[17:59] allow discrete. Now anybody who's done<br>[18:02] CSS transitions will know that you<br>[18:04] cannot apply transitions to things like<br>[18:07] display. So to go from display none to<br>[18:09] display block. And many of these things<br>[18:11] like dialogue or popovers, they have<br>[18:13] display none on them, right? So<br>[18:15] animating them when they come into the<br>[18:16] DOM even with starting style was not<br>[18:18] super effective. But with this allow<br>[18:21] discrete, what it does is it actually<br>[18:24] applies the display property. So that<br>[18:27] way it can it it applies it early or<br>[18:30] later depending on animating in or out.<br>[18:32] That way it will essentially be uh<br>[18:35] display block and then allow you to uh<br>[18:38] show in something or whatever the<br>[18:40] display visible. What display block<br>[18:43] display wait<br>[18:45] >> display none to display block. You can<br>[18:48] now none to display block or whatever it<br>[18:50] is, whatever the initial value is. So<br>[18:52] that way you can do those transitions<br>[18:53] whether that is from translating or<br>[18:55] fading or whatever.<br>[18:56] >> Scale zero to scale one like literally<br>[18:59] anything you can. So here I I have in my<br>[19:02] on my site here and I'll link this up is<br>[19:04] a demo that shows how to do a hamburger<br>[19:07] sliding menu using popover starting<br>[19:10] style and allow uh allowed discrete to<br>[19:13] do a full animating animating out<br>[19:16] popover hamburger menu while it leaves<br>[19:19] the DOM. It's not just simply that this<br>[19:21] thing is animating on and off. It's<br>[19:23] actually entering and leaving the DOM.<br>[19:25] And you can use it again for all kinds<br>[19:27] of other things like that. You can use<br>[19:29] it to animate accordians. You can use it<br>[19:31] to animate uh you can use it to do<br>[19:34] dialogues or drawers. So, um uh man, it<br>[19:38] is uh it is a really really cool API<br>[19:43] that allows you to do just an endless<br>[19:45] amount of stuff. Like I have essentially<br>[19:48] a dialogue that acts as if it is a swipe<br>[19:52] up dialogue or a swipe up drawer uh<br>[19:55] animation using only CSS. It's<br>[19:58] incredible.<br>[19:58] >> You know why I think you were confused<br>[20:00] is because I'm just looking at can I use<br>[20:02] for this and allow discreet was only I<br>[20:05] think it landed in Safari in September<br>[20:08] 2024. So kind of near the end of the<br>[20:10] year. However, the specifically display<br>[20:13] none to display block transition. That<br>[20:16] is not in Firefox yet<br>[20:19] >> still.<br>[20:19] >> So yeah, but it's not the end of the<br>[20:22] world because you know what happens when<br>[20:23] you don't support it? it just doesn't<br>[20:26] transition, you know, like it's not<br>[20:27] going to break your app. It's simply<br>[20:29] just going to not fade in. It will just<br>[20:31] show up immediately.<br>[20:32] >> So, that makes me wonder why they would<br>[20:34] add allow discreet to Firefox and not<br>[20:38] >> I I think it was allowed discreet was<br>[20:41] added in 2014 to Chrome.<br>[20:44] >> Yeah.<br>[20:44] >> Right. But then the the ability to<br>[20:47] transition it<br>[20:49] >> Yeah. a transition behavior<br>[20:52] was only added recently in all these<br>[20:55] browsers. So,<br>[20:56] >> so that is really surprising. But I do<br>[20:58] love uh APIs like this like view<br>[21:01] transitions when it didn't work. It just<br>[21:04] uh changed the page like normal. But<br>[21:06] then people who are in browsers that<br>[21:08] have full set of features would then be<br>[21:10] able to get that transition. And Firefox<br>[21:13] users, yes, we love progressive<br>[21:15] enhancement. Uh that's always great when<br>[21:18] you have to do it when you can get<br>[21:19] progressive enhancement without having<br>[21:20] to yeah<br>[21:21] >> um just sacrifice or rewrite a massive<br>[21:23] amount of code. So either way you can<br>[21:25] use starting style allow discreet today<br>[21:27] if you want to sacrifice some animations<br>[21:29] on Firefox. Next up I have promise.try.<br>[21:32] This is very simple API method that<br>[21:35] allows you to take synchronous methods<br>[21:38] and use them in a way in which they were<br>[21:40] a promise. So this problem comes about<br>[21:43] where if you're using multiple methods<br>[21:46] that are all promisebased. If your whole<br>[21:48] API is promisebased, it's so beautiful<br>[21:50] because you can you can chain them<br>[21:52] together. You can add a catch on the<br>[21:54] end. You can use promise.all and get all<br>[21:56] the results at once. You can use<br>[21:58] promise.all settled. This is all<br>[22:00] beautiful until there's one API which is<br>[22:03] like synchronous and it doesn't have a<br>[22:05] promise-based API you know like um at<br>[22:08] the very basic like a confirm<br>[22:11] >> you know if a confirm or like um<br>[22:15] fs.right write file sync a lot of the AI<br>[22:18] loves using the synchronous versions of<br>[22:20] the file system any of those APIs if<br>[22:23] they were to throw an error you can't<br>[22:25] use them in the same beautiful chaining<br>[22:28] promise way that I was just talking<br>[22:29] about so now promise try will allow you<br>[22:32] to just wrap a nonpromisebased<br>[22:35] function or method and then it will if<br>[22:38] it throws it will it will catch it in<br>[22:40] the catch if it returns a value it will<br>[22:42] return it in your promiseall settled So<br>[22:45] you can use any API as if it were a<br>[22:48] promise or not. So it's really nice.<br>[22:51] >> Love that. Uh the last one I have for<br>[22:53] you is content visibility. Now content<br>[22:56] visibility is an interesting API and<br>[22:58] it's one of those APIs that when you<br>[23:00] first hear about it, you're like, "Ooh,<br>[23:02] this would be like good to make the<br>[23:04] whole website out of the black box type<br>[23:06] of thing, right?" Um if you you catch<br>[23:10] you make the whole plan out of the black<br>[23:11] box because it's so powerful. Whatever.<br>[23:12] It's so strong. No, but the what this<br>[23:14] API allows you to do is control the<br>[23:16] rendering of elements in a way that uh<br>[23:20] essentially pauses the rendering of an<br>[23:23] item. So it preserves its rendering<br>[23:25] state where if you display none, it has<br>[23:28] to rerender when it comes back and it<br>[23:30] removes it from the DOM. Visibility<br>[23:32] hidden<br>[23:34] keeps it in the DOM but is constantly<br>[23:39] still rendering it. it's just visibility<br>[23:41] hidden where this if you do content<br>[23:44] visibility hidden what it does is it<br>[23:47] doesn't render uh it hides the element<br>[23:50] but it preserves its rendering state so<br>[23:53] that way if you were to toggle it back<br>[23:55] then it's preserved that rendering state<br>[23:57] and then it updates the rendering state<br>[24:00] um after you toggle it back the the way<br>[24:03] that I find this API to be the most<br>[24:05] interesting I will say is with content<br>[24:07] visibility auto and what that does is it<br>[24:10] basically has things hidden when they<br>[24:12] are off screen and that way it does the<br>[24:15] initial load and then it then renders<br>[24:18] the things that are offscreen which is<br>[24:21] really useful if you have sections of<br>[24:24] big things that are rendering offscreen.<br>[24:26] Uh like a lot of times people reach for<br>[24:28] sometimes virtual lists, virtualized<br>[24:30] lists for this type of thing. Uh but<br>[24:32] this might be something that you could<br>[24:34] use if you're having a performance<br>[24:36] impact of rendering because you're<br>[24:37] rendering a lot of big things or a lot<br>[24:40] of things offscreen and uh content<br>[24:42] visibility auto on the things off screen<br>[24:45] will then allow you to delay that. But<br>[24:48] you do have to be careful with it. It<br>[24:49] can cause layout shift. It feels like at<br>[24:52] first glance you're like oo I'll just<br>[24:54] put every single thing that's offscreen<br>[24:56] content visibility auto. But I think you<br>[24:59] want to be more surgical with it. I<br>[25:01] think you want to test with it. I want<br>[25:03] you<br>[25:03] >> I had an issue where I added it to a<br>[25:05] whole bunch of stuff and it started to<br>[25:07] chug or I had it on a website and it was<br>[25:09] faster and then they changed something<br>[25:12] >> and it started getting chuggy and then<br>[25:14] the the way I fixed it was I simply<br>[25:16] removed it which is great like ideally<br>[25:18] the browser will figure out these things<br>[25:20] for you but there are some cases where<br>[25:22] you'll have to you know better and you<br>[25:24] can explicitly step in and apply that.<br>[25:26] It's it's like will change where it's a<br>[25:29] a feature that can help if you know what<br>[25:33] you're doing with it and you test to<br>[25:35] make sure. But just a simply yellow<br>[25:37] applying it to everything is probably<br>[25:39] not the right call. But when it does<br>[25:41] work, like there's like a a use case on<br>[25:43] Facebook. It says Facebook engineers<br>[25:46] observed up to 250 millisecond<br>[25:48] improvement in navigation when uh times<br>[25:51] when going back to previously cached<br>[25:53] views. Being able to like have that<br>[25:56] control in the right circumstance I<br>[25:58] think can help. Uh so whether that is<br>[26:00] content visibility hidden or auto it's a<br>[26:04] cool API to learn.<br>[26:05] >> Uh all right I think that is that it<br>[26:07] >> that's all I have. Peace.<br>[26:13] One of my thumbnail ideas because CSS<br>[26:17] got absolute value was to have CSS<br>[26:20] having abs.<br>[26:24] >> It's ridiculous. That's a great idea. <!-- deep-read:sections end --> [[3. Resources/Readwise/Full Document Contents/Articles/Baseline 2025 Features Web Gained in 2025|Full Document Contents]] ## Document Notes --- tags: #baseline #web-development #css #javascript author: Syntax source: YouTube reference: https://www.youtube.com/watch?v=jg8gJz82kZg date created: 2024-12-20 10:30 --- # ๐Ÿท๏ธ Title: Baseline 2025 Features - Web APIs and CSS Now Available in All Browsers ## ๐Ÿงฐ Action Inbox - [H1] Implement view transitions for CRUD animations โ€” same document API now stable #animation - [H2] Replace window.atob/btoa with uint8array methods โ€” better performance #optimization - [H3] Test popover API for tooltips and dropdowns โ€” baseline stable #ui ## ๐Ÿงญ Table of Contents - [[#๐Ÿ“ Summary]] - [[#๐Ÿ“– Main Content]] - [[#๐Ÿ—’๏ธ Notes]] - [[#๐Ÿ“š References]] - [[#๐Ÿ—ฃ๏ธ Paraphrase]] - [[#๐Ÿ“ฐ Newsletter]] - [[#โœ… Action Items]] - [[#๐Ÿงช Hypotheses]] - [[#๐Ÿ“Š Methodology]] - [[#โ“ Questions]] - [[#๐Ÿ”ฎ Future Research]] - [[#๐Ÿ’ก Implications]] - [[#๐Ÿง  Learning Styles Assessment]] - [[#๐Ÿ“Š Accessibility Assessment]] - [[#๐ŸŒ DEIB Assessment]] - [[#โœ… Logical Validity]] - [[#๐Ÿ›ก๏ธ DARVO Analysis]] - [[#๐ŸŽฏ Conclusion]] ### ๐Ÿ”— References - [Baseline 2025 Features](https://web.dev/baseline) - [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API) ## ๐Ÿ“ Summary - Baseline 2025 adds 24 new web APIs and CSS features available across all browsers - Key additions include same-document view transitions, popover API, and CSS absolute value function - Features enable advanced animations and UI patterns without requiring JavaScript frameworks - Performance improvements through better binary data handling and rendering optimization - Developers can now safely use these features without worrying about browser compatibility ## ๐Ÿ“– Main Content Baseline is a web industry initiative that tracks when features become available across all modern browsers. Unlike Can I Use, which shows complex compatibility matrices, Baseline simply indicates whether a feature is "newly available" or ready to use. The 2025 release includes 24 new APIs spanning CSS animation improvements, better data handling, and enhanced UI capabilities. Same-document view transitions allow smooth element animations within single-page applications. The popover API provides declarative tooltips and overlays. CSS gains mathematical functions and better display property transitions. These features reduce reliance on JavaScript frameworks and bundlers while improving performance through native browser optimizations. ## ๐Ÿ—’๏ธ Notes #### โฑ๏ธ [00:00](https://youtu.be/jg8gJz82kZg?t=0) โ€” [H1] Baseline 2025 Introduction - Key idea: Baseline tracks features available across all browsers, unlike Can I Use complexity - Evidence: "Baseline will just tell you like newly available or like go for it son you know you can use this thing" #### โฑ๏ธ [02:30](https://youtu.be/jg8gJz82kZg?t=150) โ€” [H1] Same Document View Transitions - Key idea: Enables smooth element animations between DOM states without page changes - Evidence: "You can now transition any element to any element, not just when you're changing pages" #### โฑ๏ธ [04:45](https://youtu.be/jg8gJz82kZg?t=285) โ€” [H2] View Transitions Implementation - Key idea: Uses document.startViewTransition API with view-transition-name CSS property - Evidence: "Takes a snapshot of where it is and then in the callback you apply some changes" #### โฑ๏ธ [07:15](https://youtu.be/jg8gJz82kZg?t=435) โ€” [H2] CSS Absolute Value Function - Key idea: CSS gains abs() function for mathematical calculations - Evidence: "CSS has got abs, folks. It makes the value always positive" #### โฑ๏ธ [09:30](https://youtu.be/jg8gJz82kZg?t=570) โ€” [H2] JSON Modules Support - Key idea: Import JSON files directly as ES modules with type assertion - Evidence: "Simply just import your JSON and then you add a with type of JSON onto the end" #### โฑ๏ธ [11:00](https://youtu.be/jg8gJz82kZg?t=660) โ€” [H1] Popover API - Key idea: Declarative popovers with top layer positioning and automatic focus management - Evidence: "Puts it on the top layer which takes things and sets it on a new layer stacking layer" #### โฑ๏ธ [13:45](https://youtu.be/jg8gJz82kZg?t=825) โ€” [H2] Base64 to Uint8Array - Key idea: Better binary data handling replacing deprecated atob/btoa methods - Evidence: "Storing the data as an array is significantly smaller in the DOM" #### โฑ๏ธ [16:30](https://youtu.be/jg8gJz82kZg?t=990) โ€” [H1] Starting Style and Allow Discrete - Key idea: Animate elements entering/leaving DOM with display property transitions - Evidence: "Animate from display none to display block using allow discrete" #### โฑ๏ธ [19:15](https://youtu.be/jg8gJz82kZg?t=1155) โ€” [H2] Promise.try Method - Key idea: Wrap synchronous functions in promise-compatible interface - Evidence: "Allows you to take synchronous methods and use them in a way in which they were a promise" #### โฑ๏ธ [21:00](https://youtu.be/jg8gJz82kZg?t=1260) โ€” [H1] Content Visibility - Key idea: Control element rendering to improve performance with preserved state - Evidence: "Facebook engineers observed up to 250 millisecond improvement in navigation times" #### โฑ๏ธ [23:30](https://youtu.be/jg8gJz82kZg?t=1410) โ€” [H2] Content Visibility Auto - Key idea: Automatically defer rendering of offscreen elements - Evidence: "Things hidden when they are off screen and renders things offscreen later" #### โฑ๏ธ [25:45](https://youtu.be/jg8gJz82kZg?t=1545) โ€” [H3] Implementation Warnings - Key idea: Content visibility requires careful testing to avoid layout shift - Evidence: "You want to be more surgical with it. You want to test with it" ## ๐Ÿ“š References - [Baseline 2025 Official List](https://web.dev/baseline) - [View Transitions Specification](https://drafts.csswg.org/css-view-transitions/) - [Popover API Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Popover_API) - [Blobfolio Base64 Performance Analysis](https://blobfolio.com/) ## ๐Ÿ—ฃ๏ธ Paraphrase - Baseline 2025 brings 24 web platform features that work consistently across all modern browsers, eliminating the need to check complex compatibility charts - Same-document view transitions enable smooth animations between DOM states, making it easier to create polished user interfaces without heavy JavaScript libraries - New CSS functions like abs() and improved display property transitions give developers more control over styling and animations natively ## ๐Ÿ“ฐ Newsletter **Baseline 2025 Unlocks Native Web Animations and Performance** WordPress developers can now safely use 24 new web platform features across all browsers! The standout addition is same-document view transitions, perfect for animating block editor changes or theme customizer previews. The popover API simplifies tooltip and dropdown creation without JavaScript libraries. For performance gains, try the new content-visibility property on heavy widgets or the updated base64 handling for media processing. These native features reduce plugin dependencies and improve Core Web Vitals. **Key benefits for WordPress:** - Smoother admin interface animations - Lighter themes with native CSS features - Better performance on content-heavy sites Resources: [Learn WordPress](https://learn.wordpress.org/), [Developer Docs](https://developer.wordpress.org/), [WP-CLI](https://wp-cli.org/) ## โœ… Action Items #### WordPress - Core: Evaluate view transitions for block editor state changes, explore popover API for tooltips - Themes: Update animation patterns using native CSS instead of jQuery animations - Performance: Audit heavy widgets for content-visibility opportunities - Documentation: Create guides for baseline 2025 features in theme development ## ๐Ÿงช Hypotheses - View transitions will reduce JavaScript animation library usage by 40% in new projects - Content visibility auto will improve initial page load times for content-heavy sites by 15% - Popover API adoption will decrease modal/tooltip plugin installations - Native CSS math functions will enable more responsive design patterns ### ๐Ÿ“Š Methodology - Survey frontend developers on animation library usage before/after baseline 2025 - A/B test content visibility on high-traffic WordPress sites measuring Core Web Vitals - Track plugin repository downloads for tooltip/modal solutions over 6 months ### โ“ Questions - How will WordPress core integrate these features into the block editor? - What performance impact will widespread view transition adoption have on older devices? - Which baseline 2025 features provide the biggest accessibility improvements? ### ๐Ÿ”ฎ Future Research - Measure real-world performance gains from native CSS animations vs JavaScript - Study user experience improvements from smoother web transitions - Explore combining baseline 2025 features for advanced interaction patterns ### ๐Ÿ’ก Implications - Practice: Developers can reduce JavaScript dependencies and simplify animation code - Performance: Native browser optimizations provide better performance than polyfills - Security: Fewer third-party libraries reduce attack surface and dependency vulnerabilities - Education: Frontend curricula need updates to include these native capabilities ### ๐Ÿง  Learning Styles Assessment Reading level estimate: Grade 9-10 #### ๐Ÿ‘€ Visual learners - Present: Video demonstrations of view transitions, grid animations - Improve: Side-by-side comparisons of old vs new implementation methods #### ๐Ÿ”Š Aural learners - Present: Podcast format with detailed explanations - Improve: Audio descriptions of visual animations and code changes #### ๐Ÿ—ฃ๏ธ Verbal learners - Present: Clear API explanations with analogies - Improve: Glossary of technical terms and their relationships #### ๐Ÿงฉ Kinesthetic learners - Present: Live coding demonstrations, interactive examples - Improve: Step-by-step tutorials with downloadable starter code #### ๐Ÿง  Logical learners - Present: Performance comparisons, browser support timelines - Improve: Decision trees for when to use each new feature #### ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Social learners - Present: Discussion format between hosts - Improve: Community challenges to implement baseline 2025 features #### ๐Ÿง˜โ€โ™€๏ธ Solitary learners - Present: Comprehensive documentation links - Improve: Self-assessment checklist for feature implementation #### ๐ŸŒฟ Naturalistic learners - Present: Evolution of web standards over time - Improve: Ecosystem impact analysis of new features ### ๐Ÿ“Š Accessibility Assessment #### Screen reader semantics - Present: Audio descriptions of visual demonstrations - Improve: Transcript with code snippets marked as such #### Keyboard navigation - Present: Popover API includes focus management - Improve: Examples should demonstrate keyboard accessibility #### Contrast and readability - Present: Video maintains good contrast - Improve: Code examples need higher contrast backgrounds #### Media and captions - Present: Full transcript provided - Improve: Visual code examples need audio descriptions ### ๐ŸŒ DEIB Assessment #### Cultural breadth - Present: Technical content accessible globally - Improve: Examples could use diverse naming conventions #### Inclusive language - Present: Neutral technical language throughout - Improve: Avoid colloquialisms like "go for it son" #### Neurodiversity support - Present: Clear section breaks with timestamps - Improve: Chapter markers for easier navigation #### Representation - Present: Technical focus without bias - Improve: Diverse example applications and use cases ### โœ… Logical Validity #### Strong reasoning - Deductive strength: Features in baseline โ†’ safe to use โ†’ reduced compatibility concerns - Inductive strength: Performance examples from Facebook support broader benefits - Causal reasoning: Native implementations โ†’ better performance than polyfills #### Fallacies - Appeal to novelty: Assumes new features are automatically better without considering edge cases - Hasty generalization: Content visibility benefits may not apply to all use cases #### Tone of voice - Overall tone: Enthusiastic and educational with practical focus ### ๐Ÿ›ก๏ธ DARVO Analysis - No defensive patterns detected - Content focuses on technical capabilities rather than justifying decisions - Balanced presentation of benefits and limitations ## ๐ŸŽฏ Conclusion Baseline 2025 represents a significant step forward in web platform maturity, providing developers with powerful native capabilities that previously required JavaScript libraries. The combination of view transitions, popover API, and CSS enhancements enables more performant and accessible user interfaces. Developers should evaluate these features for new projects while considering progressive enhancement for existing applications. ## ๐Ÿงฑ Refactor Appendix ### ๐Ÿ“š Literature Split Pad Purpose: Stage CEE units that become Literature notes. Split level: H3 ### [H1] View transitions enable native DOM animation > [!quote] [Baseline 2025 Features](https://www.youtube.com/watch?v=jg8gJz82kZg) by [[Syntax]] via [[YouTube]]. Published 2024-12-20. Accessed 2024-12-20. > "You can now transition any element to any element, not just when you're changing pages." Replaces complex JavaScript animation libraries with native browser capabilities. [view highlight](https://youtu.be/jg8gJz82kZg?t=150#H1) #xref #articleseed ID:rw_baseline2025 ### [H2] Content visibility improves rendering performance > [!quote] [Baseline 2025 Features](https://www.youtube.com/watch?v=jg8gJz82kZg) > "Facebook engineers observed up to 250 millisecond improvement in navigation times." Native control over element rendering states reduces unnecessary computation. [view highlight](https://youtu.be/jg8gJz82kZg?t=1260#H2) #xref ID:rw_performance2025 --- ### ๐Ÿ”– Atomic Split Pad (Zettel Candidates) Purpose: Promote reusable claims into Atomic notes. Split level: H4 #### [Z1] Baseline tracks cross-browser feature availability - Simplifies compatibility decisions vs Can I Use complexity - Pointer to 00:00 timestamp - Links: [[Browser-Compatibility]] [[Web-Standards]] #### [Z2] Native CSS animations outperform JavaScript solutions - Browser optimizations provide better performance than polyfills - Pointer to view transitions demo - Links: [[Performance-Optimization]] [[CSS-Animations]] --- ### โœ๏ธ Fleeting Queue Purpose: Capture quick actions for Fleeting notes. - [F1] Research view transitions for WordPress block editor โ€” smooth state changes #fleeting #wordpress - [F2] Test content visibility on widget-heavy themes โ€” performance optimization #fleeting #performance - [F3] Evaluate popover API vs current tooltip plugins โ€” dependency reduction #fleeting #ui --- ## Full Transcript [00:00] The end of 2025 is here and the browser<br>[00:04] gained so much cool stuff. We're going<br>[00:06] to be talking about what we gained in<br>[00:09] 2025 for baseline on this episode of<br>[00:13] Syntax. My name is Scott Tolinsky. I'm a<br>[00:15] developer from Denver. With me as always<br>[00:16] is Wes Boss. What's up, Wes?<br>[00:18] >> Hey. Yeah, Baseline is like a project<br>[00:21] from Google and Google started it, but<br>[00:23] basically it's all the like the the web<br>[00:25] industry. Um and and baseline is this<br>[00:28] idea that you aim to show what features<br>[00:30] are usable today or or usable now. Not<br>[00:33] like you know you go to can I use and<br>[00:35] everyone's like oh but like Samsung<br>[00:37] internet from 15 years ago doesn't<br>[00:39] support this and it's kind of hard to<br>[00:41] just glance at that and see if you can<br>[00:42] use it. Whereas baseline will just tell<br>[00:44] you like newly available or like go for<br>[00:47] it son you know you can you can use this<br>[00:49] thing. So, baseline 2025, these are<br>[00:52] features that were added to every they<br>[00:54] they may have been added previously, but<br>[00:55] these are features that you can use<br>[00:57] today because they are part of baseline<br>[00:59] 2025. They are in all browsers.<br>[01:01] >> Yes. And if you have to support Internet<br>[01:03] Explorer 5 today or whatever,<br>[01:07] this ain't for you.<br>[01:08] >> L in the comments for IE supporters. Is<br>[01:10] anyone I'm curious if anyone is still<br>[01:12] supporting IE at all.<br>[01:14] >> I can't imagine. I can't imagine. I'm<br>[01:16] sure there's some like weird like<br>[01:19] embedded devices that have to support<br>[01:20] like a 8-year-old version of Chrome or<br>[01:23] something odd like that, but not as<br>[01:25] common.<br>[01:26] >> Yeah, it's not as common.<br>[01:34] >> All right, let's get into it. Wes, what<br>[01:36] do you got for me?<br>[01:37] >> Yeah, so there is 24 new APIs. We'll<br>[01:40] link up the the actual list of them.<br>[01:43] Some of them not interesting at all and<br>[01:45] some of them are are pretty exciting. So<br>[01:47] we're going to explain what they are. So<br>[01:49] first one is same document view<br>[01:52] transitions. So view transitions in CSS<br>[01:55] allow you to essentially transition<br>[01:57] anything, right? Like we're we're used<br>[01:58] to putting a transition on something.<br>[02:00] You can like transition the the width or<br>[02:02] the height or the opacity, you know? Um<br>[02:05] but when you want to transition<br>[02:07] something from one spot to another, it's<br>[02:10] it's not always doable. So, I I built<br>[02:13] this right here, which is This is Woo.<br>[02:16] Can you Can you guess what this is right<br>[02:18] here, Scott?<br>[02:19] >> Uh, can I guess maybe? What do you mean<br>[02:21] can I guess?<br>[02:23] >> Can you like What do you think? What do<br>[02:24] you think this is built in right here?<br>[02:27] >> What do I think this is built in? I'm<br>[02:28] going to say view transitions.<br>[02:30] >> Yes, this is You got it right. So, this<br>[02:33] is<br>[02:34] >> for people who are not seeing, there's a<br>[02:35] bunch of squares jumbling around on<br>[02:38] screen uh of of Wes's video. uh just for<br>[02:41] the audio listeners so they're not<br>[02:43] wondering what the hell we're talking<br>[02:44] about,<br>[02:44] >> what the hell's going on. So, this is a<br>[02:46] grid of I think 20 20 or so video<br>[02:50] elements and and when I click on<br>[02:53] randomize, I'm essentially just<br>[02:55] randomizing their their place in the<br>[02:58] grid,<br>[02:59] >> the DOM<br>[03:00] >> in the DOM. Not even um the order value.<br>[03:03] Oh, no, it is. It's randomizing their<br>[03:05] value, their order in the DOM, right? It<br>[03:07] takes them out, shuffles them, puts them<br>[03:08] back in the DOM. Normally in the DOM<br>[03:10] that would just be like an instant<br>[03:12] change over but with view transitions<br>[03:14] what you can do is you can give every<br>[03:16] single item a view transition name and<br>[03:20] then you you call an API called<br>[03:22] document.st start view transition and<br>[03:25] what that will essentially do is it<br>[03:26] takes a snapshot of where it is and then<br>[03:28] in the callback of that code you you<br>[03:30] apply some changes. In my case you can<br>[03:33] add or remove classes you can change the<br>[03:34] colors of things. In my case, I'm simply<br>[03:37] just shuffling the order of them in the<br>[03:38] DOM. Um, and then it will just tween<br>[03:42] them from where it was to where it needs<br>[03:44] to go. And you can put custom easings<br>[03:46] and bezier curves and animations on them<br>[03:49] uh all over the place. In in my case,<br>[03:51] I'm shuffling up and putting a kind of a<br>[03:54] fun transition on each of these<br>[03:55] elements. So, the fact that you can now<br>[03:58] transition any element to any element,<br>[04:01] not just when you're changing pages, but<br>[04:04] when you're clicking a button or adding<br>[04:05] a class is really cool. And now that's<br>[04:08] in every single browser. Yeah. You know<br>[04:10] what I will say? Uh, I use view<br>[04:12] transitions all the time and I think<br>[04:15] often times people don't even think<br>[04:17] about using them when they they could be<br>[04:19] the easiest solution to do any<br>[04:21] particular type of animation, especially<br>[04:24] when you have something that you have in<br>[04:26] one place. This has a secondary place<br>[04:29] and you wanted to just tween between<br>[04:30] them like you just said. Like I did an<br>[04:32] example. It was like a a card game. I<br>[04:35] made yuger in the browser and I had my<br>[04:38] cards that were in my hand and when I<br>[04:40] played the card I wanted to just go to<br>[04:42] where it went and all I did was put it<br>[04:43] from one grid to another grid and just<br>[04:46] view transition between the two. Zoop<br>[04:48] and then it's there. It's it's amazing.<br>[04:50] It's a it's an incredible API and I<br>[04:52] think one that is still greatly<br>[04:54] underutilized. You'll see cool demos of<br>[04:56] it all the time. But um now that now<br>[04:58] that we have same document view<br>[05:00] transitions and these are view<br>[05:01] transitions for SPAS single page<br>[05:04] applications um in all browsers you can<br>[05:06] safely feel like you can use them and I<br>[05:09] they're they're fantastic. You can do<br>[05:11] even like I've used them to build all<br>[05:13] kinds of animations from like a<br>[05:15] hamburger menu slide out to anything<br>[05:18] really. And it it is if if you can't do<br>[05:20] it with CSS, just CSS, yeah, you can<br>[05:23] reach for view transitions. And that's<br>[05:25] usually my my way of trying to do things<br>[05:27] like that. I'm going to pick an easy one<br>[05:29] right now, which is a small one, which<br>[05:31] is absolute value. There's now an<br>[05:34] absolute value function in CSS. That's<br>[05:36] right. CSS has got abs, folks. Uh it hit<br>[05:39] the gym 2025 and it got some abs. It got<br>[05:42] a six-pack. Uh, and it could do that<br>[05:44] with the ABS function, which again, it<br>[05:47] does exactly what you would expect it to<br>[05:49] if you have done any kind of absolute<br>[05:50] valuing in math or whatever, and it<br>[05:53] makes the value always positive. For me,<br>[05:55] this is one of those ones that like it's<br>[05:57] put on my nice to have list, and it's<br>[05:59] also put on my when I need it, I'll need<br>[06:02] it. Uh, but I haven't had a use for it<br>[06:04] just yet. I am very I've been doing a<br>[06:07] lot with calculations in CSS lately of a<br>[06:10] lot of calculations<br>[06:12] >> and I know the time where absolute value<br>[06:14] is going to be required will pop up and<br>[06:17] I'm going to be like oh perfect I got<br>[06:18] this now<br>[06:19] >> it's usually people that are doing like<br>[06:21] crazy animations easing curves uh you're<br>[06:26] doing very complicated calculations<br>[06:28] where you need the value to always be<br>[06:31] positive that's when you're you're going<br>[06:32] to reach for it so I certainly certainly<br>[06:34] think as as CSS animations um as calcs<br>[06:38] get more complex, you're going to be<br>[06:39] seeing this a lot more.<br>[06:41] >> Yeah. And maybe that's super related to<br>[06:42] absolute value, but I've been doing a<br>[06:44] lot of math with CSS lately. In fact, I<br>[06:46] just did this demo, which is a color<br>[06:47] picker, and I wanted to do it using only<br>[06:50] CSS. And it's this really neat like CSS<br>[06:53] blob of colors that when you select and<br>[06:56] it's using no JavaScript at all. using<br>[06:59] um checkboxes and elements to grab uh<br>[07:02] the the color the current color of the<br>[07:05] checkbox using you know parent selectors<br>[07:07] or whatever. Either way, there's a lot<br>[07:09] >> move.<br>[07:10] >> Thank you. Yeah, there's a lot of math<br>[07:12] involved in this and I was trying to<br>[07:15] figure out how do I get this value to be<br>[07:18] clamped essentially. I don't even know<br>[07:20] if it's clamping cuz it's not<br>[07:21] necessarily, but I want to uh take a<br>[07:25] value and uh interpolate it between two<br>[07:28] other values. Uh so that way I could I<br>[07:31] could reduce the amount of math in the<br>[07:33] positions that I had for everything. And<br>[07:35] I was getting into some serious I'll try<br>[07:37] to find my most crazy math thing in<br>[07:39] here. Uh because there was like one<br>[07:41] particular function that was like oh it<br>[07:44] wasn't even this one. Sorry. But either<br>[07:46] way, I I do think calc or absolute value<br>[07:48] could have come in handy with this<br>[07:49] because I was working with a lot of<br>[07:51] negative and positive values in here.<br>[07:53] But man, the more and more I I work with<br>[07:56] um calc in CSS, the more you're just<br>[07:59] like, man, the possibilities are<br>[08:02] infinite in this stuff and absolute<br>[08:04] value is just going to help with that. I<br>[08:06] think once we get CSS functions as well,<br>[08:08] that's going to open the door to like<br>[08:10] util libraries um that where you can<br>[08:13] just like somebody will do the hard<br>[08:15] calcs under the hood and then we'll just<br>[08:17] have these nice functions where you can<br>[08:19] pass it your values and get it back.<br>[08:21] >> Yeah, custom funks. If you're out here<br>[08:23] exploring with new APIs, your code is<br>[08:25] probably going to go through some rocky<br>[08:28] times and you'll want to have a tool<br>[08:30] like Sentry on your side to make sure<br>[08:33] that well your users are being well<br>[08:36] supported and like for instance you toss<br>[08:39] in a new API on your site. Uh somebody<br>[08:42] whose browser can't support it, maybe<br>[08:43] it's erroring out, maybe it's throwing<br>[08:45] some type of error. We've we've had that<br>[08:47] situation on syntax before and you want<br>[08:49] to make sure that you're aware of that.<br>[08:51] Who's hitting this error? why are they<br>[08:52] hitting it? What browsers that supported<br>[08:54] it? And you can get AI uh to solve and<br>[08:57] help you debug those things today in<br>[08:59] Sentry. And it is awesome.<br>[09:01] >> It's pretty good. I I used to make the<br>[09:03] joke that like the only thing Sentry<br>[09:06] doesn't do is fix the code for you, but<br>[09:09] now they do.<br>[09:11] >> So, uh they can't make that joke<br>[09:13] anymore. Uh it's it's awesome. Check it<br>[09:15] out. century.iosax.<br>[09:18] That'll get you two months for free.<br>[09:20] Next up, JSON modules um are now<br>[09:23] baseline. So, what this allows you to do<br>[09:25] is simply just import JSON as if it were<br>[09:28] a JavaScript file into your your<br>[09:31] JavaScript. We've been able to do this<br>[09:32] with Noode.js forever. And then when we<br>[09:34] moved over to ESM, we didn't have that<br>[09:36] yet. You might be saying like that's<br>[09:38] that's dumb. Like, why do I need that?<br>[09:40] Um, and I think in a lot of cases people<br>[09:42] are either storing their JSON data as JS<br>[09:45] files so they can import them or they're<br>[09:48] having to do like a fetch where they<br>[09:50] reach outside fetch that data and bring<br>[09:52] it back. And that's annoying because<br>[09:53] then you have to either have a top level<br>[09:55] await or you have to make sure that that<br>[09:56] is loaded. Now you simply just import<br>[09:59] your JSON and then you add a width type<br>[10:01] of JSON onto the end.<br>[10:02] >> Yes. Uh much needed. Uh just another<br>[10:05] thing we don't need bundlers to help us<br>[10:07] with. Right.<br>[10:08] >> Exactly. Yes. All right. Next one is the<br>[10:11] popover API. Now, the popover API was<br>[10:13] added to all browsers in 2024, believe<br>[10:16] it or not, and there was a polyfill that<br>[10:19] worked for it beforehand. So, if you've<br>[10:20] ignored the popover API to this point, I<br>[10:24] think now is the time to learn the<br>[10:26] popover API because u the popover API<br>[10:29] allows you to do what it says to do. uh<br>[10:31] you can have a popover that uh basically<br>[10:34] you can do so declaratively without any<br>[10:37] JavaScript even where you have a popover<br>[10:40] target on a button. You have the popover<br>[10:43] that has the ID and then you have a<br>[10:44] popover attribute on that popover. So<br>[10:48] that way when you click the button the<br>[10:49] popover pops over. There's some default<br>[10:52] styling. It sits on top of everything<br>[10:54] and it works like what you'd expect<br>[10:55] people uses for tool tips, little<br>[10:57] dialogues or toast menus or those types<br>[11:00] of things.<br>[11:01] There's a lot you can do with the<br>[11:02] popover. I would say if you're reaching<br>[11:04] for like a modal, you're probably going<br>[11:06] to look for the dialogue element over<br>[11:08] the popover, but a lot of times when you<br>[11:10] just want something to pop over, uh the<br>[11:13] popover<br>[11:14] >> tool tip, uh drop down nav, um all kinds<br>[11:18] of interesting and we're also getting<br>[11:20] this a lot of this stuff like works<br>[11:22] together, right? like popover dialogue<br>[11:25] CSS anchor and now we're getting the<br>[11:27] interest invoker API which will allow<br>[11:30] you to pop things over when somebody<br>[11:32] simply hovers over top which is so good<br>[11:35] because now you now you can get like CSS<br>[11:38] only<br>[11:39] >> little tool tips on top of your your<br>[11:41] values when you simply hover.<br>[11:43] >> Yeah. And something that the popover API<br>[11:45] does that just simply position fixing<br>[11:48] fixing doesn't or positioning absoluting<br>[11:51] is that it puts it on the top layer<br>[11:53] which is it it's essentially like what<br>[11:55] people use React portals for. It<br>[11:57] essentially takes things and sets it on<br>[11:59] a new layer stacking layer on top of<br>[12:02] everything. Meaning that our Z-index<br>[12:04] woes of popover stuff can go away<br>[12:08] because now you could just use the top<br>[12:10] layer API from popover. It pops over,<br>[12:13] sits on top of everything. And with the<br>[12:16] anchor API, it allows you to actually<br>[12:19] position it where you want, which is so<br>[12:21] funny. This is the top layer API minus<br>[12:23] the anchor without anchor positioning,<br>[12:26] kind of a disaster. It's tough to work<br>[12:28] in. It's tough to position things. But<br>[12:29] with the anchor API where you can anchor<br>[12:31] it to something else, it is uh really<br>[12:35] next level API. Also, anchor positioning<br>[12:37] though not baseline yet. It is behind a<br>[12:39] flag in Firefox still. So,<br>[12:42] checking that out yesterday. There's<br>[12:43] there's been a lot of movement in the<br>[12:45] Mozilla bug in the last couple days. So,<br>[12:47] I'm<br>[12:47] >> there has been<br>[12:48] >> I'm kind of I'm kind of thinking that<br>[12:51] it's going to come soon, but I've said<br>[12:52] that before and been disappointed. So,<br>[12:54] I'm not not getting my hopes up yet. I<br>[12:56] am<br>[12:57] >> feel Firefox has had some movement on<br>[13:00] some APIs lately that I have been kind<br>[13:03] of surprised by. So,<br>[13:06] >> killing it.<br>[13:06] >> Uh oh, yeah. Next one we have is this<br>[13:09] one might not be interesting to you but<br>[13:11] I'll explain why it's interesting to me<br>[13:12] is a B 64 to u int8 array. So what this<br>[13:18] means is that if you have been using<br>[13:21] like windowa tob or b to a to encode and<br>[13:25] decode base 64 um that's always been a<br>[13:28] bit of a weird one because you you look<br>[13:29] up the mdn for b2a which is a a function<br>[13:33] for encoding and decoding uh base 64. it<br>[13:37] says like this is deprecated. We're like<br>[13:38] okay but like why is everybody using it?<br>[13:41] Um and the replacement for that is using<br>[13:44] these new UN8 array APIs. Um and I'll<br>[13:48] explain why this is good because if you<br>[13:51] have B 64 data um using those old APIs<br>[13:56] it stores them as a string. Um and<br>[13:58] that's why like when Scott did the like<br>[14:00] try to crash the browser challenge<br>[14:02] what's what did he go for? He went for a<br>[14:03] big ass B 64 image, right?<br>[14:06] >> Oh, yeah.<br>[14:07] >> And that that's a lot for for the<br>[14:09] browser to to store and to decode and<br>[14:11] all of that. So, this new one allows you<br>[14:14] to store B 64 data not as a string, but<br>[14:18] as a special array, which is a UI 8<br>[14:21] array. And there's a really neat I I'll<br>[14:24] link it up blog post about this from<br>[14:26] Blobfolio. and he he kind of looked into<br>[14:29] it and he says storing the data as an<br>[14:33] array is is actually quite a bit bigger.<br>[14:37] Um, however,<br>[14:39] in in the DOM, it's significantly<br>[14:41] smaller because instead of having like<br>[14:44] image source equals and and any type of<br>[14:46] binary data can go into a a an array,<br>[14:50] right? where you probably see it most<br>[14:52] often in web development is like an<br>[14:55] image that's been B 64 encoded. If you<br>[14:58] want to then display that as an image,<br>[15:00] not as a string because like those<br>[15:02] things are massive and often it's it<br>[15:04] gets really chuggy to decode them. What<br>[15:07] you can do is you can use the uh create<br>[15:11] object URL similar to if you've ever had<br>[15:13] a video stream and you want to set it to<br>[15:16] a video tag. You'll often see that like<br>[15:18] blob URL where it links to like a unique<br>[15:20] ID. You can do that with images as well<br>[15:23] where you create a URL that points to a<br>[15:26] binary data, a blob. What the benefit of<br>[15:29] that is is if you need to use it in<br>[15:30] multiple places, it's still pointing to<br>[15:32] one spot. Um, and it's also the DOM<br>[15:35] doesn't have to deal with this massive<br>[15:37] huge string. So, um, apparently the blog<br>[15:40] post shows that it's overall better and<br>[15:43] faster for both the DOM rendering and<br>[15:46] for for painting.<br>[15:47] >> So, don't use next time you have to B 64<br>[15:51] decode something, reach for this API.<br>[15:53] Nice. Yeah, I I didn't even notice that.<br>[15:57] Did not know. And it is funny cuz when<br>[15:59] you you preemptively called me wondering<br>[16:02] why it was important or why I should<br>[16:04] care, I was currently wondering why I<br>[16:06] should care. So, thank you for doing<br>[16:08] that. Uh, I'm going to show you next one<br>[16:12] that actually was baseline 2024, but I<br>[16:15] went looking for it in baseline 2025 and<br>[16:18] was shocked to see that it was baseline<br>[16:20] 2024 because we got starting style last<br>[16:23] year, which was um the ability to<br>[16:26] declare CSS that is something before or<br>[16:29] like at the state at which it enters the<br>[16:31] DOM. So therefore, you'd be able to then<br>[16:34] uh animate from that state to its end<br>[16:38] state. Uh allowing you to do all kinds<br>[16:40] of animations where things came into the<br>[16:42] DOM. In fact, um this actually used to<br>[16:45] be and and maybe how some people still<br>[16:47] do it, how like React transition used to<br>[16:49] work where they would add a class or<br>[16:50] even Angular transitions. They would add<br>[16:52] a class to something with the initial<br>[16:55] with the starting style and then add<br>[16:58] another class and then remove that<br>[16:59] class. So they they the way they did<br>[17:01] classes to do animations was simply<br>[17:03] having a starting style class and then<br>[17:05] the ending state style class<br>[17:08] >> like like a like a millisecond later you<br>[17:10] would apply that second class and then<br>[17:11] that gave you then an A to a B, right?<br>[17:14] Cuz if you just apply styles to<br>[17:16] something right out of the gate, it's<br>[17:18] going to be rendered with those styles.<br>[17:19] So you need an A to a B. You can't just<br>[17:21] go straight to B. So starting style will<br>[17:23] allow you to to give yourself a an a so<br>[17:27] that you can trans and and most likely<br>[17:29] what is this used for like like uh<br>[17:30] animating in a modal like it it can it<br>[17:33] can<br>[17:35] >> right come out from the bottom.<br>[17:37] >> Yes, you can do all kinds of stuff with<br>[17:38] this but I always felt like this API was<br>[17:41] underserved without this other API allow<br>[17:45] discrete. Now allow discreet was the one<br>[17:47] that I did not realize also was in<br>[17:49] baseline 2024. So you can put on a<br>[17:52] transition. Let's say uh display. So you<br>[17:56] do a transition display 0.3 seconds<br>[17:59] allow discrete. Now anybody who's done<br>[18:02] CSS transitions will know that you<br>[18:04] cannot apply transitions to things like<br>[18:07] display. So to go from display none to<br>[18:09] display block. And many of these things<br>[18:11] like dialogue or popovers, they have<br>[18:13] display none on them, right? So<br>[18:15] animating them when they come into the<br>[18:16] DOM even with starting style was not<br>[18:18] super effective. But with this allow<br>[18:21] discrete, what it does is it actually<br>[18:24] applies the display property. So that<br>[18:27] way it can it it applies it early or<br>[18:30] later depending on animating in or out.<br>[18:32] That way it will essentially be uh<br>[18:35] display block and then allow you to uh<br>[18:38] show in something or whatever the<br>[18:40] display visible. What display block<br>[18:43] display wait<br>[18:45] >> display none to display block. You can<br>[18:48] now none to display block or whatever it<br>[18:50] is, whatever the initial value is. So<br>[18:52] that way you can do those transitions<br>[18:53] whether that is from translating or<br>[18:55] fading or whatever.<br>[18:56] >> Scale zero to scale one like literally<br>[18:59] anything you can. So here I I have in my<br>[19:02] on my site here and I'll link this up is<br>[19:04] a demo that shows how to do a hamburger<br>[19:07] sliding menu using popover starting<br>[19:10] style and allow uh allowed discrete to<br>[19:13] do a full animating animating out<br>[19:16] popover hamburger menu while it leaves<br>[19:19] the DOM. It's not just simply that this<br>[19:21] thing is animating on and off. It's<br>[19:23] actually entering and leaving the DOM.<br>[19:25] And you can use it again for all kinds<br>[19:27] of other things like that. You can use<br>[19:29] it to animate accordians. You can use it<br>[19:31] to animate uh you can use it to do<br>[19:34] dialogues or drawers. So, um uh man, it<br>[19:38] is uh it is a really really cool API<br>[19:43] that allows you to do just an endless<br>[19:45] amount of stuff. Like I have essentially<br>[19:48] a dialogue that acts as if it is a swipe<br>[19:52] up dialogue or a swipe up drawer uh<br>[19:55] animation using only CSS. It's<br>[19:58] incredible.<br>[19:58] >> You know why I think you were confused<br>[20:00] is because I'm just looking at can I use<br>[20:02] for this and allow discreet was only I<br>[20:05] think it landed in Safari in September<br>[20:08] 2024. So kind of near the end of the<br>[20:10] year. However, the specifically display<br>[20:13] none to display block transition. That<br>[20:16] is not in Firefox yet<br>[20:19] >> still.<br>[20:19] >> So yeah, but it's not the end of the<br>[20:22] world because you know what happens when<br>[20:23] you don't support it? it just doesn't<br>[20:26] transition, you know, like it's not<br>[20:27] going to break your app. It's simply<br>[20:29] just going to not fade in. It will just<br>[20:31] show up immediately.<br>[20:32] >> So, that makes me wonder why they would<br>[20:34] add allow discreet to Firefox and not<br>[20:38] >> I I think it was allowed discreet was<br>[20:41] added in 2014 to Chrome.<br>[20:44] >> Yeah.<br>[20:44] >> Right. But then the the ability to<br>[20:47] transition it<br>[20:49] >> Yeah. a transition behavior<br>[20:52] was only added recently in all these<br>[20:55] browsers. So,<br>[20:56] >> so that is really surprising. But I do<br>[20:58] love uh APIs like this like view<br>[21:01] transitions when it didn't work. It just<br>[21:04] uh changed the page like normal. But<br>[21:06] then people who are in browsers that<br>[21:08] have full set of features would then be<br>[21:10] able to get that transition. And Firefox<br>[21:13] users, yes, we love progressive<br>[21:15] enhancement. Uh that's always great when<br>[21:18] you have to do it when you can get<br>[21:19] progressive enhancement without having<br>[21:20] to yeah<br>[21:21] >> um just sacrifice or rewrite a massive<br>[21:23] amount of code. So either way you can<br>[21:25] use starting style allow discreet today<br>[21:27] if you want to sacrifice some animations<br>[21:29] on Firefox. Next up I have promise.try.<br>[21:32] This is very simple API method that<br>[21:35] allows you to take synchronous methods<br>[21:38] and use them in a way in which they were<br>[21:40] a promise. So this problem comes about<br>[21:43] where if you're using multiple methods<br>[21:46] that are all promisebased. If your whole<br>[21:48] API is promisebased, it's so beautiful<br>[21:50] because you can you can chain them<br>[21:52] together. You can add a catch on the<br>[21:54] end. You can use promise.all and get all<br>[21:56] the results at once. You can use<br>[21:58] promise.all settled. This is all<br>[22:00] beautiful until there's one API which is<br>[22:03] like synchronous and it doesn't have a<br>[22:05] promise-based API you know like um at<br>[22:08] the very basic like a confirm<br>[22:11] >> you know if a confirm or like um<br>[22:15] fs.right write file sync a lot of the AI<br>[22:18] loves using the synchronous versions of<br>[22:20] the file system any of those APIs if<br>[22:23] they were to throw an error you can't<br>[22:25] use them in the same beautiful chaining<br>[22:28] promise way that I was just talking<br>[22:29] about so now promise try will allow you<br>[22:32] to just wrap a nonpromisebased<br>[22:35] function or method and then it will if<br>[22:38] it throws it will it will catch it in<br>[22:40] the catch if it returns a value it will<br>[22:42] return it in your promiseall settled So<br>[22:45] you can use any API as if it were a<br>[22:48] promise or not. So it's really nice.<br>[22:51] >> Love that. Uh the last one I have for<br>[22:53] you is content visibility. Now content<br>[22:56] visibility is an interesting API and<br>[22:58] it's one of those APIs that when you<br>[23:00] first hear about it, you're like, "Ooh,<br>[23:02] this would be like good to make the<br>[23:04] whole website out of the black box type<br>[23:06] of thing, right?" Um if you you catch<br>[23:10] you make the whole plan out of the black<br>[23:11] box because it's so powerful. Whatever.<br>[23:12] It's so strong. No, but the what this<br>[23:14] API allows you to do is control the<br>[23:16] rendering of elements in a way that uh<br>[23:20] essentially pauses the rendering of an<br>[23:23] item. So it preserves its rendering<br>[23:25] state where if you display none, it has<br>[23:28] to rerender when it comes back and it<br>[23:30] removes it from the DOM. Visibility<br>[23:32] hidden<br>[23:34] keeps it in the DOM but is constantly<br>[23:39] still rendering it. it's just visibility<br>[23:41] hidden where this if you do content<br>[23:44] visibility hidden what it does is it<br>[23:47] doesn't render uh it hides the element<br>[23:50] but it preserves its rendering state so<br>[23:53] that way if you were to toggle it back<br>[23:55] then it's preserved that rendering state<br>[23:57] and then it updates the rendering state<br>[24:00] um after you toggle it back the the way<br>[24:03] that I find this API to be the most<br>[24:05] interesting I will say is with content<br>[24:07] visibility auto and what that does is it<br>[24:10] basically has things hidden when they<br>[24:12] are off screen and that way it does the<br>[24:15] initial load and then it then renders<br>[24:18] the things that are offscreen which is<br>[24:21] really useful if you have sections of<br>[24:24] big things that are rendering offscreen.<br>[24:26] Uh like a lot of times people reach for<br>[24:28] sometimes virtual lists, virtualized<br>[24:30] lists for this type of thing. Uh but<br>[24:32] this might be something that you could<br>[24:34] use if you're having a performance<br>[24:36] impact of rendering because you're<br>[24:37] rendering a lot of big things or a lot<br>[24:40] of things offscreen and uh content<br>[24:42] visibility auto on the things off screen<br>[24:45] will then allow you to delay that. But<br>[24:48] you do have to be careful with it. It<br>[24:49] can cause layout shift. It feels like at<br>[24:52] first glance you're like oo I'll just<br>[24:54] put every single thing that's offscreen<br>[24:56] content visibility auto. But I think you<br>[24:59] want to be more surgical with it. I<br>[25:01] think you want to test with it. I want<br>[25:03] you<br>[25:03] >> I had an issue where I added it to a<br>[25:05] whole bunch of stuff and it started to<br>[25:07] chug or I had it on a website and it was<br>[25:09] faster and then they changed something<br>[25:12] >> and it started getting chuggy and then<br>[25:14] the the way I fixed it was I simply<br>[25:16] removed it which is great like ideally<br>[25:18] the browser will figure out these things<br>[25:20] for you but there are some cases where<br>[25:22] you'll have to you know better and you<br>[25:24] can explicitly step in and apply that.<br>[25:26] It's it's like will change where it's a<br>[25:29] a feature that can help if you know what<br>[25:33] you're doing with it and you test to<br>[25:35] make sure. But just a simply yellow<br>[25:37] applying it to everything is probably<br>[25:39] not the right call. But when it does<br>[25:41] work, like there's like a a use case on<br>[25:43] Facebook. It says Facebook engineers<br>[25:46] observed up to 250 millisecond<br>[25:48] improvement in navigation when uh times<br>[25:51] when going back to previously cached<br>[25:53] views. Being able to like have that<br>[25:56] control in the right circumstance I<br>[25:58] think can help. Uh so whether that is<br>[26:00] content visibility hidden or auto it's a<br>[26:04] cool API to learn.<br>[26:05] >> Uh all right I think that is that it<br>[26:07] >> that's all I have. Peace.<br>[26:13] One of my thumbnail ideas because CSS<br>[26:17] got absolute value was to have CSS<br>[26:20] having abs.<br>[26:24] >> It's ridiculous. That's a great idea. ## Highlights - >> All right, let's get into it. Wes, what do you got for me? >> Yeah, so there is 24 new APIs. We'll link up the the actual list of them. Some of them not interesting at all and some of them are are pretty exciting. So we're going to explain what they are. So first one is same document view transitions. So view transitions in CSS allow you to essentially transition anything, right? Like we're we're used to putting a transition on something. ([View Highlight](https://read.readwise.io/read/01kd3z0nb8fgs6j95qycf2vvm3)) - Tags: ๐Ÿ‘ป ai highlighted - not just when you're changing pages, but when you're clicking a button or adding a class is really cool. And now that's in every single browser. Yeah. You know what I will say? Uh, I use view transitions all the time and I think often times people don't even think about using them when they they could be the easiest solution to do any particular type of animation, especially when you have something that you have in one place. This has a secondary place and you wanted to just tween between ([View Highlight](https://read.readwise.io/read/01kd3z0nbm8k9g9036sa9qn70w)) - Tags: ๐Ÿ‘ป ai highlighted - transitions and these are view transitions for SPAS single page applications um in all browsers you can safely feel like you can use them and I they're they're fantastic. You can do even like I've used them to build all kinds of animations from like a hamburger menu slide out to anything really. And it it is if if you can't do it with CSS, just CSS, yeah, you can reach for view transitions. And that's usually my my way of trying to do things like that. I'm going to pick an easy one right now, which is a small one, which ([View Highlight](https://read.readwise.io/read/01kd3z0nca9mwp7czwja4d5bv4)) - Tags: ๐Ÿ‘ป ai highlighted - to animate uh you can use it to do dialogues or drawers. So, um uh man, it is uh it is a really really cool API that allows you to do just an endless amount of stuff. Like I have essentially a dialogue that acts as if it is a swipe up dialogue or a swipe up drawer uh animation using only CSS. It's incredible. >> You know why I think you were confused ([View Highlight](https://read.readwise.io/read/01kd3z0ng5frpnxnctrt7kznyt)) - Tags: ๐Ÿ‘ป ai highlighted - transitions when it didn't work. It just uh changed the page like normal. But then people who are in browsers that have full set of features would then be able to get that transition. And Firefox users, yes, we love progressive enhancement. Uh that's always great when you have to do it when you can get progressive enhancement without having to yeah >> um just sacrifice or rewrite a massive amount of code. So either way you can use starting style allow discreet today if you want to sacrifice some animations on Firefox. Next up I have promise.try. ([View Highlight](https://read.readwise.io/read/01kd3z0nn3hpx0wt26ygqs5nw2)) - Tags: ๐Ÿ‘ป ai highlighted ## New Highlights added 2026-02-28 at 7:48 PM - >> All right, let's get into it. Wes, what do you got for me? >> Yeah, so there is 24 new APIs. We'll link up the the actual list of them. Some of them not interesting at all and some of them are are pretty exciting. So we're going to explain what they are. So first one is same document view transitions. So view transitions in CSS allow you to essentially transition anything, right? Like we're we're used to putting a transition on something. ([View Highlight](https://read.readwise.io/read/01kd3z0nb8fgs6j95qycf2vvm3)) - Tags: ๐Ÿ‘ป ai highlighted - not just when you're changing pages, but when you're clicking a button or adding a class is really cool. And now that's in every single browser. Yeah. You know what I will say? Uh, I use view transitions all the time and I think often times people don't even think about using them when they they could be the easiest solution to do any particular type of animation, especially when you have something that you have in one place. This has a secondary place and you wanted to just tween between ([View Highlight](https://read.readwise.io/read/01kd3z0nbm8k9g9036sa9qn70w)) - Tags: ๐Ÿ‘ป ai highlighted - transitions and these are view transitions for SPAS single page applications um in all browsers you can safely feel like you can use them and I they're they're fantastic. You can do even like I've used them to build all kinds of animations from like a hamburger menu slide out to anything really. And it it is if if you can't do it with CSS, just CSS, yeah, you can reach for view transitions. And that's usually my my way of trying to do things like that. I'm going to pick an easy one right now, which is a small one, which ([View Highlight](https://read.readwise.io/read/01kd3z0nca9mwp7czwja4d5bv4)) - Tags: ๐Ÿ‘ป ai highlighted - to animate uh you can use it to do dialogues or drawers. So, um uh man, it is uh it is a really really cool API that allows you to do just an endless amount of stuff. Like I have essentially a dialogue that acts as if it is a swipe up dialogue or a swipe up drawer uh animation using only CSS. It's incredible. >> You know why I think you were confused ([View Highlight](https://read.readwise.io/read/01kd3z0ng5frpnxnctrt7kznyt)) - Tags: ๐Ÿ‘ป ai highlighted - transitions when it didn't work. It just uh changed the page like normal. But then people who are in browsers that have full set of features would then be able to get that transition. And Firefox users, yes, we love progressive enhancement. Uh that's always great when you have to do it when you can get progressive enhancement without having to yeah >> um just sacrifice or rewrite a massive amount of code. So either way you can use starting style allow discreet today if you want to sacrifice some animations on Firefox. Next up I have promise.try. ([View Highlight](https://read.readwise.io/read/01kd3z0nn3hpx0wt26ygqs5nw2)) - Tags: ๐Ÿ‘ป ai highlighted