Thank you for this invitation, and it's my pleasure to present this awesome research work. That's the result of a lovely collaboration with Diego Aranya, Matthias Alhannerson, Anka Nikolescu, myself, Elena Panin, and Sofia Jakubov. And as you said, this is can't mean extendability for threshold ring signatures, which is accepted for publication in PKC Public Geographic Conference this year. So to get everybody on stage, let's, on the same let's see what digital signatures are just a quick recap. This is a cryptographic primitives that usually involves four algorithms. We have a setup algorithm that outputs, for instance, the group we are working with or some generic settings, public parameters. We have a key generation algorithm that will output appear a secret signing key and a public sign algorithm that's used together with the secret key and a message to produce a signature and a verification algorithm verify that takes instead the designer's public key that for throughout this presentation, I will represent like this colorful circle and checks that the signature is actually correct for the given message and the given public key. In 2001, Rivens Chamiir and Tauman have proposed the notion of ring signature. So the algorithm is exact in the same except that the verification and procedure instead of taking one single public key as input, it will take a ring, a group of public keys. It's called a ring just for historical reason that the first construction was constructed around the shape that looks like a ring. But essentially, I will have like a set of N potential signer. And what the signature is telling me is proving that one of the signer has signed this message, but and produced a signature, but it doesn't tell me which of those signers doing so. And this is relevant for instance in a Bitcoin application where let's say I want to sign my transactions, but I don't want you to know that every evening I'm signing my transaction from my work computer because then you know that I'm at work and not at home and maybe you can run some of that. And it's also interesting in whistleblowing scenarios where maybe some some employee of an institution wants to say voice out whatever wrongdoings, but they just want to show that they belong to a certain group, to a certain department, they don't want necessarily to expose their identity. Nice. A couple of years later in actually the next year in 2002 crypto, there has been the first scheme of threshold ring signature proposed in the literature. Again, the algorithms are exactly the same, except that now instead of having one potential signer out of N public keys, we have T people that sign out of N possible signers. And this is again very important in for instance with Sir Blowing or if I want to have some threshold cryptography even in Bitcoin, maybe I want to have two factor authentication, two signal two devices that sign the same transaction, but I don't want people to know exactly which combination of two devices I'm using. So this is all cool and amazing, but there are a couple of short timings. So first of all, existing scheme require interaction among signers when producing this threshold signatures, or they can signatures produced by independent signers can be combined together. However, when upon when the signing algorithm is run, all signers need to use the same ring. So essentially, there needs to be a sort of interaction on signer to agree on which ring we are using. In the case of Bitcoin, if it's me signing, it's not that hard. I know which is my ring of public keys, but in the case, for instance, about me to case, I might be just hiding myself within my group, but there will be people from other groups that want to join the same cause. And that's not possible with existing scheme. So we are not particularly happy with these two limitations. And that's essentially what we address in this work. So in this work, we propose extendable threshold ring signature schemes. They have the same algorithms as the threshold ring signature scheme. Plus a couple of twists. We have an extend procedure, which enables anybody to take a signature scheme, t out of n, sorry, a signature t out of n, and expand it to a t out of n prime when n prime is bigger than n. So I can add some potential signers. And then I can also join to get t plus one. So I can increase the threshold by joining a signature on a ring where my public appears. Good. And this is supposed to work in settings such as count me in, me too, I endorse this. What we achieve is that we have a dynamic ring growth and the interaction and no interaction among signers is needed. So we remove those two limitations that are there before. So let's go to a bit more formal with our contribution. First of all, we present this notion of extendability, which essentially is to enlarge the set of tensile signer of a given signature scheme. We do so not just for threshold ring signatures, but also for ring signatures and for same message linkable ring signatures. Then we provide a formal syntax and a security model for each of these primitives with this extendability feature on. And finally, we provide constructions and implementation. We have more or less as many constructions as authors and some implementations. We have construction of extendable ring signatures from signature of knowledge. We have the same message linkable extendable ring signatures constructed in a black box way, given an extendable ring signature, the one that we just constructed on the previous step, and the signature of knowledge again. And then we have extendable threshold ring signature, which is the coolest thing that can be constructed in a black box way from what we just created, the same message linkable extendable ring signature, or a construction that is based on the dialogue. So what I will show you in this presentation is basically the setting for the threshold ring signatures and the construction that we have from the dialogue assumption and signature of knowledge. Let's get started. So threshold ring signatures, they have been there for a while. You see some important references at the bottom of the slides. But in general, how do they work? We have this setup algorithm that takes as input the security parameter and outputs the public parameters. We have a key generator algorithm that takes the public parameters and output a public key and a secret key. Throughout this presentation, the public is going to be always this circle, and the secret key is going to be the circle with a ring around it. The signing algorithm takes an input, a message, a ring of public keys, and one secret key, and produces a signature. And the verification algorithm takes as input a threshold with essentially discounting how many signing key have been used to produce the signature, a message, a signature, and a ring and gives us your one. If there is at least a secret key that have been used to produce the signatures and the secret key belong to the ring, are given in the verification algorithm. Good. So this is what exists already. Yeah, this is the correctness. So at least the secret key needs to have been used to produce the signature S for the message M. Let's go one step further and talk about what is extendable threshold ring signature. So that's what we do in this paper. In this paper, we add the extend algorithm, which will take an input, a message, a signature, an initial ring R1, and a second ring R2, and will produce a new signature S prime. And the idea is that this new signature S prime should verify for the same threshold T as S. But for a larger ring, essentially, you can think of it as like augmenting the anonymity set with more public keys. And we also want to have a join algorithm that takes a message, a signature, and a ring of public keys and a secret key and produces a new signature. And of course, in this case, we want that the threshold of the signature S prime output by the join algorithm is growing by one. So there is one more person endorsing. And what we want to make sure is that the person endorsing is not already somebody that has been used to produce S. So for instance, the trivial idea of like, oh, let me glue together signatures, ring signatures and put them together wouldn't work unless we can prove that the same ring signature has not been produced by the signer, by the same signer. In the same time, they can produce three signatures. And we need to be able somehow to make sure that we are not reusing one person. How do this extend and join interactive? I will try to visualize this in a very intuitive way. And this is formalized in the concept of ladders that you can find in the paper for more details. So imagine that we start with this one out of four signers. So we have four public keys of different colors and one with a ring, which is the one that has been used for signing. If I want to join, now the threshold is going to be two out of four signers. Then maybe I can extend to add more public keys. Here we add like two purple shades, and I get two out of six signers. And then maybe somebody in the purple with the purple secret key joins, and then we end up with three out of six signers. Nice. But I can reach the same three out of six also with a different path. Let's say that I start again from a one out of four signature, but this time it's been the blue person signing. And then maybe I can extend this, getting a one out of five signers signature. Then I can extend it again, getting a one out of six. Then I can join with the purple, and then I can join again with the orange. So we will have two notions of anonymity. The basic one is saying that essentially I cannot distinguish the top or the bottom ones. So threshold signatures that have the same threshold and the same number of users. I cannot distinguish if it's been signed by the red, the orange, and the purple person, or by the blue, the orange, and the purple person. And the stronger version of anonymity instead tells me that I cannot even distinguish which path, which ladder. Have I extended using the left path or have I done all of this extension and joining as the red path. So the security model, let's jump before, before anonymity, we need to have forjability for a digital signature. This is not surprising as a notion that's going to be our adversary here as an owl with bad hacking tools in their hand. They can interact with key generation oracle, they can corrupt keys, and they can interact with a signing oracle. The goal of the adversary is to output a tuple of a threshold, a message, a signature, and a ring of public keys. And he wins the existential forjability game if this tuple output by the adversary verifies. So the verification algorithm returns one. And if the number of corrupted signers in the ring chosen by the adversary is less than t, because of course if the adversary has corrupted more than t signers, then it can of course forge because it has t secret keys. Essentially for the same reason, but a bit more technicality here, we cannot let the adversary interact with a signing oracle for this specific message chosen for the forjability more than t times, because otherwise it could recycle those things. And for anonymity, I already anticipated a little bit with the previous slide on the two ladders, but essentially we give the adversary access to the same oracles as before.  And the challenger will reply with a signature. And for anonymity, we have that adversary should be able to correctly guess which of the two ladders has been executed by the challenger. And we have two notions of anonymity, and it depends if you allow for ladders to grow even with different lengths, or if you just allow one extension or just a simple you cannot distinguish who is the signer in a given set. That's to give the intuition. Now I think we are ready to see the construction, which is actually the cool thing. As I said before, we have several construction constructions, but I will focus here on the one that I find it more interesting, because it has some nuance in it. The others are I think more straightforward and more like composable with existing notions that I strongly encourage you to check the paper because they are really nice and elegant. But let's look at the more interesting one. So how can we construct this extendable threshold ring signature from the discrete log assumption, and we will also need some public encryption. Let's pick finite field ZP, group G, and an element H in G. These are going to be my public parameters. Then let's also pick three points on ZP. And for these three points, let's pick other three points in G that I have generated using the trapdoor. So I will first sample let's say TD1 and then generate G to the TD1 and call this Y1. Then what I will do, I will do something very similar to Shamir's secret sharing. So I will interpolate the exponent and create a polynomial that is matching these values on the specific axis point. Of course, the polynomial doesn't look like this in reality because we are on discrete fields, but give me an artistic break and let me draw it like it is right now. So now we have a polynomial of degree three of which I know the evaluation on four points. For three of these points, I know trapdoors. So I know the discrete logs and H is a public value. So I don't know the discrete log of that. Now, how can I sign? In order to sign, the idea is like I will sample another point X hat in ZP and I will evaluate the polynomial on this point Y hat. Note that the signer doesn't know the discrete log of Y hat because I've just evaluated a polynomial on a random point. I have not created it with the trapdoor as done before. So my signing procedure is going to be I will produce a signature of knowledge of the following statement that is either I know a witness for the public key, which is indeed the case because I am the signer, I know the secrecy, or I know a witness for this Y hat, which in this case I don't know. So the intuition is in order to produce this proof, the signer is forced to use your secrecy. And then I will create an element in a set P, the set of proofs, which collects this random point X hat that I've chosen from ZP, the evaluation of the polynomial Y hat, my public key, the proof that I just created, and a ciphertext. And the ciphertext is simply going to be an encryption of junk, because it doesn't matter for here, but it will matter when we do extensions. The signature is going to be the set P of proofs. And then another set in this case of three trapdoor points, which are the element in X that I created and the evaluation of the polynomials, on which I know the trapdoors. Now, when I want to extend, I will create again another proof using my signature of knowledge of the statement, which is very similar to the previous one. I'm basically saying I either know the public key pk prime on which I'm extending, or I know a trapdoor for a point in the polynomial. Now, you've seen that when I'm signing, I'm actually creating these trapdoors, this Y1, Y2, Y3, I'm generating them as G to the trapdoor 1, trapdoor 2, trapdoor 3. So I actually know the trapdoors. So when I'm signing, I will start and hide myself into the initial ring. And I will produce this pi, this signature of knowledge, using the trapdoors and not using the public key. And here is where the ciphertext C comes into play. Here I will use the, I will encrypt using the pretending signer encryption public key. I will encrypt the trapdoor for them, so that should they want to join, they can remove themselves, add someone else, and do a proper proof of knowledge. The signature now that we obtained from the extension is going to be a bunch of proof of PJs, obtained as I showed you, and then all the trapdoors that I have not used to do this extension. So this is an extent. How are we going to join? So when I join, I will pick sample another element in ZP, evaluate the polynomial again, and I get my Y hat crime, of which again, I'm behaving almost as a signer. I don't know this is a discrete log. Therefore, I will produce a signature of knowledge of the witness that I either know the secret key of my public key or I know the discrete log of Y prime, which is not the case. And then I will encrypt. So the joint procedure is very similar to the sign in procedure. And then again, what I will output is this signature where I am collecting a set of proofs and a set of trapdoors for the unused points in the polynomial. This is just an intuition. Of course, you can check all of the details. You find them in the paper. This is the very squeezed in algorithm representation of the construction. I don't expect you to read it up here, but I strongly encourage you to have a look, because it's a really cool ideas to obtain this extendability. I just want to spend a couple of words on our implementations. So we do have implementation of two of the schemes that we have. And one of this is actually the extendable thrashing ring signature from the discrete log construction that I've just shown you. So in this graph, you can see in orange, the high monster line is the signature size, which is not too bad, I would say. It's anywhere between 100 bytes and 1 megabyte, so totally doable for the size of rings that go from 1 to 2 people to 2 to 11, so more than 2000. Sorry, 200. No, 2000. 2 to 11. Good. And the running times are fairly short. In particular, we have like 100 milliseconds, so 0.1 second for rings of size of about 250 public keys. And for other construction, we also achieve a few milliseconds for rings of size less than 10. And for rings of size of 248 members, we can create a signature in 0.24 seconds, which is definitely in the realm of practicality. Good. So that was the presentation. I thank you for your attention and very much welcome questions.


