CSS shorthand properties (like background, border, and font) expand to set all related longhand properties and reset any unspecified subproperties to their initial values, which can override existing styles and create unexpected interactions during the cascade; this means shorthands are best used when you want a clean slate to start over, while longhand properties are preferable when making subtle adjustments to existing styles, and when using CSS variables in shorthands, invalid values can cause all properties to reset to initial values even if fallbacks are defined.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Surprising Effects of CSS ShorthandsAdded:
Welcome to Winging It, a show by Oddird about web design development and our approach to solving problems. On today's show, Miriam and I are going to discuss the surprising effects of CSS shortounds shortorthhands.
Miriam, how are you? Oh my goodness.
Let's start over. Too bad this is live.
Miriam, how are you doing today?
>> Oh, I'm all right. How are you, Stacy?
>> I think I need a drink of water or something. Yeah, >> I did. Before we before we get started, >> I was going to mention that uh my name is Stacy Kermo. No P's in my name.
Miriam, how many P's do you have in your name?
>> I think probably at least five.
>> I think Google might say five. I don't know. I saw the what I'm talking about is I think from Jake Archold. I don't know if something started before that one, but >> um if you type how many P's are in your name in the Google search bar, it might give you a surprising amount of P's in your name >> and different answers every time, which is also fun.
>> That is fun. We'll have to try that with uh the kids later to see how many P's they have in their hand.
>> All right, but we're not here for that today. We are here for um shorthands, CSS short hands which are both amazing and powerful and let's get into uh their surprising effects shall we?
>> Yeah. Um should I go straight in? So this is some material uh that is sort of a side quest that came out of working on my course. Um the course is I think we'll have early bird seats available soon hopefully very soon.
>> Not bird early Oddbird.
Um, yeah, and this is sort of bonus material. Um, and we thought might make an interesting uh little stream. But, um, I'll share my screen here.
>> So, a sneak peek of of the types of material, maybe some of the teaching style that you might see in the course when everyone pre-orders it, hopefully.
Yeah.
>> All right. Should I add to stage? Are we ready?
>> Yeah, I think we're ready to go.
>> Excellent.
>> I should maybe have a clicker here. Um, just so I'm not looking for my keyboard as I go. So, uh, most CSS properties, uh, like say background color for example, will apply directly to any element on the page, right? And what do we mean by that? So if we look at this um if we set the background to hot pink for example, uh we can look here and we'll see we can go to computed styles and we'll see all of the properties that are applied to the page.
>> Can you command plus on that? Uh >> oh, I can >> inspector please. Good call.
>> Thank you.
>> Right.
So, all of the browsers have some way of looking at the computed styles and some way of showing uh all of them or just the ones that are set explicitly. Um either way, either way, when we look here for background, we'll see a lot of different background properties, but none of them are just the background property, right? Uh but we are setting background.
I might not be on the right. Uh I want to be on the canvas there.
And then I'm setting the background to hot pink. Uh great. So we can find here that there is a background property, but there is no background computed style because it's not actually the property of an element. um it's something a little bit different. It's a shorthand.
Um so there is a background property in CSS. It's a shorthand and it's often simpler. The shorthands are some simpler way of setting a lot of long hands at once. So any value that we set on the background shorthand uh hopping for example will be removed and replace and expand to define this whole range of background related properties. Not just the deep pink background color that we were explicit about but actually every single background property that is part of the shorthand. So we're setting the background image, the background size, the background position and so on just by setting background to deep pink. So that's the first thing to understand about background or about um shorthands is that they will always expand to set all of the subproperties that are involved in that shortorthhand. any property that we didn't explicitly set will be reset to some initial value whether or not we said anything about it. So sometimes shorthands will even reset properties that we can't set directly in the shortorthhand. So uh for example here if we say border thin solid teal we are setting the border top width the border top style the border top color. We're also setting border image which is reset only. Um there's no way to set the border image in the shortorthhand but it does get reset by the shorthand. Uh border image itself is also a shortorthhand. So then that expands out even more and we get the border image source, the border image slice, the border image width and so on and so on. So when we set border we are setting I haven't counted here but I'm just going to guess it's like in the 50s uh or something uh because it's every side and every aspect of every border all of that every time we use the border shortorthhand there's a lot going on behind shorthands so that might feel risky uh if we're just trying to make like little adjustments and we don't want to override everything, but it's also extremely useful if we do want a fresh start. Um, shorthands are there to sort of start over and wipe away everything else and uh ensure that if this property applies uh it applies cleanly, it applies as a fresh start.
it's not combined with something else that was already there.
So, this sort of works to determine uh what level we should use. I'm going to go to uh this demo here.
So, uh when we're thinking do I want to use the long hand or the shortand we have to think about well what is it that we're trying to do? Am I trying to make slight changes to what's already there?
Then I might want to be very specific about like border block end style. Um, and just change that.
Uh, and I'm only changing one thing. I'm not changing the width. I'm not changing the color. I'm not changing any of the other sides. I'm being very explicit about what I'm trying to do. Um, border block end.
Uh, this is the same thing but a little bit more shorthanded. So, border block end, I'm setting the style and the width and the image. Everything to do with the border block end.
Um, or I could go a little farther and set it on all sides.
Or I could go the whole way and start over, which is going to override also the color, also the um I'm only setting a style, but it'll override the the color and the uh width as well. Right? So, when I'm creating a new border, I want to think, well, am I trying to create something new from scratch or am I trying to adjust what's already there? And that's the basics for how I choose one or the other.
Uh when I'm wondering if I should shorthand or longhand, all of this happens before the cascade.
So this is in the first step of the value resolution process, what we call filtering, which is where we're finding all of the relevant stuff to apply because in CSS, every pro every element has all these properties, right? Um, and all that we're doing is uh setting those properties. Uh, it's almost like a config file. Like every element has its config and we get to come in and set the config and then um the browser has to figure out how to apply that config, how to render a page based on the config that gets set. And so these first three steps filtering, cascading and defaulting ensure that we have a full a complete config file for every property on every element. And then the final three steps are the browser figuring out how do we apply that resolving formatting and constraining applying our configuration. Um filtering is sort of finding everything that's relevant. Like we go out and we say okay for this element what styles have been defined, what's out there? what applies. Um, and this is the stage at which we're looking at like a button and we're looking at its background and we have to go find its background image and its background image position and it's etc etc etc. So um that happens uh with normal properties we then cascade. So we've done the filtering, then we're cascading. With normal properties, we'll only get a conflict in the cascade when we've set the same property multiple times. Um, so in this case, the display is set twice. So there will be a conflict there and uh display flex will win because it comes later.
They're the same specificity, they're the same origin, they're the same scope, etc., etc. Uh, but the cascade will find us a winner.
Um, but the color property here is only set once. No competition. It wins the cascade. But shorthand properties are a little bit different. They don't just conflict with each other um with declarations of the same shortorthhand. We don't only have a conflict here between border and border.
We have a conflict with all three after they're expanded. So first they expand in place. So each of those long hands becomes all of the short other way around each of those short hands becomes all of the long hands setting all of the relevant subpropies and then each of those will cascade.
So uh now we find a winner between our border top styles and our border top widths and our border top colors. Right?
So, uh, that means the short hand here, um, will override any previous long hands. It's going to it's going to win the C cascade across the board even though it's a separate property in CSS. Is that making sense?
>> It makes sense. And it is so much more like potentially dangerous than I've ever really thought shorthands to be or also beneficial if you are trying to override everything and reset it.
>> Right. Yeah. That's why I think about it that way instead of like what's going to I don't know just give me the result I want or something uh in the immediate.
It's sort of like how do these things how are they going to interact? Am I trying to start over? Do I want this to apply as a new thing or uh or not apply as a new thing?
So it can be useful sometimes to combine them because sometimes we want to start over and then make little adjustments.
Um so this can be really helpful sometime but we have to be careful about the order that we do it. So we can say okay uh I can't use a border image. I can't set border image in the shorthand, but I can use the shorthand to get myself the basics that I'm looking for, that thick solid border.
So, I'll just get that in place.
Uh, even though there's no border image yet. And maybe I could even say let's pick one of the colors so that we have uh that works on its own. But then we're going to add a border image to make it a little bit more interesting. So it can be useful to start over and then make adjustments after the fact. We just when we do that need to be careful that the adjustments come after the starting over, right? Cuz that shorthand gives us a clean slate.
Um so I find this a really useful pattern and I use it quite a bit. uh always just making sure that the shortand comes first, gives me a clean slate and then I can uh add to it from there.
So part of how I'm thinking about that um is how should this cascade with other borders? If there's borders set in other places in the stylesheet, do I want to merge with them in some subtle way? Do I want to set one little bit of something and combine with other properties? So, or other styles. So, for example, if I'm styling a button and there might be different button states out there, but I'm setting the default. Um, do I want this to combine with other states or do I want it to or like I'm setting one of the I'm setting uh hover but there's also a active or uh Arya toggled. What is that uh word I'm looking Arya pressed? That's the one. There's going to be multiple of these states. Do I want the state that I'm working on to override other states or do I want it to combine with other states? If I want to override other states um in the cascade or like either mine will win or lose um then I'll use a short hand. But if I want sort of a more subtle interaction, a more subtle combination of states, then I'll use a long hand for that. So, that's how I'm thinking about it when uh I want to use when I'm deciding to use a short hand or a long hand. Am I starting over or am I adjusting details? It's not just about which one feels more readable to me in the moment. Um there are good reasons to sometimes set background to a color and there are good reasons to other times set background color. Um but those have sort of a different purpose to them even if they are sort of on the surface level doing the same thing.
So um just quickly showing that here uh we've got a gradient um this background exists.
If I wanted to uh just change the color and leave the gradient in place, um I can do that. That's sort of like now these two selectors have this subtle interaction which can be really powerful. That's a powerful option in CSS. But if I don't want that subtle interaction and I just want one of these to win or the other one to win um now because they both set the shortand whichever one wins the cascade I get that entire background.
Right?
So I think both of those are really useful things to be able to do. um but not something that we always think about and something that could easily surprise us uh if we're not thinking about it. Um because once again, and this is sort of the basis of the whole course is that how we write a style in CSS can have a big impact on the outcome. Um we're always having to think about uh these sort of multiple interactions because CSS is trying to solve a difficult problem. Um, and there's a reason we have six different ways to center a div because center is not a simple thing.
It's like lots of different ideas um that can result in centering and lots of different um ways that centering should behave in different situations.
And so we need that level of complexity and nuance to be able to communicate to the browser what it is that we're trying to do.
That's what I've got for the initial uh bit here. Um happy to chat more about it.
>> Yeah, there um there's certain shorthands I almost never use. Like I don't think I ever use font shorthand.
Do you find yourself um not not necessarily on purpose, but like which shorthands I border? Yes, all the time.
>> Right. Um, I think people probably use text decoration shorthand a lot.
>> Background. Background is a common one I would use.
>> Background, right? Are there ones you almost always use?
>> Um, >> border background. It's It's making me think that uh it would make sense for me to use the font shortorthhand more, but I would mainly only use it on sort of like roots of a thing, >> right?
>> Um yeah, maybe sometimes there's a nested root in some way, but >> in all of our setup.
>> Yeah, exactly.
>> But it would make sense to do there.
Except I'm not even sure if that's true because there's a just with font there's a lot of nuances that I want to be inheriting or keeping around or um I'm not often starting over with my typography. I'm often making little adjustments. I also find it like shortands are a little harder to search sometimes if you're looking like specifically for font weight or whatnot.
Like it's it's not as easily findable.
Um, so I tend to use long hands quite often, probably more than I need to. Um, but it is nice that I know exactly what it's doing. Um, even though I didn't really even think about all these other like border image properties that I am completely overlooking when I just said the border. Yeah, it was part of what led me to to want to make this little sort of aside bonus material um was that I've seen a lot of people pushing to like never use short hands or avoid shorthands because they have uh all these other impacts and be or because uh long hands are more clear and searchable. Um, and it felt to me like that didn't match my mental model of what these are actually for. And so I wanted to to capture that and look at like, well, wait, is there some other reason that we should be considering whether the long or the short hand is right here. So like some seem way more obvious like margin and padding. It's just because it kind of does the same thing just with different sides. But then you have some like transition which is a whole list of properties that might have some effect that you don't maybe think about overwriting especially if it's coming from somewhere else in some other part that you didn't write or from a library and then all of a sudden you're like why isn't that working anymore?
>> Well and I think that one is slightly different because transition is a list but I don't think it's a shorthand.
>> Oh it is >> but there's no longhand versions of it.
Right. You just have sort of like background image like background image uh you or no not background image but like um uh oh it is background image.
You can set a list of background images and they stack on top of each other but you can't set each one individually. So there's no longhand >> but you can do transition property transition behavior. Are these not all?
>> Oh yeah. Yeah.
>> And like delay and >> direction or whatever. I don't know all those. Each one of those has a list of its own.
>> Yeah, that's right.
>> Mhm.
>> Yeah, you're right.
>> Okay. I was like, "Oh my gosh, I don't know CSS and I'm not a CSS show."
>> No. Yeah. No, there's just a little bit of a confusion there with like list properties are slightly different from shortorthhands. But that one is both.
>> Yes.
All right. What about We got a question here which I think uh I I don't know if you want to dive into or not. uh from May >> May.
>> Yes. Um I'm gonna just read this. This might be too specific, but I'm wondering if you can shed some light on how shorthands interact with CSS variable values. As far as I understand, shorthands normally get parsed into long hands before cascading. But this isn't possible with CSS variables because they can be substituted with anything after the cascade.
Yeah. Um, it looks like there's a good article. I wish I had included this.
>> Can I add it to the stage?
>> Yeah, go for it.
>> Okay.
>> Um, maybe I'll go back and and add this uh because I think it's a good point. Um, uh, this is an article by Manuel Matusvich.
Uh, >> yours looks way different than mine.
What is your browser doing to this site?
>> Uh, I didn't go to the link you shared.
>> Oh, you're on the other. Oh, okay.
Gotcha.
>> CSS tricks have reposted this article.
>> Oh, it just quoted tweet. Yes.
>> Yes. Good point.
>> So, I clicked through to the original article here. Um but yeah, and part of the reason that I didn't dive into um variables here is because I'm sort of dealing with them separately because they've got a lot of interesting behaviors with a lot of the different steps of that value resolution process filtering and cascading and so on. Um but this is a really good uh what happens is so we talked about certain things happen at the filtering step and at the cascading step and so on. The problem is that variables don't swap in until late in the process. So at the point where variables have been swapped into place um I think that's uh right before Let's see. It's filtering, cascading, defaulting, and then I think it's at the resol right before the resolving stage that variables would get swapped in. Um, and at that point, uh, the cascades already happened. So, we have this problem where if we put a variable in a shorthand, it has no way to know which long hands are being defined when we get to the cascade. So it can't expand early. It can't cascade with the other uh properties the way we would expect.
Um so it has a little bit of a special behavior.
Um so if we've got an invalid here's what I think. I haven't read this article in a while, but what I would expect to happen because we have this invalid at computed value time behavior for custom properties, which means we get there at the end, we swap in the value of the variable and we find out it was invalid all along. We were supposed to filter it out earlier. Earlier, we filtered out anything that was obviously invalid. So, if we set the color to Stacy, and Stacy isn't a color. It is a great color.
>> It's a great non-color, >> but we set the we set the color to Stacy. Um, normally the browser would throw that out before the cascade and just say that's not a color that we recognize. Um, we don't need to pay attention to it, so we'll we'll pick a different color in the cascade as the winner. Um, but if we use the variable Stacy and we don't know what's inside of it and it turns out to be 2.5 m uh, and not a color at all, then we've already finished the cascade. It's won the cascade. The cas the cascade says that the color should be d-stacy and that's 2.5 m and that's meaningless.
And so we get this invalid at computed value time behavior which is this late resolving variable behavior where suddenly we override everything uh with initial values for just absolutely everything.
So Manuel's point is that uh if we do that and we get this invalid behavior in a shortorthhand, we're going to override and get the initial values uh on uh every single property. I think that's the idea here. Um and I think it's it's a it's a good risk to understand. I would say maybe there's still reasons to think of it in terms of well if we're if we're trying to start over um maybe it's the right behavior but I don't know it it would maybe take some testing. We could live code and play with it. Um but >> what are we waiting for? Let's do it.
>> What are we waiting for?
>> Yeah, let's wing it.
>> Just let's wing it. Okay. Pen. Oh, not that.
I can't type. pen new.
One of my most used links.
Uh, okay. So, let's give ourselves a button.
>> You should uh add that to your stream deck. I think I have uh one I think is one of my buttons.
>> That's good. Let's just get um instead of zooming in on the page, I'll do a uh zoom two.
>> Cool.
>> On HTML.
>> Excellent.
>> Make that a little bigger.
All right.
>> You know your audience.
>> Yes.
All right. So, what do I need here to test this? I need a variable.
Um, the variable is going to be a color maybe. So, we can say um background is our variable.
and see that that's working. All right.
And then I suppose we could say like maybe there's a background image that's a linear gradient.
Um from with like uh let's just use some not fully opaque background and then to a transparent.
Okay, so we've got this gradient that's a little muddy. I I could I could use some help with the design here. I don't uh feel great about it, but okay. So now what happens if this becomes invalid?
>> Kept the image.
>> Kept the image.
>> Background defaults to initial >> or whatever.
>> Oh yeah. It's not button.
>> Yeah. Are there other >> But is button does button have a a background as a user agent?
style. So they have like that gray that super light gray. So appearance none maybe or would that work >> or uh Yeah.
>> Yeah. So is it getting that gray? I guess it is right.
Uh >> I don't know if that >> I can't tell because of our gradient.
And because the >> default >> you want to you want to see it without the gradient.
>> Yeah, maybe. And then maybe inspect to see like what's the background like what's the computed value of the background?
Computed value of the background.
Background color transparent.
>> Transparent. Yep.
>> So, >> okay.
>> Uh we are um that is resetting the background and it's also actually setting our um we're we're getting initial values that are overriding the browser styles.
Yes.
>> Because we have an invalid variable.
But I don't know, am I missing part of what this is about? Um uh and then I think at the end he mentioned if you have the fall back there, you're safe.
>> Yeah. Okay.
>> But uh but is that true? Like what if if well yeah it will go to the if the if the variable is declared and it's invalid will go back to the back or the fallback or does it try to use 30 mms as the color because there is a variable there.
>> Oh right. Yeah. No, it will it will not use our fallback here if the variable is invalid. It will only use that fallback if the variable's >> we don't have an variable. Right. Yeah.
>> Yeah.
So uh yeah that fallback will help you with one case but not with both cases and like let's say and uh for learning purposes if you had background above it it's not going to use that because that was already passed by on that filtering. So, it's going to say, okay, we're going to go with the cascade. The later value wins there, even though the later value is using the custom property that isn't either defined or that isn't valid. So, that won't work if you're trying to create a fallback or a double fallback um for this.
>> Yeah.
I I uh Yeah, I like I like our colors here.
>> I I saw that. That's an interesting color.
>> Uh yeah, I I sort of I I get the point of this. There's some interesting interactions here with um with variables.
Uh I'm a little less convinced that there's a simple rule that we can take away from this. Um it seems like we should we should understand how these interactions work and then it's going to influence the decisions that we make. Um but yeah, I also think about like if I'm defining a variable sort of right there or something. Um what are the chances it's undefined?
Uh they're low.
>> Yeah.
>> Um so the fallback maybe isn't a solution. I don't know. Like there's certain things that are just bugs in our code that we have to watch for and fix.
Um like we can't we can't plan for every bug uh besides looking for bugs and fixing them.
Yeah, I would I would definitely not think of not using custom properties here, whether it's longhand or shorthand. I would just think if something's not how you expect it to be, there's probably some investigation to do. Um >> I'm trying to think. But the point here would be that uh well what I mean >> define your variables >> like >> name your variables so you know what to what value >> type to use. Yeah. But I mean like um if I had some I don't or background position that's just called background position right uh right I had some other property there uh and that's maybe not the one I mean it should really be this one.
>> Yeah. something you could easily test and see.
>> Yeah, I'm I'm overwriting it either way.
So, I'm not sure that there's like the important thing to understand here is that background overrides background image. Um, and if background isn't valid, it's still going to override background image. I don't know.
Um, I guess the question would be like if this also has some other um part to it. Not sure to live code that right away, but Yeah.
So, use shorthands later on in your projects if you're confident that you don't want to override something.
>> Yeah. Or if I'm if I'm creating I mean I think of it mainly with like I'm making states that are going to interact, right? Like sometimes I'm setting I'm defining this class and I'm defining this class and sometimes both of them are going to apply, right?
Then I'm deciding when both classes apply, do I want one winner or do I want some interaction?
Um, if I want one winner, then I can use the shorthand to ensure that whichever one wins it takes over completely. Um, but if I want them to interact subtly, then I should use longhands to make sure that each one is leaving open the possibility of other styles um getting getting added to the mix.
And if you just don't want to write as much as a longhand would be, put those CSS variables when you define that shorthand like define each thing as a separate CSS custom property. And so later on if you only well yeah if you're going to change the color you could just say instead of saying like border top color um you could just do dash dash whatever your properly named CSS variable is and have a shorter way to write that depending on how you name your variables. Those could be very long.
So maybe that's not a winner. Now, for the people who care about like CSS length and long hands take up more space, like that's really not a good argument for for this, right? I mean, we have things that can compress everything and >> yeah, >> it'll be minimal.
>> CSS there there are ways if you try to use CSS to like crash a browser or something, you can figure it out. Um, >> I've never seen it, but I mean that's that would be a lot of CSS.
>> Yeah. Well, yeah, especially if you're trying to do it on the just through force of lines of code. I remember there used to be some limit in like Internet Explorer 6 or something, right? Um, but I don't know like yeah, CSS is not likely to be where you're causing your biggest issues. Um, >> we have another question here. Tobias asks, "Does >> shortand resolved?"
>> Go ahead, read it out loud for the people listening.
>> Yeah. Does a short hand resolve to long hands directly or do some shorthands resolve to longer shorthands first? Um, yeah, they well there's in some ways no difference between those. Um so they do like the way it's written in the spec uh is the way it's written in the spec is that uh they resolve to longer shorthands but then those resolve and all of that resolving happens before anything else happens. So practically there's no difference between those two things, right? Uh either way we get to all of the longhands before we move on to the cascade. Um but in the spec you'll find like yeah uh background or or border uh sets the border image and then border image sets a bunch of other things. So um there's a sort of shorthand way of writing what longh hands are going to be impacted but it's going to get to all the longhands before it goes to the cascade.
Cool. I think I could sum this up. What what you often say with poetic CSS is like write what you mean.
>> If you don't necessarily need to reset everything, write border image as opposed to border.
But if you think you need the clean start and then then do the shorthand, but otherwise CSS very declarative, expressive, write what you mean.
>> Write what you mean. There's there's different ways to do different things so that we can be more expressive.
>> Great.
>> That's it.
>> Okay. Is there anything else we should uh discuss here or can we head out a bit early today? I think that's two in a row.
>> Great.
>> Let us know if you all like a shorter winging it. I still would like to try to condense this into 25 minutes. Um we'll see. We'll see. We just have to not talk about it after we after we show the thing, you know.
>> Yeah.
>> No conversations. No winging it. None of the winging it in the winging it.
>> Oh, yeah. I guess if we cut it off before the demo, that was probably around there. I think the demo is important. Okay. I'm undecided on that.
But, um, so we gave you a little teeny tiny taste of some of the content you might see in the poetic CSS video course. Miriam, is there anything more we want to say about that? I know we announced pre-sales, pre early bird.
>> Yeah, we're gonna have early bird sales soon. Um, the course is really trying to answer questions about uh how do we organize our CSS? How do we understand the code that we're writing? Um even in a world where some people are writing their code with uh generative LLMs whatever um the part that it can't do is understanding how CSS works and is organized. Um and it tends to write more code than you want. So understanding where that can cause problems and how to remove code and how to debug and what is CSS actually doing. Um so we're not learning every lang or every word in the dictionary. We're learning how sentences are structured. Um organizing conventions, naming conventions, and how they come out of how the language works.
So well said.
So well said. and it won't give you the right amount of peas. So, visit oddbird.netwingit for any show not show notes today. There is a course URL, right? There's like >> odd here it is in the comments. I don't know how to put it on the screen.
>> That's your job.
>> Well, let's just uh do that.
>> There you go.
>> We'll put that in the show notes as well. odd.netcoursespoetic-css.
netcourses/poetic-css not. Yeah, dash. Okay. Uh, let us know what you want to hear on the next winging it coming up next month. Uh, if you'd like to support us, please like and subscribe. And if you want more from OddBird, be sure to check out our newsletter at oddbird.net news. Thank you, Miriam, for joining me today. Thank you.
>> Uh remember, best practice is a conversation, so let's keep talking.
Bye.
See you.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 views•2026-05-28
How agent o11y differs from traditional o11y — Phil Hetzel, Braintrust
aiDotEngineer
450 views•2026-05-28
Re: 🗣️📍theprophedu📍2026 GST 103 CLASS (E-EXAM REVISION)
theprophedu
636 views•2026-06-04
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanation💯✅
LearnwithSahera
1K views•2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 views•2026-05-29
Search Algorithms Explained in 60 Seconds! 🤖💨
samarthtuliofficial
218 views•2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 views•2026-05-30
Instagram accounts got PWNed
EricParker
13K views•2026-06-03











