[HN Gopher] Layout Breakouts with CSS Grid ___________________________________________________________________ Layout Breakouts with CSS Grid Author : clairity Score : 86 points Date : 2022-10-11 16:38 UTC (6 hours ago) (HTM) web link (ryanmulligan.dev) (TXT) w3m dump (ryanmulligan.dev) | willio58 wrote: | Love how this is possible in such a clean way now. Layout | breakouts are one of those things that look simple, but if done | incorrectly can lead to terrible bugs, issues with scrollbars, | etc. | robertlagrant wrote: | > Love how this is possible in such a clean way now. | | Yes. What I would've given for CSS functions 20 years ago! | eyelidlessness wrote: | I've used this technique, with some tweaks, and it's great. For | my usage I generally want full-bleed sections to extend their | _background_ but to have their inner content width the same (or | close to the same) as normal content. It's trivial to do, but | might not be obvious if you're not comfortable yet with CSS grid: | you can nest the same technique, eg <div | class="content"> <div class="full some-bg content"> | <!-- Container bg is full width, everything inside is normal | width --> <div class="feature"> <!-- | Container bg is full width, everything inside is feature width | --> </div> </div> </div> | clairity wrote: | right, but that's the old, divitis way of doing it. using grid | this way let's you set all the children to the content width | and then selectively break out of that with just a class on the | child element (without extra divs). | | i use a responsive gutter in my default grid that is akin to | the article's technique, for the same issue that sometimes you | want a little padding and sometimes you want full bleed | (usually for just the background). once subgrid comes to | chrome, it will be even easier to control content width without | divitis. | eyelidlessness wrote: | > right, but that's the old, divitis way of doing it. using | grid this way let's you set all the children to the content | width and then selectively break out of that with just a | class on the child element (without extra divs). | | I think you may have misunderstood my comment. I'm saying you | can use the grid technique described in the article _and nest | the technique_ to achieve similar results _within sub- | sections_. Note that I used the classes defined in the | article. My stated use case is exactly "usually just for the | background". My HTML only differs from the article's example | HTML by adding the content class to the full-width element, | and a class which would hypothetically add the background to | that element. I didn't add any extra divs. | clairity wrote: | yah, that's the kind of thing subgrid is meant to solve. in | my head, the structure looks more like: | <body class="content"> <header | class="popout"></header> <main></main> <!-- | implicitly in the content track --> <footer | class="full"></footer> </body> | | you shouldn't have to add an extra div inside <main> to be | able to use the parent grid. so you subgrid on <main> and | get the benefits of just adopting the parent grid for | popping things out, rather than nesting with extra | divs/classes. | eyelidlessness wrote: | There is no extra div! The classes are necessary if you | want to support the >90% of users whose browser supports | grid but not su grid. My example, adapted to your | preferred nomenclature, the "extra" classes renamed for | their CSS functionality equivalent, and some content | added: <main class="grid"> | <h1>I'm normal content width</h1> <p>Ideally | you wouldn't need that grid class for this. But it keeps | the CSS DRY for...</p> <section class="full | some-bg grid"> <h2>I'm normal content width | too</h2> <aside class="feature"> | <p>I'm "feature" width!</p> </aside> | </section> <p>The "extra" class on the | section above is <b>currently</b> necessary | because...</p> <section class="full some- | bg"> <p>Whoops, no subgrid support? I'm full | width on 95% of browsers currently in use!</p> | </section> </main> | | It'll be cool when those classes can go away. You can | certainly just make `full` always apply the main grid | styles if you have no use case for full width sections | without a grid. Or even have distinct `full` and `full- | grid` classes, but you're just swapping a character at | that point. | uallo wrote: | > In the last version of my site, selected elements - images, | code blocks, quotes - were made wider than the page content area | using negative margins. | | Yes, negative margins are often (not always!) a bad idea. | Especially for something like a full-bleed layout. The other way | around makes much more sense and does not need Grid. Make | selected elements narrower than the main section. That has worked | for a long time and still works today. ___________________________________________________________________ (page generated 2022-10-11 23:00 UTC)