Once you've got the Eclipse Shadow Simulator up and open and again, you may need to go watch the tutorial about allowing flash in order to get that to work. It's going to look something like this. I want to give you just a brief introduction for how you're going to use this interactive. And in this particular interactive, you're allowed to move the Earth, which is shown as the big blue ball, and the Moon, which is shown as the smaller grey ball. This is your sun over here. And these are your shadows of the two objects. In one part, you're asked to move them closer or further and describe what's happening. And then you're also to describe how you're going to move things around and the instructions are in the lab. Remember, the Moon orbits around the Earth. And when you do that, it's going to ask you to create the alignment you would need in order to get a solar eclipse and a lunar eclipse. And then you're going to take a screenshot of this and attach it to your lab. If you have any questions about how to use the simulation or whether or not your screenshot is working properly, here's what I'm asking for. Go ahead and send me a message and send me the image if you've got one and I can let you know if it's looking like that's what you're supposed to be doing. Again, if you have any questions, contact me.


I reclaim my time. I didn't ask you a question So what I'd like to talk about is your recommendations to the CDC as not a medical doctor Not a biological mother and and really not a teacher either you had no business Advising the CDC what the medical guidelines were for school closures? Because now we have a nation of school children who have suffered because of it The problem is is people like you need to admit that you're just a political activist Not a lady. I'm not a mother and not a medical doctor point of order mr. Chairman I just want to make just make note that The the decorum of the attacks on the witness were unacceptable that the gentle lady from Georgia just did and so it'd be nice If we didn't attack the witnesses particularly whether and what when making a decision about whether or not she's a mother You are a mother. Thank you for for for being a great parent. Thank you Your point of order is recognized mr. Garcia Last week Marjorie Taylor Greene got in trouble for insulting a witness at a committee hearing and this week She chose to do the exact same thing again She just never learns now the woman who she was berating there was Randy Weingart in the president of the second largest teachers union in America and Marjorie Taylor Greene was lambasting her because she dared to recommend virtual learning in an effort to save lives During a global pandemic that ended up killing more than a million Americans But we'll find out why Marjorie Taylor Greene specifically thinks that virtual learning is so bad in a moment here But first I just I have to address this claim that step parents are somehow not real parents Not only is Randy Weingarten a parent by marriage, but she also adopted her wife's children But because she's not a biological mother She's not a real parent according to Marjorie Taylor Greene and thus she has absolutely no business making recommendations about children That should be left up to the real parents according to Marjorie Taylor Greene and to make this insinuation is just so incredibly Insulting because she's speaking about millions of Americans on both sides of the political aisle According to Pew Research 42% of Americans have a step relative that can be a step sibling a step parent or a step child and Furthermore, this isn't a woke liberal phenomenon because as this Twitter user points out Supreme Court Justice Amy Coney Barrett is also an adoptive parent, but according to Marjorie Taylor Greene That doesn't make her a real mother. It's just messed up I mean families come in all shapes and sizes so to insult millions of families for no apparent reason I mean, it's just so very on brand for Marjorie Taylor Greene But there's a specific reason why Marjorie Taylor Greene was so mad at Randy Weingarten's support for distance learning during the pandemic and she claims that The reason why there are so many trans people trans kids specifically now is because of distance learning I'm not joking. She actually suggested here that distance learning during a pandemic Led to a mass transing of the kids. Let's listen anxiety Depression all kinds of problems happen to kids and then ironically here's something that was shocking to me And I'll bring this up to you You know what else happened? While kids were forced to stay home and you approve of this the diagnosis of youths with gender dysphoria surged This is literally 2020 but yet this is 2021 and this is a problem. This is a major problem and the direct effect of school closures can be seen here These are diagnosis diagnosis of gender dysphoria And you can see it sharply increased after 20 20 and 21 it went up the rates went up so kids were forced to stay home into so-called virtual learning where they were spending a lot of time on Social media and all of a sudden we see a direct result of this and this is a this is a major problem But the other problem is is you had no business Advising the CDC what the medical guidelines were for school closures because now we have a nation of school children Who have suffered because of it? I don't know about you, but I am thoroughly convinced now There's a lot to say about that first of all Marjorie Taylor Greene is one of these imbeciles who also screeches about the rise in trans people do specifically to social contagion meaning it's a fad and kids see that other kids are trans and They want to be trans too to be part of the cool kids club but claiming that there's a rise in gender dysphoria diagnosis Because of school closures is kind of antithetical to that claim. Is it not? so I mean is it a fad that kids are latching on to when they see their friends do it or is the lack of Socialization causing them to transition because they're bored and they're not with their friends, so they're thinking hmm. I think I'll transition tomorrow. I mean The answer is actually very simple as more people come out and being trans becomes more accepted and normalized in American society More people who are already trans and non-binary will come out because between the 1910s and 1940s There was a sharp increase in left-handed people after it was no longer a social taboo to use your left hand but eventually That line leveled out and the true number of actual lefties was revealed and that same exact phenomenon is happening right now I'll be it with LGBTQ plus people But I don't want to suggest that Marjorie Taylor Greene can be persuaded by empiricism or data or peer-reviewed studies Because that's impossible She is a deeply unserious political hack and the remaining working brain cells that she has left are being used to Constantly remind her to breathe so she doesn't forget to and spontaneously suffocate. So of course She's not capable of learning or absorbing any new information like normal people, but as she continues to insult Millions of Americans for absolutely no reason people who would otherwise agree with her because There are Republican families who also have step Relatives too, you know, she's just doing herself a disservice.


