Getting started with CSS nesting

Поделиться
HTML-код
  • Опубликовано: 24 авг 2024

Комментарии • 175

  • @Wolfeur
    @Wolfeur Год назад +11

    I've never liked the "hyperclassification" of tags in CSS. It's really bloaty, and I always found that your HTML structure should generally work by itself and that classes should only be used when you can't distinguish between things with normal selectors. If I have a navigation menu, I don't need to classify my and my inside the ; the latter just has a class/id and the rest is just coherent based on this.
    That did lead me however to rely on descendent selectors a lot, and in that regard native nesting is really a god-sent!
    Now give me mixins so I can completely ditch any remnant of styling semantics in my HTML and I'm good.

  • @benjaminmosnier
    @benjaminmosnier Год назад +71

    I can’t wait to ditch Sass in my projects. Nowadays I use it only for nesting (for media queries this is awesome) but this indue a lot of config and rules in IDE. THIS is a really huge for me !

    • @KevinPowell
      @KevinPowell  Год назад +19

      I think a lot of people are in the saem boat as you, but there are a few key differences, namely not being able to do `&__item` or whatever to have it create a class name based on the parent.

    • @ModifiedMusicYT
      @ModifiedMusicYT Год назад +3

      ​@@KevinPowell
      @import "../../style.scss";
      @import "./mixins_.scss";
      .LeftBar__ {
      @include themify($themes) {
      @include LeftBar__;
      &container {
      display: flex;
      flex-direction: column;
      width: 100%;
      padding: 8px;
      in this example of SCSS i have in my project &container is creating the class Leftbar__container.

    • @saoirsethewanderer
      @saoirsethewanderer Год назад +1

      I use it because the frameworks we use also use it. I can adjust the variables for that framework using SCSS as well as things like nesting and media queries. Mixins are great too.

    • @wafflecodes
      @wafflecodes Год назад +1

      @@KevinPowellI agree here. I mean, I’m sure I can adjust just fine, but the power of being able to create the classes to automatically combine with the parent is amazing for BEM at least.

    • @ahmedkhabar
      @ahmedkhabar Год назад +1

      Yeah I'm as well

  • @TheNeonRaven
    @TheNeonRaven Год назад +43

    I personally find nesting when it’s done in moderation a lot easier to read the non-nested css. It’s easier to glance “component” boundaries, etc.

    • @saoirsethewanderer
      @saoirsethewanderer Год назад +8

      Completely agree. I love nesting. I can create a component called Wayfinder and then nest all styles for that wayfinder under it so that I don't have to apply a bunch of class names to my code. To me, the whole concept of tailwind, and other class-based systems, isn't a good use of CSS and adds bloat to the HTML/code page. CSS is supposed to take care of the styling and the code is for code.

    • @mityaboy4639
      @mityaboy4639 Год назад +3

      and the nested groups are in a way cool, because now you can close large sections in the IDE, so “scrolling through” is less of an issue. if you pick your nesting properly, the scroll through could be like scrolling through a class with all closed up functions and you find what you want much faster

    • @saoirsethewanderer
      @saoirsethewanderer Год назад +1

      @@mityaboy4639 completely agree. I love nesting. Makes writing complex systems easier and makes specificity easy to see and understand. It also works great when using a system on top of the code. Something like material or bootstrap are easy to modify with nesting. No need for !important in your css.

    • @SquareballoonCoUk
      @SquareballoonCoUk Год назад +2

      I often end up writing MORE CSS doing it this way because I'm adding selectors to absolutely everything, but it's way more maintainable, easier to read and better for teamworking.

  • @JhoziKay
    @JhoziKay 10 месяцев назад +11

    This is a long-waited feature in CSS for me and its finally here! I am really grateful that a good person like you is there to provide us with contents like this, you really are a blessing to the community.

  • @inariiii
    @inariiii Год назад +2

    the "more painful old way of writing it" you used is still the nesting 😭😂, the actual more painful of way of writing it includes declaring the media query then calling the selector inside of the media query then giving it the styles, thank you very much for this video ❤️✨

  • @dharma391
    @dharma391 Год назад +27

    I love how native CSS is gaining more and more ground on Sass. I'm definitely trying this new feature, thanks Kevin !

    •  Год назад +3

      I tried this feature but native css cannot handle this type of nesting:
      .btn, button {
      &:hover, &:selected {
      ...
      }
      }

    • @TravisHi_YT
      @TravisHi_YT Год назад +1

      Yep, Sass even had to change @import because it's a native CSS feature

    • @myfreedom42
      @myfreedom42 5 месяцев назад

      SASS will be always better ;)

  • @one_smol_duck
    @one_smol_duck Год назад +5

    I may have commented this before, but I'm extremely grateful for your videos. CSS makes so much sense when you explain it. I stumbled into frontend work by accident, so I never took the time to formally learn CSS and have just been brute-forcing my way through stylesheets. But since I've been watching your videos, I'm starting to actually understand why some things work and others don't. It's a great feeling.

  • @amyIsFlexable
    @amyIsFlexable Год назад +3

    Thanks for this, Kevin. You are literally the only RUclipsr whose videos I watch with note-taking materials handy. A random thing I learned from this video is that the people who like BEM sometimes do it because they're trying to keep the specificity down. I don't believe I've ever heard that as a reason before.

  • @nustaniel
    @nustaniel 2 месяца назад

    I think it actually can help quite a bit when you have various declarations that goes alongside a main class declaration. You don't have to look through a list of multiple .class { } rules, but can find and reference the .class { } rule set that contains all the various specific rules you may want for different parts of the class being used in the styling. If I have a @media query that is specific to an element behavior, I can nest it into the .class instead of nesting the class into the @media-query below my .class rules. I really like the ability to organize things like this. I won't always nest things into a main class, as I tend to write CSS in order of appearance in the HTML so I can more quickly locate what specific thing I want and scroll up and down in the CSS, but when I have .class { general rules for this part of the HTML } .class textarea { specific rules for this specific textarea} .class label { specific rules to create a custom tooltip out of the label tag } and so on in example all one after the other, it is nice to be able to nest the rules into the general rule declaration.

  • @mahadevovnl
    @mahadevovnl Год назад +23

    My first impression is that I'll stick with SASS for now :) I only really use it for nesting, and I think it is superior and more transparent. But I'll definitely dive into this.

  • @filippotinnirello
    @filippotinnirello Год назад +6

    8:30 agreed. Just always use the nesting & as a rule, for consistency and clarity too

  • @z3rocodes
    @z3rocodes Год назад +5

    I'm taking your CSS Demystified course, really awesome so far. It's helped to tighten up my CSS skills and increase my confidence. I hope you continue making more courses, I would gladly buy them after seeing the quality of CSS Demystified.

  • @Cipscis
    @Cipscis Год назад +1

    Great overview, thanks Kevin. I really appreciate the gotchas you called out, like with how it uses :is behind the scenes and that can affect specificity in unexpected ways. I also hadn't realised nesting @-rules was coming with nesting, but I think it's immediately become my favourite thing about this new feature as well.

  • @jamesrosemary2932
    @jamesrosemary2932 Год назад

    At last!. Thirty years later, we finally have the most obvious feature for this language.
    I've been waiting for this moment all this time to have CSS nesting!

  • @CZghost
    @CZghost Год назад +1

    This is gamechanging! Until today, you had to use SCSS or similar CSS preprocessors for nesting. But today? It's natively supported. That's incredible!

  • @Gbtx6
    @Gbtx6 Год назад +6

    pretty sad firefox has to play a bit of catch up, but i love we're finally getting far more robust features for CSS. I hope some day we can use loops like we do in js in some way, shape or form.
    I do have to say, you did, as usual, a phenomenal job covering the good the bad and the ugly kevin! One of my fav tech content creators of all time

  • @SebastianZartner
    @SebastianZartner Год назад +2

    As always, very well explained, Kevin! Especially the gotchas regarding native vs. pre-processor nesting are important to know. Though there are two things that I am missing in this video. One is how you can support browsers that don't support nesting and the other is how the DOM model for nested rules works. (I know, this channel is mainly about CSS but I believe the DOM APIs are part of that and especially for nesting quite important.)

  • @baka_baca
    @baka_baca Год назад +1

    Literally just yesterday I was pondering how feasible it would be to add sass to a pretty old legacy site but definitely was a little hung up on introducing all the extra complexity to build it.
    So excited that css nesting will be a truly viable option in the future as nesting was one of the primary reasons I wanted sass.

  • @brianpratt6087
    @brianpratt6087 Год назад +1

    You completely read my mind with this one! I was messing around with postcss-preset-env and nested selectors with BEM classes and ran into the & selector difference from sass. It would be nice to have that functionality somehow in base CSS, but it makes sense from w3c's point of view to not complicate the & selector with new functionality.

  • @SebastianZartner
    @SebastianZartner Год назад +1

    Note that the restrictions regarding the ampersand selector got relaxed in the latest version of the specification. That means, you do not need an ampersand in front of an element selector anymore. Firefox 117 already ships with this relaxation in the syntax, Chrome and WebKit still need to change that.

  • @octopus_spirit
    @octopus_spirit Год назад

    The nested media query @ 18:25 is pure gold. thanks Kevin!

  • @NoiseLeGGa
    @NoiseLeGGa Год назад +1

    Sass is so big, extensive and powerful by now, so I realized that unless I really need to build extensive, complex design systems, it's often not even necessary anymore. After the grid and layer now nesting.

  • @niner8275
    @niner8275 Год назад

    This was so overdue ;-) Since about 10 years I was waiting for css nesting to become native :-)

  • @nednosleep
    @nednosleep Год назад

    thank god this will change everything for me

  • @paulporter8363
    @paulporter8363 Год назад

    Thank you Kevin. You are the reason I enjoy CSS.

  • @modernkennnern
    @modernkennnern Год назад

    I've always used the & in SCSS (Whenever I'm forced to use SCSS...). It makes the intention a lot clearer, especially in context of pseudos

  • @shafnisha1171
    @shafnisha1171 Год назад +1

    Love this! Thanks Kevin on updating us!! love ya

  • @EdgyVidyaGeneral
    @EdgyVidyaGeneral Год назад

    I was thinking about this while brushing my teeth last night then boom, you make a video. Thanks boss.

  • @VideoNOLA
    @VideoNOLA Год назад

    Don't think I heard the term "placeholder" used often enough in this explanation, but that's all & is IMHO.

  • @fvgoya
    @fvgoya Год назад

    Nesting is the best thing. Makes things fast to create, easy to ready, etc

  • @kh_trendy
    @kh_trendy Год назад

    I really think Chrome dev tools should resolve the ampersand symbol to the value and just indicate it's a placeholder by coloring it differently.

  • @Yogesh-kr7bo
    @Yogesh-kr7bo Год назад

    oh my god this cannot be perfect I was literaly opeing YT to learn sass for it's nesting

  • @jonathanmarois9009
    @jonathanmarois9009 Год назад +1

    I would imagine pre-processors will offer an option to output nested CSS eventually... sooner rather than later.

  • @filippotinnirello
    @filippotinnirello Год назад +2

    Great video as usual. Wouldn't recommend using it unless safari

  • @AndreGreeff
    @AndreGreeff Год назад +1

    ah, that's beautiful... (: at about 17:42, I suddenly realised this is the final answer to all those requests for "parent selectors". lol.
    must admit, I would probably stick with SCSS, just because.. well.. it's CSS, with extras..

  • @gerogep3666
    @gerogep3666 7 месяцев назад

    This is awesome. I can visually see what's going on.
    That said, my complaint is that CSS has become super complex, and the complexity increases every year.
    It's overwhelming to learn and keep up. I often give up on a project just because it is taking too long.

  • @Linuxdirk
    @Linuxdirk Год назад

    That’s wild! Just Syntactic sugar, sure, but for some people it might be easier do understand.

  • @mimosveta
    @mimosveta Год назад +2

    lol, fall deeply in love with css >

  • @MRMOTOFOTO
    @MRMOTOFOTO Год назад

    This is awesome, can't wait to try it

  • @dimensionalpotential
    @dimensionalpotential Год назад

    @Kevin think you may need to add a correction, style wasn't applying to ul also because you put that bem style string in the id attribute value not class. makes a lot of sense to stick w sass nesting for me since im using that anyway and browser support is not an issue, but appreciate this info!

  • @stevelam1315
    @stevelam1315 Год назад +1

    Why doesn't the browser use the :where selector when it converts combined selectors?

  • @adamjohnantonio
    @adamjohnantonio Год назад

    Not to say that you *should*, but if you do nest deeply then you can use VS Code's "breadcrumb" of all the parent selectors, much like all nested elements in HTML. You can also collapse a rule at any nesting point to clear some space.

  • @favouritejome
    @favouritejome Год назад

    That's for the update sir

  • @Lucsy3012
    @Lucsy3012 Год назад

    Superb overview, thanks for the video! In general I'm looking really forward to this, but some of the gotchas weren't known to me so I would have definitely run into them

  • @beautiful-css
    @beautiful-css Год назад

    25:12 Try VS Code setting - Editor > Sticky Scroll: Enabled.

  • @thought-provoker
    @thought-provoker Год назад

    Will help me quite a bit make my CSS more structured.
    Hmm, have to wait until it has more support, but I'm definitely looking forward to it.
    Agree on the dangers multilevel nesting - but 2-level nesting is definitely gonna be better than .info-panel {} .info-panel a {} .info-panel a:hover {} .info-panel h2 {} 😆

  • @ffpg2003
    @ffpg2003 Год назад

    I personaly only use Scss and BEM when i know that a project get really big, to organise my code and to speed up the process off writing the code.
    I think i will use not all of the fetures when they are out.
    But some off them like the media query or for &:hover

  • @richardhindle1663
    @richardhindle1663 Год назад

    Have a beer. I get all my css news from you. Super useful video. Always found scss a bit dangerous and extra faff. I like to put things that could cause confusion next to each other on the stylesheet. Putting some of a block's rules in the css file and some in scss file is just asking for human error. Looking forward to using nesting.

  • @jfftck
    @jfftck Год назад

    This shows that CSS is getting more like a programming language, and along with that, you need to follow good styling patterns: limit the nesting, property naming, etc… I see linters with these styling rules becoming popular very soon and naming conventions like BEM going away. This also will increase the learning curve at a faster rate.

  • @brain5853
    @brain5853 Год назад

    Seems like it has a very specific use case. I don't really use BEM personally due to modules, but sometimes for semantics sake I implement some kebab case in my modules and SASS is great because of it.

  • @mukeshodhano4094
    @mukeshodhano4094 Год назад

    it will be great help in
    input tag
    button tag

  • @Jantcu
    @Jantcu 8 месяцев назад

    Thank god it doesn't allow partial class/id names (9:00), that always made discoverability really challenging imo.

  • @albinmiftari1832
    @albinmiftari1832 Год назад

    I love nesting and thats why I prefered sass. Much easier to understand while its less code.

  • @bronzekoala9141
    @bronzekoala9141 Год назад

    It's great that css itself becomes more mature - I'll still stick to scss, since I have no reason not to (angular dev) and there are still more features in it than nesting that I use very often.

  • @Ostap1974
    @Ostap1974 Год назад

    There have been lately some new standards I have trouble understanding the reasoning behind... Could someone explain the idea why the a { .smth } is OK, but a { li } is not?

  • @spicybaguette7706
    @spicybaguette7706 Год назад

    I believe PostCSS can translate nested CSS for browsers that don't support it

  • @knoraziel
    @knoraziel Год назад

    This will work great with Svelte 😮

  • @TomSaw_de
    @TomSaw_de Год назад

    23:00 putting a :where(...) around .hero ,#introduction would release the specifity so the the blue color in h1.page-title re-enters the scene, no?

  • @initiallytk
    @initiallytk Год назад

    I really hope margin-trim gets widespread support! I'm getting real tired of turning off styles using stuff like :last-child like you did at @16:00. Obviously it wouldn't have worked in this case with a border, but... margin-trim looks SO much cleaner than what I normally have to do with margins. Sadly it's too early to get excited about just yet😞

  •  Год назад

    Nice to hear about nesting in CSS, I think that '&' symbol is necessary because of minification/oneline css thing. like 'a {color:red;&small{color: green}}' in this case css know that &small is new element and not css property. (Its just my guessing :D) Nice video.

  • @AlexisSilent
    @AlexisSilent Год назад

    Kevin, you mixing ui id attribute with class selector in your "primary-navigation__list" explanation

  • @kevinfisher7032
    @kevinfisher7032 Год назад +2

    I’m glad you mentioned readability. I used Sass on a couple of projects but found that it just wasn’t worth the trouble. After the initial development I would always be interacting with the compiled CSS so why bother? This seems like a nice integration of one of the most useful features.

    • @Starwort
      @Starwort Год назад +1

      Remember that you can use source maps to see the scss while debugging your styles

  • @Pouckimon
    @Pouckimon Год назад

    Awesome video. Thanks!

  • @DannyH77
    @DannyH77 11 месяцев назад +1

    Will container queries work in nesting

  • @1stCyborgOnMars
    @1stCyborgOnMars Месяц назад

    Wow bro. Thanks for these. Seriously 🫡

  • @zakir.nuriiev
    @zakir.nuriiev Год назад

    Thanks a lot for a so nice lesson!

  • @nro337
    @nro337 Год назад

    This is great! Thanks!

  • @matrixplace
    @matrixplace Год назад

    SCSS is so much more than nesting, I cant see vanilla CSS replacing preprocessors. Also I have never liked how CSS variables are declared and used, much more complicated than SCSS.

  • @silverfullbuster9177
    @silverfullbuster9177 Год назад +1

    Hi Kevin, Im currently studying web developent and sometimes get discouraged by the advancement in AI and the possibility of replacing devs and I was wondering what your thoughts are. Is it likely that devs will be replaced or they will adapt to the new changes AI brings?

  • @ongke3655
    @ongke3655 Год назад

    I still love sass because of indent style of it. Code look more short and clean

  • @johnconnor9787
    @johnconnor9787 Год назад +1

    19:48 Are you sure this is the old way?

  • @soymuymuy
    @soymuymuy Год назад

    I'm assuming that it didn't really matter, but FTR, the primary-navigation__list element you created was an ID not a class attribute...

  • @limpzbizkit1022
    @limpzbizkit1022 Год назад

    wait, is it new to css? im just learning sass today and as a beginner, getting the code longer and longer is getting kinda hard to read. sass cover it up for me. also I'm looking forward on your future tutorials regarding sass :) I learn a lot from you.

  • @ModifiedMusicYT
    @ModifiedMusicYT Год назад

    CSS taking in nesting is a huge imo, but since it still does not have support for functions, mixins, maps, etc, I'll stick with SCSS for now

  • @thedelanyo
    @thedelanyo Год назад

    Now we need mixins and masonry layouts 😅😅😅

  •  Год назад

    Thanks for this! This will be awesome when browser support gets there.
    A little question, do you know if LESS and SASS will support classic css vs nested css for css outputs?

  • @lakshaychauhan9190
    @lakshaychauhan9190 Год назад

    Hii kevin! So I use Styled components and alot of I do have to get to 3layers of nesting, but that is mostly because I am using many many changing css for my projects.

  • @Cahnisama
    @Cahnisama Год назад

    The thing I find annoying in nesting is because you raise specificity, so when I need to make a media query I have to recreate the entire nesting even though I just want to change an li or something.

  • @grymmjack
    @grymmjack Год назад

    9:45 Hey it wasn't showing up in dev tools maybe because in your CSS it's a class and not an id (#) ? element has id, not class. I don't mean the __list thing, just the devtools thing? Also thanks for these videos Kevin.

  • @yossiaharoni1
    @yossiaharoni1 Год назад

    Hi Kevin,
    What is the program that you use to record your videos?

  • @clevermissfox
    @clevermissfox 5 месяцев назад

    What do you guys think ? Is browser support good enough for using native nesting in production? I recently had someone on an icodethis challenge using chrome 110 and couldn’t see my submission. That made me nervous that a coder wasn’t updated , where are civilian users on the browser update levels ?! How many supported browser versions do you need to feel comfortable using in production? I thought a dozen supported versions would be fine for chrome but…

  • @LeeSmith-cf1vo
    @LeeSmith-cf1vo Год назад

    Nesting is basically 99% of what I use less for.
    Is there a css->css converter so that we can use this now?
    I think I'll take the approach of always using `&`. Sometimes omitting it is just going to lead to bugs...

  • @qm3ster
    @qm3ster Год назад +1

    Useful (and safe) feature, but shocked at what could happen when combining selectors like `.class,#id{a:a}`.
    This is horribly dangerous, it should have just been syntax sugar for separate selectors like `.class{a:a} #id{a:a}`.
    What were they thinking? :/

  • @domanickharper
    @domanickharper Год назад

    that's aweosme.you could css stuff in order specifically for elements rather than one big list. You could Style a table and then style the specific elemts within the table and then close it and only open it when you wanted to edit that, right? Organization or Complication, what do you think?

  • @mhelvens
    @mhelvens Год назад

    Why require that nested selectors start with a symbol though? It feels inconsistent and arbitrary.

  • @ReneKoch
    @ReneKoch Год назад +1

    Sad that nesting won't work like pre-processors 😔

  • @miraclemichealm1366
    @miraclemichealm1366 Год назад

    I learnt a lots ,
    Thanks sir. I really wish if I can get the opportunity to talk you sir.

  • @ChrisMochinskiMusic
    @ChrisMochinskiMusic Год назад

    I’ve been using SCSS for a long time…this seems reeeeeeally similar.

    • @ChrisMochinskiMusic
      @ChrisMochinskiMusic Год назад

      EDIT - I’ve now realized the big difference that actually might make the jump tricky for SCSS vets. The amp, in SCSS, is for combined classes & extra specificity. The amp, in nested CSS, apparently is to designate child elements. That’s a bit of a switcheroo.

  • @elephant313
    @elephant313 Год назад

    Love u kevin waiting for this for too long.. I have a question should i keep on sass or use this instead and ditch sass.

    • @KevinPowell
      @KevinPowell  Год назад

      well, proper support for this is a ways off still, and we don't have mixins, custom functions, and a lot of other Sass stuff either

    • @elephant313
      @elephant313 Год назад

      @@KevinPowell thank u so much apprecaite ur reply. I was thinkning about it tho i think for now i will stick. With sass and css nesting

  • @daveturnbull7221
    @daveturnbull7221 Год назад

    I like the concepts behind nesting but to be honest my css is pretty simple so doubtfull I'll be using it in the near future. As for the possible gotchas with specificity and ids, that wont really affect me. I only use ids for javascript and even then fairly rarely. A really nice explanation of it all though Kevin

  • @DR-nn3ns
    @DR-nn3ns Год назад

    What is faster? To use SASS that compiles a complete finished CSS file or native features, that have to resolve this nesting before using this rules? And is this important or is the difference so marginal that this doesn't matter?
    The biggest problem imho is that you can't concat strings like you mentioned for BEM.
    I'm really excited to have this in native CSS and maybe they also add support for string concatenation in the future

  • @stefan5673
    @stefan5673 Год назад

    Thank you for your awesome videos

  • @traviswatson6527
    @traviswatson6527 Год назад

    I really wish they didn't cave to pressure and make & optional. It's just unintuitive that it's a descendant selector without the ampersand, but you add it to get to same selector... you literally have to _ADD_ the ampersand operator to _REMOVE_ the descendant behavior... this is not normal.

  • @eddielhs
    @eddielhs Год назад

    But 'primary-navigation__list' is an ID, not a class, right?

  • @LouisCharlesBlais
    @LouisCharlesBlais Год назад

    Are you aware of scripts that would convert the css file to non-nested css if the browser is not compatible? This could be nice considering its so different it will brake completly the project if the user doesn’t support it. Maybe a little backup solution could be intergrated on our projects 🤷🏼‍♂️

  • @ArielZab
    @ArielZab Год назад

    What happens on older browser versions?

  • @ahmadrezadorkhah9574
    @ahmadrezadorkhah9574 Год назад

    I really need that. CSS is starting to look like macros in Rust

  • @aurusaurum9649
    @aurusaurum9649 Год назад

    Thank you! Do you plan to record lessons about TailwindCSS?

  • @junsu-ho
    @junsu-ho Год назад +1

    I'm not sure how that helps if you learn the basics of selectors ... for the first glance (no time to watch whole video, maybe you could make Kevin 3-5 minutes summary in the end?) , anyway doesn't CSS have bigger issues they should work on?

    • @KevinPowell
      @KevinPowell  Год назад +1

      People don't watch recaps at the end of videos, so I stopped bothering a long time ago 😅.
      What are the bigger issues they should be tackling? They are working on a lot of stuff, but it's in a pretty good place now, overall, I find :D

  • @penguinxed
    @penguinxed Год назад

    thank you sir!😊