A social political group, the Thursday group TTG has stated that unless Nigeria reforms its local government system, no meaningful development will take place in the country. While addressing newsmen in a bell kuta, the state capital, the groups co-convener kola o nodikwe, lamented that the local government council areas, socio-economic and political growth, as entrenched in the 1999 constitution that amended, has deteriorated from bad to worse in the country. O nodikwe insisted that the local government is the only solid foundation and bedrock to any meaningful developmental growth either in physical and urban development or human capital resource growth. Only solid foundation has bedrock to any meaningful development growth either in physical and urban development as or urban development or human capital resource growth. Two, the local government council areas, social economy and political growth, as entrenched in the 1999 constitution, as amended, have deteriorated from bad to worse. However, he suggested that the best form of government for the country is a parliamentary system. Only solid foundation has bedrock to any meaningful development growth either in physical and urban development as or urban development or urban capital resource growth. Two, the local government council areas, social economy and political growth, as entrenched in the 1999 constitution, as amended, have deteriorated from bad. To hit the notification button so you get notified about fresh news updates.


Stuff donuts yeah, I was never a big fan of the jelly donuts growing up. There's like this I don't know what it's called growing up.  This doesn't do it justice But I think it was this there's a lot of corners.  They're fighting out He's elbow elbow We have so we have so I go for it set how the baby. Oh my god One lower one lower one upper.  Yeah, you also break their breach. I'll tap my back. I'm sorry.


We talk a lot about semantic HTML. But what about semantic CSS? They're coming up with good class names in CSS is always a bit of a struggle. It's maybe one of the more infuriating things, which is why we have so many different naming conventions and different approaches to authoring CSS, especially when it comes to organization and dealing with selectors. So we can attempt to give things meaning with names. But of course, the class name doesn't have any real meaning. It's easy to get them wrong. And well, of course, things like this would work just as well if you were to take inspiration from my son and use a class like Big Butt. Now that's probably not the best idea in the world. And people might be a little bit confused if they're working on that code base and come along the your Big Butt class there. But of course, if that class was in your HTML, that selector would work perfectly fine. But if somebody were to randomly come across it, they'd really have no idea what you're actually wanting to do with it. And that's very different from what we have with HTML where we have things like our nav or header or footer or aside, we have figures, we have all sorts of things that have actual meaning to them. And even sometimes getting those right or using them in the right way can has a little bit of wiggle room. But for the most part, it really makes our lives a lot easier. Now the semantics of those elements help convey actual meaning to the browser and assistive technologies as well. But it also makes it easy for developers to be a bit more consistent and know how things are being used. So with all of that, how can we take that idea of semantics from HTML and use them in CSS without having to go down the route of only selecting things like our nav or header or footer with element selectors. So to figure that out, we're going to jump into this example that I have up right now. And this was heavily inspired by an article that Ben Myers recently put out. So I will be linking to that in the description, I strongly recommend giving it a read. And I'll also have some other good links down in the description related to this topic that helped me put this video together. So the idea here is, this is quite a common thing that you might see we have a current page like this one. So we have, you know, a regular navigation set up with our semantic HTML. But then we have this current page here. And then of course, it highlights the page run. So we just, you know, when you go through all your different pages, you know, if I'm on my about page, I'm just moving that down to there, then I'm moving that down to there. And maybe you're using some sort of dynamic system to be able to do this with however you're authoring, you know, depends on your tech stack and all of that. But we're highlighting the current page. And if we come back to the styles here, I've just done this where I'm my nav link that has a current page, I've given it a background color, we're not doing anything fancy here. There's other ways of doing this, but a nice simple setup, we have a hover color for the regular one. And then we have this one that has the darker color. And I've boosted specificity on it to make sure that it's working. So if I hover on top of that one, we don't get the color changing. Nothing too fancy. But the one problem here is we come back to here, we've used our nav here, we've used a list here, we're using semantic elements, but we're not actually using anything semantic to link into we're not we're not giving any extra context to what the current page is, even though there is a way to do that. And the way to do that is an area current equals page. And by doing that, we're helping assistive technologies get the same hint that this is doing visually on the page right here. So right away, that's a good start. But now I have this here, and then I have the current page here. And that means if I go in that, you know, I want to do my ability page now. Well, that means I need to move this thing here over down to here. And then I also need to remove this from that link here. And I didn't move that down to the link here. And there's a lot that could potentially go wrong in having to, you know, it's extra maintenance for nothing. It's kind of annoying on that front. And this is just some random class that I've assigned to here. This could have been big, but like we mentioned before, and I can have it do the exact same thing, whereas this actually carries meaning to it. So if this actually carries meaning to it, and this is actually saying this is the current page that we're on right now, well, I could hook into that with CSS. So instead of doing nav link current page like this, I could take this, let's turn this into an attribute selector by putting some square brackets around it. Let's delete what's in there and put in my area current is equal to page and hit save on that. And now you can see that it's still working. And if we come back to here and we delete this current page from here and hit save, everything is still working perfectly fine. And what we've done here is actually create a semantic CSS selector. We're using the semantics that we had in our HTML without, you know, you could select a nav a ul things like that, but we're linking into another level of semantics. And we're bringing that in here to help style our page. And that means that things have to be done properly from an accessibility standpoint, to be able to style things. So we're sort of enforcing accessibility by doing this as well. Because now if I go to my about page, it's broken, because my about page had it the old way. And I did this the old fashioned way with just some regular old HTML on every page. So of course, then this would have to be removed and we do an area current is equal to page right here. And now that's fixed. And we have this working across our pages. And to be able to do something like this requires literally the exact same amount of work as it would have required before. The only difference is it's a few extra characters, but the advantage is we're bringing in the accessibility component of it here, and we're just hooking into that with our style sheet and how we're doing our CSS right here to look at more examples of types of things you can do with this one I've looked at many times before is using things like area expanded on buttons for styling things like a navigation, whether it's opened or closed. So if we take a look at this when you're doing it, I have my button that's right here, we have an area expanded a false on there. And when it opens, that gets switched over to true. So the JavaScript is switching that back and forth between the two of them. But that means I can hook in and I can style things from the menu being open and what the menu looks like to how my button is created and everything using those selectors right there. Another example could be down here if you have a tabs system like this where we can switch between different tabs, I could have everything controlled through my area roles here that I'm using for my tab lists and things like this that we should be setting up if we're doing things this way. So my tab list is being set up through the role. I'm not coming up with a class and having the role on there. Each tab is being styled through that my tab panel area selected is all coming together here. So when it's selected, I'm changing the style of it as I'm coming through on those. And if you're new to things like this and you're not sure about them, anytime you're looking something up, it's very easy to do a nice quick search. For example, let's say you need to make us an on off switch for something, you can just do one for a 11 y switch. And you can see I was looking that up recently, which is why it's top of mind. And you'll see lots of different things that come up on it. And you can do some further reading on it, where a lot of the time they give you code examples of what things are going to look like, including things like roles that you might need to include. So we have the role of switch that are coming on a few of these. You'll see there's no area anything, but we do have the role of switch. There's other things that do come up with these types of elements when we're trying to make interactive elements as accessible as possible. And that helps us hook into those with our CSS, and it helps us make our CSS semantic as well. And often the general rule of area is don't use area if you don't have to.  But as soon as you are getting into more complex things, there are usually things that you need to take into account. And it is really advantageous because it makes it a lot easier to hook into because an area selected true is nice. And you know, you're not stuck thinking, do I need a tab, tab, opened or something? Or is it opened? Or do I give this active? Like what name do I give it? You don't have the whole worrying about how many you name things goes out the window. It's already handled for us. We're good to go. And if you enjoyed this video and it gave you a few thoughts, I'd really recommend checking out the articles that you can see in the description that go into a lot more detail and a few of the different patterns that you're seeing here. And if you're looking for more video content, I have looked at another accessibility issue that is I see coming up all the time, which is the misuse of heading levels in putting together websites and apps. So if you're curious about that, that video is right here for your viewing pleasure. And with that, I would really like to thank my enablers of awesome, Jan, Johnny, Michael, Patrick, Simon and Tim, as well as all my other patrons for their monthly support. And of course, until next time, don't forget to make your court on the internet, just a little bit more awesome.


Hello, my friend and friends. I've made a few videos recently looking at a whole bunch of the different CSS units and I even made a flowchart to help people pick what CSS unit they should be using in any given situation because we have 54 different length units. Yes, 54 of them. That is a lot of units. And with all of them being very front of mind for me, especially after spending so much time on that flowchart, I figured why not rank them. So here we are. Let's dive in and rank the CSS units. You can see here we're going to, you know how these things work, right? I'm sure you've seen them, but A to F, the same way a school system works. And if anything is better than an A, then it gets an S for being above the rest. I guess it's the top ones you can get. And as you can see there, let's zoom out a little bit and zoom back in. We're going to start with our absolute units, which are those ones that are right there, which are mostly for print. But we do have pixels that are in there as well. And so we will get around to those in a second. But I guess we should look at the print ones first. And just as we dive into this actually, I just want to say a really big thank you to Ali Fahim for suggesting I even do this when I shared the early version of my flowchart on Twitter or X or whatever we want to call it. He suggested I do this. So thank you very much, Ali. I think this is going to be fun. And, you know, let me know what I get wrong in the comments as usual with all of these. And I'm just going to select all of these ones because they're print. I almost need like an on categorized for print units.  And if you're not doing print related stuff, they go here. So I'm going to put them as F because I don't really do print stuff. I know people ask me for print stuff.  But yeah, the only thing I will say here is I'm going to move the Q unit up to here because Q is quirky and different. And it's a good trivia question. So it gets bonus marks. The Q is like, you know, it's the only capital one. It's nobody knows it exists. And if you just see if you don't know, it's like a really, really, really, really small number. I forget what it's like one tenth of a millimeter or something ridiculous. I don't know exactly, but it's super, super small. Yeah, so we'll give it bonus points for being kind of quirky and different. I know a few people have told me, actually, they have used this when they need that little difference on something. So they've used the Q in those situations. And actually, we're getting the pixels now, it's based on like the pixel ratios and everything that the device has to sort of figure it out. But it's 196th of an inch, I'm pretty sure is a CSS pixel. It's not a screen pixel. And I'm giving it a C. Maybe, I don't know, it's almost like it's a C plus, let's say. And the reason I want to give it a C plus type of thing is this because they're super handy, they work well for when we need them, you need a border, you're going to use a pixel, you need a box shadow, I guess pixels are okay. You need for certain stuff, there's no problem with them. But people overuse them. They're used for font sizes all the time, which can cause problems from an accessibility point of view. And sometimes people just over rely on pixels when there's better units out there. So it loses marks for that. So I'm going to sort of give it a C plus. I'm happy we have them.  And yeah, that's what I think. I know some of you would definitely probably give it an S tier and others might even give it an F. So maybe I'm a little middle of the road, but we'll find some that we can cause some other arguments on. And again, these print ones, they're not really Fs, right? They're just putting them there because I'm not doing print related stuff. So, but yeah, let's move on to the relative units. We have a lot of relative units, some of these you've probably never seen and some of these you definitely know. So we're going to start, I guess we'll start with percentages because everybody knows percentages. And I'm going to give it a B. I think percentages do not get an A just because I love percentages. They're awesome. They can do lots of really cool stuff. You know, it just works well. But then they cause some problems too, right? They're awkward if you want to use them as a height. They're, if you do it as a padding or margin top and bottom, it's just really wonky and probably doesn't do what you want it to do. They're just weird stuff that happens with percentages. When they work and they do what you want them to, they're awesome. So I'm super happy we have them. So they're going to go here. Even I'm just thinking like we have grid also, right? If you're using percentages within grid, you probably don't want you because that's where overflows happen because it doesn't take into account gaps and all of that. So I'm going to stick with the B just because when they do what you want them to do and they're super handy and I like having them. So I'm happy they're there. M, do M's get an A or a B? I'm going to give M's a B because once again, they're super handy. I'm super happy we have them. But they just leave that possibility for some chaos, right? Whereas if you have like, if you do it on purpose and you do it well, where you can actually like have all of your font sizes set with M's, I've seen some people that really love doing that. But one little mistakes and work and it just caused chaos to happen where you get the cascading thing of M's being based on M's being based on M's, and then your font size is six times bigger than you thought it would be. So just because of that, I'm going to give it a B. I'm so torn because I use them for so many things. Maybe it's a B plus just because I like it a little bit more than percent. Do I like it more than percentages? I'm not sure. I'm going to stick with B. We have a lot of units to get through. I can't overthink this. X is going to also get a B. Okay, we're going to X, L, H, I see. I'm trying to remember what I see is. We'll leave I see here for a second. It might be the one that's for vertical text. I might have to even double check that cap is going to come over here. These ones, this goes over here. Oh man. Okay. So this is part of that can go here. Okay. So X, L, H, and cap, and then we have Rex, Rick, and Ick. I should have said the RCH goes here. I was looking for the relative ones. Oh, this one. We have the X, the L, H, and the cap, and these ones are all, so this is like the cap height, the X height, the line height. I'm leaning towards B because they're cool, but they have very limited use cases.  So it matches the height of your line height. They're very niche, but when you need them, and the browser supports I think X has good browser support and these two, it's not there yet, but I'm not going to talk about browser support. I just want to talk about the usefulness of these units. Man, do I give them Bs? Just because like they do what you expect them to do, and I don't see anybody misusing them, I am going to give them a B. Then that leaves me with rex, this one, R, L, H, and the R cap. I'm giving these a C because I don't see when I'd want to use them. I'm sure there's times. Do I even give them a D? So these are all the same thing, but it's based on the root rather than being based on the element that you're declaring.  I could see being something being useful. I think I've done something like that. The LH1, it's not as often, but like these are all things where I want it based on the font size of my element that I'm putting it on. I don't know why I'd want the root ones, and I'm sure if you have a good use case for these, leave them in the comments. I haven't figured them out. I also haven't used them, to be honest with you. I've never used any of these three. I'm going to give them D. I just don't see when I would use them. And maybe there's better use cases. And if you have one, and then it could get graduated up to a C, I just I have no idea when I'd actually want to use one of them. They don't cause problems. They would do what you want them to do. I just don't see the practicality of them. But maybe I'm just not thinking inside the box enough. A small little interruption here, because as I was editing this, I said, Kevin, what were you thinking, putting the relative line height there? It's actually incredibly useful. And I probably should have given it an A. I'll put a link to a resource that Adam Argyle shared down in the description. But the RLH, or the root line height, is really good at setting consistent rhythm within a website. So if you're someone who's done typography and other stuff like that, and you've always been driven a little bit nuts by the lack of consistent rhythm setting on a website that you definitely could easily do with a print document, the root line height might be the solution that you've been looking for. There's other two. I'm still not sure exactly on when I would use them. But the RLH on revision would get an A very easily, just because it solves something that's been really hard to do in CSS until now. But let's go back to the list now. CH is going to be my first A. And I'm very tempted to give it an S. Is CH going to be an S here? Or an A? We're going to put it here, and we're going to revise at the very end and just make some last-minute adjustments if we need to. But I'll put CH there. I'm very tempted. Okay, so CH, if you don't know, is the character width sort of. If you come from a print world, it's actually what an M roughly would be. I think it's slightly different because it's based on the number zero rather than the width of a capital letter M. And it's weird that we have M's in CSS that are different from M's in typography. But anyway, CH is roughly the width of the zero character. And why this is useful is, again, you wouldn't really misuse this, but setting a max width on things like a paragraph or a heading and using CH is just Chef's kiss. In typography, what max line lengths CH makes it really easy to do that. And then we have the root CH, which again, I don't know why I'd want a root CH because I want it to be based on that unit or like where I'm declaring it. I don't want my headings to be based on 16 pixels, which is probably what my root is, or well, I guess it's a little different because it's CH. But like, for my headings, why would I care what the CH is on my root? Like, why would I use that? So once again, these ones probably use cases, but I don't know what they are. So I didn't want to get this wrong because I've never used it. The IC unit is indeed for, I'm just going to lose it there. Here it is equal to the advanced measure of this glyph. This water ideograph found in the font and used to render. So again, this is dealing with vertical. And I guess it's a little bit like CH equal to the advanced measure. I'm not sure what advanced measure is. Yeah, it's like CH, but this way instead. Perfect. So just I wouldn't use it. But I'm going to group it with the CH because of that. And I'm going to group this with this RCH because of that. And I don't really have any other information on it. So I'm guessing it would be useful if you're working with vertical fonts. I don't know. Do I give it a B just because I don't know. I'll leave it here. Yeah. Again, sort of falls into like, I don't use, maybe we'll do it like on this side, because I don't use it. And we'll throw it over here, just because I don't have enough information. And now we have the REM and REM. REM would definitely be a tier, right? REMs we use for so much stuff. They're super useful. It's the one time having it based on a base thing makes sense. So you have all of your font sizes based on the root. You could always change the font size of your root. Just don't use pixels to do that. But you could change the font size of your root. And then all of your fonts can adapt to that if that's the way you want to handle responsive typography. There's other reasons REM is good, but it just gives us a nice consistent base to work from without the side effects of pixels, basically. And so they're perfect for a lot of use cases and so much stuff. So definitely a tier. I use REMs everywhere. I have no complaints about them. I guess being base 16, just because browsers tend to be that as a default can be a little bit wonky and people like to complain about that. But I don't care. It's getting an A for me. Next up is, oh my goodness, I don't have enough room in my chart. Our viewport units, which is half of our units, I think. My chart's going to die. But we're going to sort of group these off a little bit. And you might be surprised here because I'm not a huge fan of viewport units. I'm giving these two Fs.  It causes overflow issues. I see people put 100 viewport width on their body all the time. It causes overflow on browsers that have fixed scrollbars that Chrome on Windows, which is lots of people, it does nothing because your viewports are already the width you want it to be or your body. People use it everywhere. They shouldn't use it. And it just this is like beginner mistake is using viewport units where you don't want them to. They probably don't do it. You should. People use them on font sizes and it makes their fonts unresponsive and causes or makes them responsive, but makes them inaccessible because you can't zoom in and out. So it doesn't work. And then viewport height, like slightly better, but it's still like an F. It can be handy as like a max height, I guess. Again, viewport units can have the right thing, but they just cause too many problems. And everybody likes complaining about viewport height on mobile. It doesn't do what you're hoping it will. So I'm giving it an F. I don't care. They go there. VI and VB are the same thing, but they'll get these just they'll get like F pluses just because they're the same. So viewport inline and viewport block. So it's like the logical property version of them. So just because they're the logical property version will give them like a plus on top for being logical. Which isn't how it works. But V min and V max, I'm going to give like a C minus. They're sort of awkward to use, but when you get them to work right, they're cool in a way, right? They're kind of funky. They're kind of weird. They're kind of quirky. But they sort of they can be handy. So yeah, I mean, I'm going to go with like a low C. I don't know. They have some of the trade offs here. You're not going to use a V min and V max the same way you probably would use those. Go with the C just because they sort of yeah, whatever. That's where they're going. Then we have the next batch, small viewport, large viewport, dynamic viewport, large viewport. I'm going to put down here just because as far as I'm concerned, it's the same as VW. So I don't know the difference. Well, generally they work exactly the same. I know this is the viewport. This tends to always be the same thing as that though. Maybe there's some edge cases where there is a difference between the two. But I don't know. Small viewport width gets bonus points. I know small viewport width. I don't know. What am I talking about all of these? I'm going to overlap because we're going to run out of room. The VWs of these don't change anything. Right. As far as I know, the scroll bars not incorporated into the dynamic or the small. So it doesn't change anything with scroll bars. And I don't know any devices that have the UI elements vertically. So if there's ever use cases for those, I don't know what they are. Small. Yeah. So LVH is going to come here. I was thinking with the VH before when I was saying that it's the same. VH and LVH as far as I know always function the same way. So I'm going to group them together. Again, maybe there's something different. DVH gets a D for trying hard. That's usually how that works, isn't it? You get a D because you tried, but it's not good enough. Just because it gives you that jumping content. And then you have to repaint the page because your area grew. And if it was a nice smooth transition, I'd give it more points. But you scroll, you let go, it jumps. It's annoying. And SVH will give a C just because it's sort of what you want. It's more practical than the regular viewport height. It fixes a lot of the problems. It doesn't take into account the keyboard and stuff, but at least we have it. So it tried hard and it's a little bit better than the DVH. So it gets a C. Then it's just more viewport units. They never end. I guess like here, we're just going to small inline. Inline is left to right. That's the same as width. So that gets grouped here. I don't care that they're logical. It's again, small viewport inline, large viewport inline, dynamic viewport inline. I don't think there is any ever difference. So they're all going there, logical or not. There's still fs, SVB, small viewport. Yeah, you can go here and like, I guess, like a slightly above because it's the logical property version of it. This gets grouped with that one. And then the dynamic one can go over here slightly above. We'll do that. There we go. So it's sort of like a better D, but not quite a D plus. Then we have small viewport min.  I've never used any of these versions of them, but it's sort of like the V min, the V max, but just more confusing, right? So I know it's sort of cheating, but we're going to group these and I believe the D one on top for both just so it takes up less room on our graph here. Dynamic, whatever, I guess they also get grouped into this because I have my V min and V max here. I bet you the difference is so small, but I guess if you used a hundred V max or min, and it was the viewport, it's better if you're using the S one, I don't know, whatever. I can't overthink all of those. So I'm just going to throw them in there just because they sort of get grouped in with this. That's how I see it. And what I'm actually going to do is let's just, we're going to group all of this sort of together in one big mass of V min, V maxes, including everything else because there's too many of them. And then it says, there's my V min, V max, everything, whatever. Maybe if I play with it more, I'll find use cases where I want to use those instead of the regular ones. I'm not going to overthink it right now because if not, this video is going to get too long. And then finally, we get down to our last group of units, which is our container units, which are new browser supports, not the best, but that's okay because I said, I'm not going to worry about browser support for this video. So container units are amazing. And what I'm going to do is you're getting S tier because container query inline is amazing. So basically it's sort of like a viewport unit, but it actually serves purpose. I think because we're basing it on instead of the viewport, we're basing it on the container. And for font sizes and other stuff, as long as you're using it within a clamp, I'm cool with it. Again, do I give a viewport unit a D? Because I use them with, I'm bumping viewport units to a D. They cause so many, and that means VI comes with it and gets like the slightly better version. Because I use it within clamps a lot for responsive typography, I'm bumping it up. It causes so many headaches. There's so many people I help that just use viewport units like crazy. It still gets a bad mark, but I'm bumping it up for being useful for typography, which is also why this gets S tier, because with typography within a clamp, you have one font size. It doesn't matter where you're using it. It's just going to fit. It's wonderful. If you don't know about them, I'll put a video in the link because I love them. So that goes there. That's my inline. So I mean, that's sort of the same as this. We'll group them together. We'll say it's an inline, so it gets higher up. Continue query height is going to get AC. And the reason I'm giving it a C instead of the A is, first of all, I don't know how often I would use it. Heights are always just problematic with CSS. I'm giving it a D actually. We're running out of room. I'll just give it a D like all the way off to the edge here. The reason I'm giving it a D and make my graphic is because heights are problematic in general with CSS. So obviously we're very based on that container queries. You're often not on your container. You're often not going to want to have it as defined with the height. You're going to be doing a container type inline size and not size because size makes it hard to work with. And so just because this relies on you having, I'm docking at points for us having to have a defined container in the height for this defunction, because I find 100% there's use cases for this. And every now and then it'd be a little bit like these guys where you're going to have a perfect use case. You're going to be so happy about it. But there's a limitation to using it that you do not get with the inline ones. So because of that, it gets docked a whole bunch of points, and it's just less useful. You wouldn't have your font sizes defined with container query stuff, right? So yeah. And if you're going, well, with a vertical text, well, then you're using container query inline because your inline access is changing anyway. So there you go. So because of that, that means container query, we have container, whoa, whoa, whoa, okay. I didn't even know it. I just grabbed them all. I made this a little while ago before recording. We'll go with the ones I know. So this is blocks is going to get grouped with that because it's basically as useless. Again, there'll be times where you want to use those, but they're not as often. Container query M. Oh, this is the new, okay, these are the new ones that just got added. Oh, wait, we have the minimax, the minimax again, I'm actually going to dock these quite a bit, because they would both they're going in D also, because they would require us. I'm going off my, my figment doesn't like where I'm going.  I guess my frame, oh, we're going off my frame. I can make my frame bigger, whatever. I'll share this somewhere when I'm done. But they're going in D. Just because again, the same requirement, they won't really work if you don't have a defined height on your container. And your container has to be inline container or a size container instead of just an inline size. These are the new ones, these were just added are the most recent additions. Haven't used them container query CH. So it's looking at the CH of the container. So, hmm, this, hmm, where would I use these contain so I guess you'd have a define you'd have a container where you're setting up a font size, and then it's going to look at the font size of the container rather than looking at the font size of anything else. And I wonder, I guess that would fall to the viewport if you didn't have one, I'm assuming that could be kind of cool. I'm trying to think why I'd want it. Okay, so it's like REM, but instead of looking at the root, you're looking at a defined container. I think I'm going to give these bees, I could see them, I see all of these sort of falling into the X cap LH world where it's super rare, you're ever going to need it. But when you do, you're so happy they exist. And when you don't, you're never going to misuse it, because definitely some of these can be super useful, but they're getting docked because they're just misused and abused and used incorrectly. Whereas these ones 100% there, I don't think anyone's going to accidentally take a CQLH just guessing. But when you find out that that's what you need in a very specific use case, you're over the moon that it exists. And that's one of the things that I wanted to do by looking at this. Like obviously, same with these, right? Like you need these, you're doing print stuff, like boom, they're S tier all of a sudden. So like, we have a lot of units, you're not going to use most of them. First of all, half of them are viewport units. And then we have a whole bunch of container query units now. So like, you don't have that many units, right? The ones you're probably going to use are percentages, REMs, pixels, Ms, 90% of the time. Throw a few CHs in there and you're happy. I'm moving CH up to S tier. I wasn't sure, but I am. Just because I don't use it for a lot, but it just does what it does so well. It gets bonus points. I like CH. It's my favorite unit, I think. So it has to go up there, even though CQI slash W are sort of fighting against it. I was going to resist it and wanted the container query ones by themselves, but I changed my mind.  Right here is probably most of what every website on the internet has. And those are the only ones you really need most of the time. Sometimes you're going to need these other little ones that come up in useful cases, though. And then other times you're going to need a VH or an SVH could be super useful for the right thing. Do we put SVH and SVB up higher? I think we're going to, now that I'm looking at it, I'm like, why am I giving those C? They don't have the problems of viewport of the regular VH. And they don't cause problems really, right? Like, if you have VH, if you did height in VH and not a min height, I guess you're asking for problems, but I'm going to boost those up to a B. We're again running out of room. We'll create some overlap here just so we can sort of these two live together as well. And these are also similar. Well, they're different, but similar enough. They're like relative container query units. Yeah. So I'm putting a lot in the DNF down here also that you might use in the right situation. So I just want to say, just because I'm saying they're down here, maybe you have the right use case for them, you can still use them. Just be aware of the problems they can cause. And there's not as many decisions as you might think that you have to make along the way here. Right. So like, and again, most of the time you're choosing the same ones, but I also want to know like, what did I get wrong here? What do you completely disagree with? I hopefully didn't put your favorite unit is an F tier, but maybe I did. And let me know why I'm wrong in the comments or why your favorite unit should be an S and I put it as a D or whatever it is. Please let me know. And if you'd like to check out that flowchart thingy that I made, either video where I look at it and the link for that are right here. And of course, with that, I would like to thank my enablers of awesome who are web on demand, Andrew Simon, Tim and Johnny, as well as all of my other patrons to their monthly support. And of course, until next time, don't forget to make your corner of the internet just a little bit more awesome.