[HN Gopher] State of CSS ___________________________________________________________________ State of CSS Author : taubek Score : 236 points Date : 2022-10-21 12:52 UTC (10 hours ago) (HTM) web link (web.dev) (TXT) w3m dump (web.dev) | krono wrote: | The majority of items mentioned in the article are still in the | earliest stages of the standardisation process and haven't even | had their specifications finalised yet (see overview at | https://www.w3.org/Style/CSS/current-work). | | Having access to these cool new features so early on is nice, of | course, but be ready and willing to deal with possible breaking | changes or even future removal. | | Here's a recent example of once such breaking API change in the | `:has()` selector spec being discussed on the Firefox tracker: | https://bugzilla.mozilla.org/show_bug.cgi?id=418039#c44. It will | be interesting to see how the other browsers that have already | released the outdated implementation to production deal with | this. | BrainVirus wrote: | The reality is that W3C and Mozilla do not matter anymore. I'm | not saying this because I like it, I'm saying this because it's | the obvious state of things. Google controls the standards and | protocols for the Web. | aimor wrote: | The fragment identifier links in the table of contents need to | have parenthesis () removed because right now they're not | matching the ids in the section headings. | perardi wrote: | I personally cannot wait for container queries to be fully | supported. And I'm pleasantly surprised it's landed in the new | version of Safari. | | If only for some presentational aspect of an internal design | system I'm building, it's a dream come true. | sroussey wrote: | It's not just in Safari, but also Chrome. So an up to date | mobile OS will have it. | | I think only Firefox is without. | [deleted] | fouronnes3 wrote: | Is there any work on updating CSS browser defaults? Even if it | must be opt-in to keep backwards compat, having the possibility | of starting any css file with 'use-defaults: 2022;' or something | like that would be great. | kevincox wrote: | I would love an option to opt into something like "reader mode" | but maybe not quite so restrictive. (I can use some custom CSS | to highlight code and some JS for interactive examples. | | Right now I need to worry about the user's contrast | preferences, light/dark preferences. Decide if I want to force | a decent font or end up with the user's default (which probably | sucks). I need to decide the text size (because their default | probably sucks) and decide how wide the reading area should be. | | What a mess to try and just pick something that the user wants. | keb_ wrote: | Great overview. I'm always excited by newer features to CSS that | make older JS-only methods obsolete. I've also grown CSS-tooling | fatigued after using SASS and PostCSS plugins for years. I've | recently gone back to only using vanilla CSS on personal projects | and while there are niceties I do miss (nesting) it's refreshing | not having to deal with config files or waiting for stuff to | compile. | 9dev wrote: | The sweet spot for me is Vite, which comes with PostCSS built- | in, and the nesting plug-in which follows the CSS spec. | | Vite takes care of the boring stuff, I can write vanilla CSS | with nested declarations in it, and it just works. | TheRealPomax wrote: | But what Vite didn't have to _do anything_ because CSS | already comes with nesting? CSS nesting was proposed over | eleven years ago, and is only today finally making it into a | single browser, behind an experimental flag. Three major | preprocessing languages were invented and two of those | (mostly) died off again in the mean time. We shouldn 't need | preprocessing here, we should have had nesting ten years ago | =) | jozzy-james wrote: | to be fair, preprocessing comes with some other QoL things | that I don't see CSS being able to support natively, namely | mixins with math functions. | | edit: don't get me wrong, i'd love to be 100% native CSS, | but there are some things where preprocessors shine | TheRealPomax wrote: | Right, but the _only reason_ they shine is because they | do something we all want but isn 't in the spec. So | getting it into the spec should absolutely be the goal | here =D | noduerme wrote: | I couldn't live without SCSS mixins, extensions and maps. The | sheer tedium of doing it vanilla would drive me insane. | purplerabbit wrote: | Serious question: how do you refactor code when using nesting? | In my experience it makes styles impossible to audit. | cageface wrote: | Also not a fan of nesting. It makes it way to easy to create | unmaintainable CSS spaghetti. | reaperducer wrote: | _I 'm always excited by newer features to CSS that make older | JS-only methods obsolete._ | | I wonder if it's just about how some people's brains are wired. | | I grok CSS. I won't claim to know everything about it, but I'd | say I'm 90% proficient and prefer it to JavaScript. | | But I think this is because JavaScript somehow never fully made | sense to me. I can read it and figure out what it's doing, but | it was never intuitive to me the way CSS is. | | I read comments on HN frequently from people who are good a JS, | but can't deal with CSS. | | I think it's just how some languages "click" with different | people. Some are comfortable in Lisp, while others are AP/L, or | Rust, or something else. | | Perhaps it's good to have multiple ways to achieving the same | thing, rather than obsessing about one | perfect/standard/preferred/"best practice" way of doing things. | tjpnz wrote: | Only one of those options stands a chance of rendering in my | browser. | [deleted] | hot_gril wrote: | I don't understand either one. I use React (while technically | pure JS, I assume this isn't what you mean) and calculate | most of the sizes manually, just passing width and height as | props into my elements. People tell me that's dumb, but it's | always worked, and I don't have to keep up with this topic of | CSS that doesn't really interest me. I've tried the "correct" | flexbox way too, and it wasn't easier. | | One particular thing about CSS... <img> seems to never behave | in any kind of auto-sizing container the same way a regular | div would; it seems to need pixel dimensions to work as | expected in all scenarios, especially when things are | resizing dynamically. Idk how other people deal with that. | That alone was my motivation for trying things my own way. | | I did something similar developing an app long ago for the | iPhone 4. Calculated all my dimensions in C macros cause | AutoLayout made no sense. Tons of apps using AutoLayout broke | anyway when the new screen sizes came out, but my app was | fine. "Math is math," as Mr. Incredible would say. | alpaca128 wrote: | Meanwhile for me CSS is like the MS Word memes. Things that | worked just break one day, certain options make other | seemingly compatible options do nothing, and some settings | just don't do what you'd guess from their name. | | Almost everything can be made to look correctly but somehow | the right solution is the last one I'd ever think of. | arrow7000 wrote: | No. If you have to write styling in JS I can guarantee that | it will be far more brittle, less performant, and way more | susceptible to FOUCs, reflows, jank, and potentially | deadlocks of conflicting resizing elements than the | equivalent in CSS. | nwienert wrote: | Or you can author styles in JS and have them compiled to | CSS. Then it's actually less brittle (fully typed), no | fuoc, jank or deadlocks. | | https://vanilla-extract.style | | https://tamagui.dev | activitypea wrote: | All of which is preferable to an ever-growing spec whose | pace makes it impossible for a newcomer to enter the | browser space. | alvarlagerlof wrote: | JavaScript simply shouldn't handle a lot of layout. It's | not running in sync with the layout engine in css. | Sesse__ wrote: | There has been some movement to handle CSS layout in | JavaScript (running in a service worker, so that it | cannot have state, but otherwise fully in sync with the | layout), as part of the "Houdini" effort: | https://www.w3.org/TR/css-layout-api-1/ | | (Disclosure: I work on the style team in Chromium) | Semaphor wrote: | Actual nesting is on the way [0], but for now you can already | use :is() [1] in many cases. | | [0]: https://blog.openreplay.com/modern-css-selectors/ | | [1]: https://developer.mozilla.org/en-US/docs/Web/CSS/:is | laundermaf wrote: | :is() exclusively reduces nesting if your nest produces a | single rule, which is the least common situation and is | generally dealt with by just duplicating the selector rather | than nesting. | runarberg wrote: | :is also has tighter specificity then a nested selector. | which is a footgun for sure. However you can use :where | instead, which is basically just :is without this footgun. | clairity wrote: | there's a subtlety missing: :is() selects the highest | specificity from the selector list while :where() sets | specificity to 0 for anything in the selector list. this | leaves out the (admittedly narrow) case where you want | the lowest matching specificity (in case 2+ selectors | match) rather than just 0, which is probably what most | folks would expect, just as we would tend to expect | selector lists to be forgiving (following the principle | of least surprise). | keb_ wrote: | That's awesome. Thank you for sharing. | dheera wrote: | Yet 15 years later, I still can't specify a width and aspect | ratio for an div without some unintuitive nested div hell. | LukeLambert wrote: | div { width: 640px; aspect-ratio: 16 / 9; | } | dheera wrote: | > But with Chrome and Firefox supporting it behind an | experimental flag | | So basically not supported, and you have to go back to div | hell. | | There should be some future.js file that you can import to | make all this stuff just work in older browsers. | nailer wrote: | Yes you can https://css-tricks.com/almanac/properties/a/aspect- | ratio/ | psygn89 wrote: | :has() basically removes the need for us to use JS to attach | classes to parent elements as we can essentially look ahead now, | e.g. ".some-component:has(.input-select-all:checked) { | background: blue }" whereas we would have to use JS to query the | input, then query the parent and attach some css class as a | styling hook. | | Container queries will allow us to fine-tune the not-so- | predictable gaps between our predictable breakpoints. Breakpoints | will probably still be used for larger-picture layout, but | container queries will help with the smaller parts especially in | UI that have many moving dynamic parts. | | The rest are just icing and honestly I wouldn't be surprised if | it takes a while for many of them to become mainstream. | andrewmcwatters wrote: | CSS keeps getting larger and larger which I think on its face is | actually fine, since all of the standards are extended modules. | So if you think about it that way, as an implementor you can | choose which standards you want to incorporate and have total | coverage for particular parts of the spec. | | But the state of CSS for implementors is still abysmal, in my | opinion, and I'd like to see more of the spec formally defined | for some of the most fundamental parts of it. | | It would be nice if the spec matured for implementors, too. | | Like, could we please get a formal definition of the CSS | processing model? The lack of one means that particular events | MAY OR MAY NOT exist in user agents. | | Those events may exist in large implementations--and when a CSS | standard eventually pops up to utilize those vendor specific | events, some implementations may not even have them, because they | process CSS in an entirely different way! | asiachick wrote: | If you want CSS to be the same across browsers then help | implement CSS tests and file bugs | | https://www.w3.org/Style/CSS/Test/Overview.en.html | | https://web-platform-tests.org/ | | better specs are great, but tests will actually find the edge | cases and lead to more convergence. | nicoburns wrote: | As someone who's recently been working on an implementation of | CSS Grid, and reading through a lot of CSS specs, I completely | agree. There's a lot that isn't in the specs. The CSS Grid one | isn't even that bad, but the spec for "flow layout" (block and | inline) looks like a complete mess. | | An HTML5 moment for CSS would be very welcome. | andrewmcwatters wrote: | Yes! You know exactly what I'm talking about!! | | I'm hysterical about the state of affairs for these exact | sorts of things, but comparatively almost no one is an | implementor, so most people have no idea how bad it can be. | asiachick wrote: | IIRC the way someone reimplemented flexbox was to take the | layout tests and iterate until their implementation passed. | | https://yogalayout.com/ | andrewmcwatters wrote: | There may be layout tests for flexbox (I haven't looked | into them, because I don't care about them as much as | normal flow) but there are basically no layout tests for | CSS 2.1 that aren't fully manual. | | So basically for 25 years, as far as I understand, no one | said, hey given a set of known layout constraints and | rasterization parameters, let's create automated tests. | | For 25 years. | | Maybe I'm wrong, but I keep looking for these tests and | the ones that exist for normal flow are a nonstarter. | nicoburns wrote: | Yes, but the fact that someone had to do this makes it | clear that the spec isn't complete. A complete spec would | state the algorithm unambiguously. You might still need | to fix bugs based on tests, but you shouldn't need to be | working about behaviour because it's unspecified. | asiachick wrote: | Not my experience at all. It doesn't matter how well | written a spec is. No tests = no conformance. End of | story. Most people can't hold an entire spec in their | head or think through all the ramifications of the edge | cases. Even the spec writers. I work on several specs. I | work with people who work on specs. They're all mortal. | No test = divergence. Always and without fail. | pjmlp wrote: | This is why, I can only assert I can do "fullstack" for native | applications on Windows and Android, for web development I am | certainly on backend side, no way I can keep track of what CSS | works where, and which incantations to make divs behave like | native controls. | andrewmcwatters wrote: | It's also nearly 100% guaranteed that while people say | they're a master at CSS, there are probably only a miniscule | amount of people who have read how CSS rasterizers actually | work. | | I'd almost bet there are probably more people who have | reimplemented OpenGL in software than people who have read | and understand how CSS compositors work. | | For example, if you asked someone how user agents create | backing tiles for CSS, they'd look at you like you spoke in a | foreign language. | | You totally don't need to know this stuff, but if you were | doing say, high-perf UIs in WebKit (iOS), you'd probably at | least want to know how to hint to WebKit that something needs | its own render target or how to minimize subtree redraw. | | I built massively performant large UIs for payroll systems on | iPad years ago and found that if you optimized your UI just | right, you could get smooth scroll performance that showed | cracks in how fast the iPad was able to draw backing tiles at | the time. | | You'd get whole squares black scrolled into view while WebKit | asynchronously drew in elements. | 323 wrote: | Why does a payroll system UI need game-engine level | performance? | GoToRO wrote: | After reading some of this, all I can think of is "Boy, my | paycheck will explode!". | jjcm wrote: | Interesting to see a lot of negative responses here. I'm quite | excited for a large amount of these items. | | @container queries are going to help a ton in making components | more reusable - components that react to their own size rather | than the browser size have been needed for a long time, and | currently the only way to really do it is with the javascript | observer api, which comes with huge performance tradeoffs. | | Color-mix() is another item I've been wanting for some time, not | because I need to mix things like red + blue, but because we've | needed a native way to add opacity to css variables for a long | time now. Having opacity be independent means we can have a | robust design system that doesn't expand exponentially, while | still providing opacity levels when needed. | | Masonry layouts will greatly simplify a very common use case, | color level 4 and 5 will make the web more dynamic and beautiful, | and loosely typed properties will help add fallbacks. Definitely | excited for these changes. | [deleted] | hot_gril wrote: | Well the amount of lag my max-spec 2019 MBP incurred loading | that webpage didn't bode well. | jandrese wrote: | I'm only negative that some of these, especially flexbox/grid, | weren't in the standard from the start. Especially after the | committee crapped on HTML tables so hard. Viewport units are | another part of the standard that's about 24 years overdue at | this point. | dmitriid wrote: | Constraint-based layouts where proposed to w3c in 1999. They | were rejected because people thought they would be too | resource-intensive for the time. | | Don't forget, the core of HTML and CSS _until this day_ | basically relies on "we can lay everything and display it in | a single pass". | | Double pass (for tables) didn't appear in standards until | 2001 if I remember correctly (but won't be able to find). | | And then you have the IE-era draught of no features. | asiachick wrote: | crapping on tables was arguably correct. flexbox and grid | allow for responsive designs (work on phone and desktop). | Table based layouts do not. | jandrese wrote: | Crapping on tables is fine. _Offering no replacement_ was | not. | Dma54rhs wrote: | Everything old still works? | wwweston wrote: | AFAICT a lot of the negativity comes from developers who want | to work at a component UI Kit level you can find in native dev | but don't find libs/kits that accommodate this well. | | I don't think this is a failure of CSS -- I think CSS has | turned out to be brilliant with some blind spots and part of | the most spectacularly flexible UI layer that's ever been | created. But it works at a lower level and leaks easily and | that plus some cultural factors has generally pulled people | towards a below-component development focus lots of devs would | rather have abstracted away. | | Container queries are one of several things that can move the | dev culture more towards component level. | 9dev wrote: | I mean, you already could store Color tuples in CSS variables: | --color-primary: 172,250,83; background: | rgba(var(--color-primary), 0.4); | | But I agree, that isn't very intuitive. | yakubin wrote: | From recent(-ish) additions, the vh unit and flexbox were | enormous help to me when I was designing a photography section | for my personal website. From something older, which nonetheless | helped and was new to me, were "display: inline-block" and | "display: inline-block" (the concept of separated inside and | outside display styles in general). Also "box-sizing: border- | box", but at this point probably everybody uses it. | nailer wrote: | Give me: | | - mixins. Like SCSS and SASS has had for a decade now. 'apply' | was supposed to add mixins but 'apply' was cancelled in favour of | 'part', and 'part' doesn't work. | https://stackoverflow.com/questions/74097950/how-do-i-create... | | That's actually it. We already have aspect-box, adding gradients | for borders would be nice but I can live without them. | LordDragonfang wrote: | Am I the only one who looks at the example color gradients and | thinks the new ones just look... worse? The sRGB one is the only | one that looks perceptually uniform, and is probably the only one | I'd feel comfortable putting text on top of, and the bottom two | have _really_ aggressive and distracting banding. That makes this | especially concerning: | | >The default color space also changes to LCH instead of sRGB. | | Since LCH is the worst one to my eyes. | | Is this just an issue with my monitor? | yakshaving_jgt wrote: | As CSS gets bigger and more needlessly complex, I wonder if | people start writing compile-to-CSS languages that aren't just | supersets of the status quo. | | I could imagine (and I think I am possibly observing) CSS going a | similar direction to JavaScript; we might soon see the | CoffeeScript of CSS, and then eventually something more | sophisticated and well-designed like the Elm of CSS. | | CSS -- like JavaScript -- might become the _styling bytecode_ of | the web. | arrow7000 wrote: | Is it really "needlessly" complex if this is enabling styling | that wasn't possible before? | | Re your second point that CSS might become a compilation target | for styling... have you never heard of Sass, Less, Tailwind, or | any of a million UI frameworks that provide alternative ways to | write CSS, or even avoid writing it directly altogether? This | isn't exactly new. | yakshaving_jgt wrote: | > Is it really "needlessly" complex if this is enabling | styling that wasn't possible before? | | Many newer features that have been added over the years don't | actually enable anything new. Not that I'm arguing in favour | of table-based layouts either. | | > have you never heard of Sass, Less, Tailwind, or any of a | million UI frameworks that provide alternative ways to write | CSS, or even avoid writing it directly altogether? This isn't | exactly new. | | I have written CSS in a serious capacity for several years. I | am more than familiar with Sass, Less, _etc._ , which is | exactly why I wrote "languages that aren't just supersets of | the status quo". | arrow7000 wrote: | How do you propose we get to such a language that is more | than a superset of the status quo if CSS, the compilation | target itself, is severely limited? | yakshaving_jgt wrote: | ...That's the entire point of abstraction. | | I'm guessing you aren't writing binary in your day to day | work, are you? I'm fairly certain whichever language | you're working with is more featureful and ergonomic than | working directly in binary. | | Similarly, Elm has a different surface area from | JavaScript, and yet JavaScript is the compilation target. | | CSS doesn't need to be featureful to be a compilation | target. | lbotos wrote: | Does anyone else feel like CSS has jumped the shark a bit? | | https://web.dev/state-of-css-2022/#accent-color | | Sure it's a "nice to have" but it bloats the spec? Look at the | current actual implementation: | | https://web.dev/accent-color/#guaranteeing-contrast | | chrome and firefox already tint differently... | | How is this better than a good ol CSS variable and leaving it up | to the designer to manage? | | Sure http://dowebsitesneedtolookexactlythesameineverybrowser.com/ | but when the exec is like "why is our brand color slightly | different on ff vs. chrome... we are back to square one. | [deleted] | [deleted] | [deleted] | soulofmischief wrote: | I write complex web apps and hit the limits of CSS every day. | My apps are written in a way that allows easy changing of | themes and `accent-color` particularly can greatly simplify my | theme management system. | | I'm super excited for some of these additions. Perhaps they are | meant for designer-developers such as myself and not for the | casual CSS developer who doesn't already reach for existing | advanced features. | naillo wrote: | I guess all these additions are incentivized by google etc | loving the fact that it makes the moat to make competing | browsers wider and wider. Imagine trying to make a new browser | from scratch in 2022 and supporting the 20+ years of bloat like | this (not to mention future plans). | asiachick wrote: | Did you even bother to look which browser implemented the | features first? Will you update your priors based on what you | find? | naillo wrote: | I'm talking about the growth of features in general. Calm | down no need to be so aggressive. | pie_flavor wrote: | No need to be so conspiratorial either. Generally | features make it in because they improve developers' | experience. | dmitriid wrote: | They are mostly one-off features that don't create a | coherent whole. See what Figma has to say about this: | https://www.figma.com/blog/building-a-professional- | design-to... | aliqot wrote: | > CSS has jumped the shark | | "Disregard logic, acquire funds" - Ducreux | Vinnl wrote: | I was not possible to use a CSS variable to change the | highlight colour of a checkbox, as far as I'm aware. You can | use a CSS variable to set the accent-color, though. | | (The workaround was creating a fake element that looked like a | checkbox that overlapped the actual checkbox.) | runarberg wrote: | > The workaround was creating a fake element that looked like | a checkbox that overlapped the actual checkbox | | There is also a newer workaround by styling the input element | it self by using appearance: none. You can do some clever | stuff with the :checked selector, multiple backgrounds, clip- | paths, masks, etc. | lbotos wrote: | Right, my point is, we've now introduced this new attribute | for "browser elements" instead of saying now checkboxes | support background-color, color, etc. And let the designer do | the work. | | Lean on the primitives we already have, enable flexibility, | and if someone wants to make a SaSS wrapper or CSS function | to do it, enable that vs. more random places for browsers to | diverge on "standards". | | It plays out like this: | | "Oh, I wanna change the UI element style, thats a new | feature! Accent-color! Nice. Oh wait, browsers are doing | different things. Dang. Am I okay with that? vs. "I wanna | change a UI element style, Oh, browsers now support classic | CSS styling attributes on these elements! Nice! Designers | sets colors, all browsers just read the designer's palette. | themacguffinman wrote: | Changing the behavior of existing attributes isn't | backwards compatible. Websites that currently use | background-color & color assuming that it won't affect the | accent color will suddenly look different when new browser | versions make it affect the accent color. | clairity wrote: | i believe the problem with form elements like checkboxes is | that they are 'replaced elements', which the browser defers | to the underlying operating system, and that's why it | requires a "hack" like accent-color rather than direct | styling. this is also why you can't use ::before and | ::after on form elements (to do things like add a | 'required' indicator using css only). | easrng wrote: | IIRC they used to, but not anymore. They're implemented | with a special Shadow DOM that's not accessible by the | page but you can style some elements if the browser | exposes them as psuedoelements. | clairity wrote: | are OG form elements actually reimplemented in shadow | DOM, like they're doing with open UI (https://open- | ui.org/) custom elements? | | i've seen safari and chrome (but not firefox) expose some | form input components as shadow DOM (e.g., slots), but | wasn't sure if it was actually reimplemented. | irrational wrote: | For this? No. Years ago we were working on a project and the | default color of the form elements was a real sticking point. | For some of them we ended up rolling our own, but others we | just suffered with the default. Accent-color would have solved | a problem we spent months working on and agonizing over. | lbotos wrote: | See my reply below: | https://news.ycombinator.com/item?id=33289468 | | If you were able to style the element with "classic" CSS | primitives like border/background/color would that not have | _also_ solved the problem without introducing new syntax with | new quirks? | easrng wrote: | I've done this before. The problem is a lot of elements | will change to a different (standard?) appearance when you | add styles like that, so you'd need to recreate the | original look if you wanted to just change the color. Also, | each browser has different psuedoelements so you have to | support firefox and webkit separately, which is made worse | by the fact that webkit doesn't support targeting multiple | elements with your psuedoelement selector, ex. you can't do | this: input[type="range"]::-moz-range- | thumb, input[type="range"]::-webkit-slider-thumb { | background-color: red; } | | It'll work in Firefox, but Chrome (and probably Safari) | will ignore it. Instead you need to do this: | input[type="range"]::-moz-range-thumb { background- | color: red; } input[type="range"]::-webkit- | slider-thumb { background-color: red; } | waboremo wrote: | Good joke, an exec testing in different browsers to ensure the | color tint is the right color. | DrewADesign wrote: | I mean, I get what you're saying, but for a company with | critical branding needs, they will absolutely be concerned by | this. In many instances they might even notice themselves. | Sure, your average software company CEO won't care, but if | you're in the food and bev business, or a design firm, or a | game developer, the execs are keenly aware that micromanaging | their public image is essential. That's why they spend | millions of dollars for logo redesigns, or in a more extreme | case, spend a huge chunk of change to make their own | sliiiightly different version of Helvetica like Target did. | macNchz wrote: | I feel like the more typical reality is an exec looking at | the site on some random browser or device, that then has to | be in the support matrix, e.g. an enterprise business web app | that supports the most recent 2 versions of modern desktop | browsers...and the Silk browser for Kindle Fire because | that's what's on the CEO's coffee table. | aplummer wrote: | their 6 year old Lenovo with ie10 | devX3 wrote: | This is why I quit working on Frontend honestly, I was | constantly juggling such bs requirements. | devX3 wrote: | As a person who had to make some custom newsletter compatible | with IE8 few years ago, for the 1% who still used it but | among of them some were the most important investors, I feel | this. | johnfn wrote: | I don't know if a single addition is enough reason to claim | that the entire language has jumped the shark - but I was also | wondering how this is different than a variable. | [deleted] | ChrisArchitect wrote: | Just fyi: This is from May | | (and was posted a number of times then) | | What might be more interesting if it's your area is the currently | running State of CSS Survey https://stateofcss.com | swyx wrote: | yea this is by far the more time sensitive thing and should be | upvoted for visibility | dimmke wrote: | I recently tried the new Layer feature and I really like it. | We're finally getting stuff that has been needed for years, like | custom scoping support. I think it will take CSS out of JS. | butz wrote: | Sure, as standalone new CSS features look very useful, but when | you start combining everything into one stylesheet it might | quickly become hardly readable spaghetti code. | fleddr wrote: | It's so interesting, these waves of CSS improvements. | | Before the flexbox/grid arrival, there were years of near-zero | progress. | | The flexbox/grid release, uniquely coordinated across browsers | (for once), was an excellent milestone, but not really a | movement. | | These last 2 years though feel almost like a revolution in | comparison to CSS's history. Somebody is pushing very hard. | | These are some very serious improvements that address core needs | and gaps. In particular scaling CSS in large applications, with | things like @layers, @scope and container queries. | | The second goal seems to be to make CSS preprocessors obsolete. | | Compliments to whoever is working on this. My favorite upcoming | one has to be toggle, controversial or not, the idea that for | simple interactions you don't even require JS anymore is a good | development. | | The luxury problem this creates is the slow adoption rate. | Something extraordinarily powerful as grid is still barely used. | Old habits die hard. | soperj wrote: | It's so annoying to me that there's one browser that's holding | everyone back. They also make it so that no one can use | anything but their browser engine on mobile phones so they're | harder to ignore. | dmitriid wrote: | When it comes to CSS Safari is rarely behind, and often | ahead. | | When it comes to Chrome-only non-standards Safari is right | where it needs to be: not implementing this bullshit. | hot_gril wrote: | I mostly agree, but mobile Safari seems intentionally | behind on PWAs, and I do blame Apple's obvious conflict of | interest with the App Store. Biggest thing is lack of | support for notifications, though supposedly that's finally | changing after years: | https://www.searchenginejournal.com/web-push-coming-to- | ios/4... | [deleted] | azemetre wrote: | Thank you for calling this out. I feel like there is a | psyops campaign paid for by Google denouncing any | organization/tech that doesn't blindly follow their non- | standard standards. | soperj wrote: | I don't even use chrome, nor do I develop against it. | Bellend wrote: | I like how you need a mac to test safari and how the ios | animated address bar destroys any easy layout for | applications. | miiiiiike wrote: | This is repeated over and over again, but, it's not true when | it comes to Safari's support for CSS. Now, requiring a Mac to | debug JS on mobile Safari.. That's irritating. | [deleted] | the_gastropod wrote: | Reading between the lines, it seems like you're suggesting | Safari is that browser holding everyone back. The | Compatibility section in this article doesn't seem to support | that. | soperj wrote: | Ahhh, that's the version number. I thought that's how % of | the spec that they actually supported. | encryptluks2 wrote: | Can't believe paged media isn't really supported yet. Trying to | do anything like line numbers for legal documents or page numbers | is an absolute nightmare. | laundermaf wrote: | Page media has been supported for decades. Line numbers aren't | strictly related to page media. It's hard to complain about the | lack of in-depth support for a media that isn't meant to | display "the web". | | I do agree that it could be better. They have been adding | print-related features though, at least I remember some in | CSS3. CSS Colors Level 4 includes cmyk functions. | encryptluks2 wrote: | I don't think "it isn't meant" is accurate anymore. The | browser has become meant for all things including document | creation and styling. The @page counter feature although | documented isn't supported by any browser from what I can | tell at this point. | jozzy-james wrote: | i, for one, am most looking forward to full support of subgrid - | pure css masonry/isotope layouts with no JS needed when your cell | requires images to retain a certain aspect ratio, as well as span | multiple rows/columns, but has accompanying text that can vary in | height. am aware that's a very specific thing, but will be nice | to not need a JS crutch for height calculation | dtagames wrote: | Fantastic stuff in here! Can't wait to try some of the things | that already work... And see the ones that are coming! | aeharding wrote: | So excited for colors outside of sRGB! I make good use of | display-p3, currently only supported in Safari, on | https://ppg.report. | dmitriid wrote: | Make no mistake: dialog element is there only because browsers | (and Chrome, first and formost) want to remove alert/prompt. | | dialog was so problematic that the same people that are now | promoting it were in favor of removing it entirely. Literally | none of the issues were solved, but now it's a great new element | that we all should use. | laundermaf wrote: | Dialog is fine, but what I'm most excited is the upcoming Popup | API. The finest part is that "the most recent popup gets the | top-most layer". You never have to fight z-index again because | popups now live in a compositing layer outside the document | itself (even though they're still part of it), akin to | position:fixed but without the conflicts. | jhgkjhlkhjkljk wrote: | jerrygoyal wrote: | most useful utility I found from the article is `:has()` | rglover wrote: | Some nice surprises in here (love the idea of @scope and @nest). | It's a total mind blow how far along CSS has come from the stone | age IE6 days. | Timja wrote: | I think I don't need the 2022 version, but the 2021 version. Or | even the 2012 version, lol! | | I still prefer to use tables to layout my websites. | | Question: Say I want a layout that has a top row, a middle row | and a bottom row. Each row gets 33% of the screen space. Unless | the content does not fit. Then the row should expand to the | content. | | Here is the table version: | | https://jsfiddle.net/vg2ey8r9/ | | How do you do that without a table? | robin_reala wrote: | CSS Grid. It's a mostly simple spec that allows for what you're | asking for and a whole bunch more (including different grids | for different screen sizes, which tables definitely don't do). | Probably start with https://css- | tricks.com/snippets/css/complete-guide-grid/ | Timja wrote: | Are you sure? Have you tried? | | When I try, I don't get the nice behavior of tables, but a | stiff layout that does not adapt to its content. Instead the | content overflows the rows: | | https://jsfiddle.net/3hfosn5k/ | | The nice thing about tables is that I _know_ the table cells | will always surround their content. Nothing will flow out of | the cells. | [deleted] | speakeasyalexa wrote: | Hi friend, if you change the `height` values to `min- | height` in that fiddle, I think you get the behavior you're | looking for. | nicoburns wrote: | Grid tracks (rows and columns) can be content sized. You | just have to set the dimensions to something other than a | concrete size (you have used `33vh` here). See the auto, | min-content, max-content and fit-content values for | height/width (https://developer.mozilla.org/en- | US/docs/Web/CSS/height). You can get close to table-like | behaviour by setting the height to `fit-content(33vh)`. | There is also a minmax function which allows you to set | minimums and maximums and have it content size between | that. | | One of the nice things about grid is that you can size the | tracks on the parent element, and all you have to do on the | children is specify which rows/columns they span. It works | much better when you want to do the sort of things you use | rowspan and colspan for with tables. | | EDIT: Setting height: 100% was also preventing the grid | from expanding. Try this JSFiddle | https://jsfiddle.net/c3m2194b/ | Frotag wrote: | > One of the nice things about grid is that you can size | the tracks on the parent element | | Yep, it's nice to have an alternative to flex (where | _children_ determine their own size with flex-grow / | flex-shrink / flex-basis). | | > Setting height: 100% was also preventing the grid from | expanding. Try this JSFiddle | https://jsfiddle.net/c3m2194b/ | | This is an issue I've run into a lot. Well the opposite, | when I want overflowing grid cells to gain a scroll bar | instead of expanding the parent. Turns out this is only | doable if the grid element has an explicitly defined | height, which means hard-coding a height like `height: | 50vh` or ensuring _every_ ancestor of the grid has | `height: 100%` defined, which is pretty gross. | | https://jsfiddle.net/36k1079x/ | nicoburns wrote: | Having `height: 100%` (or `flex: 1` or grid equivalent) | on every ancestor is just what you have to do for CSS (it | applies to all layout modes, not just grid). My way to | make this less painful is generally to remove any | extraneous divs and try to keep the trees as shallow as | possible. | flupe wrote: | Absolutely perplexed by the other answers that think CSS grid | is a hammer for every nail. In your example without a table, | you can just drop `display grid` and set `div {min-height: | 33vh}`. | kitten_mittens_ wrote: | With grid: https://jsfiddle.net/1oghfL9s/ | seydor wrote: | does not expand the table if the content doesnt fit | | https://i.imgur.com/K1gOKGL.png | jahewson wrote: | Flexbox can do it https://jsfiddle.net/fenys70z/ | squeaky-clean wrote: | Add display: flex; align-items: center; | margin: 1px; | | To `.container div` to get the vertical centering in the OP | comment and the slight border. | https://jsfiddle.net/g4qv2dr6/1/ | | The border still kind of looks better on the table one, it's | like the flexbox border is not the same size vertically and | horizontally. | | Once you add enough text that they need to re-shape, they | both behave differently. I kind of like the look of the | flexbox one better though. | | Table https://jsfiddle.net/gs73eyd5/1/ | | Flexbox https://jsfiddle.net/g4qv2dr6/2/ | | Also they both break pretty badly if you put some content so | long that would require an automatic line-break (make sure | you scroll to the right to see) With flexbox the content | overflows outside of the container, but it preserves the | sizing of the other elements. Table expands the whole | container but in doing so ruins the other two rows. | | https://jsfiddle.net/ysu7fgk1/ vs | https://jsfiddle.net/q6dcph0x/ | gherkinnn wrote: | But now I'm on a wide screen and want the lower two containers | side-by-side with the top element spanning across the top. You | can't do that with tables. | | And that request _will_ come. | cjblomqvist wrote: | Eg grid + vh unit. Look them up and you should find plenty | content! | Timja wrote: | When I try that, the rows do not expand if the content is | larger than 33% of the screen height: | | https://jsfiddle.net/3hfosn5k/ | | Scroll down and you will see that the blue color of the | bottom row ends and the text overflows it. | | But I want what table cells do: Expand if their content is | too large to fi. | jahewson wrote: | Don't put the grid on the body: | | https://jsfiddle.net/y15qszjp/ | shadowfoxx wrote: | Hey there, I thought about this for a little bit because I | find table layouts more pain than they are worth and the | secret sauce that's missing from the examples above is | nesting! | | Just like Tables have <table> and then <tr> - your div's | need a similar parent-child relationship to work. | | Here's a working fiddle: https://jsfiddle.net/0389jsca/ | Semaphor wrote: | CSS Grid. | Timja wrote: | Easier said than done. See my other replies in this thread. | martin_a wrote: | I find most of this useless/overcomplicated. | | > Cascade layers | | Feels like we only need this because cascading works less and | less well once you start to include multiple frameworks or pieces | thereof. At some point people find themselves in a jungle of | !important. If you keep the cascade small and clean, you'll most | likely not need that. | | > Container queries | | Probably the designs I have to implement are not complicated | enough, but I could work very well with media queries so far. | | Also this blurs the lines between markup and styling furthermore. | Now you are defining IDs/classes in CSS which will make the code | harder to debug. | | > accent-color | | Yeah, this is kind of nice. On the other hand we should not | forget where the "this always gets styled by the system" comes | from: Accessibility. With accent-color I can now totally easy | screw up various kinds of inputs in the name of corporate design. | | > Color level 4 and 5 & hwb() | | Oh come on, this must be a joke. Color management is VERY hard to | do, now we put more of that into CSS. But yes, advertisements can | then be delivered with a wide gamut colorspace for more impact. | Great. | | > inert | | What? This is just as bad as highjacking the scrollbar behaviour. | Now you can make your website behave modal although there's no | modal. Feels like another "right clicks are forbidden"-level when | your paragraphs are set to inert and you can't interact with | those anymore. | | > Viewport units | | More units of measurement is totally what CSS was missing. /s | | > :has() | | The parent selector looks like the only useful thing to me from | that list. It will (theoretically) help clearing up the markup | mess because you need less containers etc. if you want to style | surrounding elements differently depending on their child | content. | [deleted] | ezfe wrote: | Inert is needed for <dialog> | laundermaf wrote: | Your comment reads like a lot of complaining by someone who | doesn't do a whole lot of CSS. | | You're complaining about the mere availability of color | functions, that alone kills the rest of the comment. | dimmke wrote: | I recently implemented layers on my site https://daniel.do/ and | honestly found it really helpful in terms of explicitly | organizing specificity. | | It also gives you a much clearer idea of where in your styling | stack something is coming from. | | > Container queries | | Have you ever built a piece of functionality that goes on pages | you don't control? For instance, I built software that | displayed a map on people's pages. but I don't know the width | of the map itself. They could be displaying it on the full | width of their page or in a container. Media queries don't work | in this scenario. Making the map correctly responsive forced me | to use JavaScript to get the element's width. | | The other solution people have for this is iframes, which suck | too. | | Just because you don't have a need for something doesn't mean | nobody does. | willio58 wrote: | I'm building a CMS and container queries will make the | components I build sooo much better. | jacobsimon wrote: | Container queries is a big deal in my opinion! This has always | been an obstacle for designing responsive components - they | only respond to the size of the screen so designing them for | use in different places in your app is difficult. | | But the implementation they've chosen with named containers is | not my favorite. I'd prefer one that is simply based on the | parent component or the closest component with a container | attribute set; this would work better alongside tools like | Tailwind and CSS-in-JS. | | Edit: Nvm after reading more, it looks like the container name | is optional and the default behavior is what I described - | excellent! | djrockstar1 wrote: | Yeah container queries are what I'm most excited about | looking at this list. I was pretty bummed out to see they're | only supported on 63.75% of browsers, and notably missing on | most mobile browsers, where they'd be most useful. | willio58 wrote: | Container queries allow devs to step away from the classic | small, medium, large breakpoints for screen sizes and | consider the best look for a certain component at different | widths. This is much better because a component on screen can | be affected by many different parent element's breakpoints, | so it's hard to define when a screen size should affect a | component. With containers, it's very clear. | wbobeirne wrote: | Inert is nothing new, you could already use pointer-events: | none or tabindex or put a transparent div on top. This is just | a better way to hint to the browser your intent, and for it to | behave properly. | willio58 wrote: | Does pointer events block focusing with a keyboard though? | gherkinnn wrote: | 10 years ago people said the same about the CSS3 changes. | | I find most of this useless/overcomplicated. Who needs rounded | corners? I like my png slicing. And what are box shadows | anyway? There's nothing flexbox can do that I can't achieve | with tables. Transitions are bad, transparency is for Apple | fanbois, animations the devil's farts, and don't get me started | on media queries. Phones should remain Nokia bricks. | | This isn't even a straw man. Further down we're still having | the tables vs CSS debate. I'm so happy we got all of the above | and more and can't wait to see what's next. | Max-q wrote: | I can only remember that we applauded CSS3. Rounded corners | and shadows were crucial to implement the design of the day. | Animations and transitions were lovely. It was an exiting | time to make stuff. | commandlinefan wrote: | > 10 years ago people said the same about the CSS3 changes | | In OP's defense, I still say those things about the CSS3 | changes. | arrow7000 wrote: | Good for you. The rest of us will be using these new | features to make great websites with far less wasted time | and effort than before. | arrow7000 wrote: | Exactly. Thank you for saying this. The curmudgeonliness on | HN is ridiculous. | RunSet wrote: | I suspect google wants Turing-complete CSS to make it easier to | invade privacy when javascript is disabled. | | Letting the world's largest advertising corporation be in | charge of browser standards is probably not the best idea. | Octoth0rpe wrote: | > [re: layers] If you keep the cascade small and clean, you'll | most likely not need that. | | Many of us are not in that state due to piles of tech debt. One | of my work projects is modernizing a 20ish year old, 300 page | php app, and the css tech debt is awful. We're all looking | forward to layers for some sanity. | | (strong agree on your other points) | clairity wrote: | :has() is my most anticipated as well. it has the biggest | potential to not only simplify our html (e.g., divitis) but | also remove the need for js compensations in many content- | oriented sites. come on firefox, let's get :has() across the | finish line! | | container queries are also neat, but still rely on having a | wrapper container, which isn't ideal--why can't i style the | component itself based on its own calculated height/width | rather than having to involve a parent element? | | i'm still waiting for chrome to implement subgrid, which will | simplify any kind of card-type layout. | | i also wish we had native "mixins" (@apply had this potential, | but it was removed from the spec), so we could have a bundle of | styles we could inject into different declarations as a group. | then you could have different sets of styles in orthogonal | groups (layout, spacing, border, text, inline) that you could | apply in any combination. this is especially useful if you want | to style a base html element a certain way and then also have a | utility class with the same style later in the stylesheet (with | maybe a slight tweak) that can be applied to more than just | that type of element (like <div>s, <article>s, and <section>s). | | edit: oh, and lch/oklch for more perceptually uniform and | expanded colorspaces, combined with the new color functions | (e.g., color-mix) is exciting too. | jetzzz wrote: | What's the purpose of having 4 linear color spaces (srgb-linear, | xyz, xyz-d50, xyz-d65) for interpolation? Linear interpolation is | exactly the same in any linear space. Indeed, in provided | gradient examples these 4 look the same. | Sesse__ wrote: | The CSS Color (Level 4) spec allows you to interpolate in any | color space that you can specify colors in, and all of these | four are considered useful to specify colors in. (Or at least | useful enough to make it into the spec :-) ) This leads to some | redundancy in this specific context, but the alternative would | be disallowing three of them in interpolation only, for no good | reason at all. | colejohnson66 wrote: | Because they're (idealy) not linear, I'd assume. Gamma | correction[0] is an exponential-like function. Hence, sRGB vs | "sRGB linear". Despite what many people think, sRGB color | #808080 is _not_ 50% the brightness of #ffffff, but about 75%. | All because our eyes are non-linear. | | Color math is a massive rabbit hole that deserves its own | "things programmers believe about..." | | [0]: https://en.wikipedia.org/wiki/Gamma_correction | seydor wrote: | Grid is crap. Html tables were much easier to handle, they should | have gone with <grid> tags instead (since tables have been | declared toxic). The cryptic nature of the grid layout units is | something that seems deliberately obnoxious | | who the f thinks this is readable: grid-template-rows: auto 40px | 1fr 80px; | duxup wrote: | Tables were terrible. | | But there is the middle ground of flexbox... honestly flexbox | seems to work in nearly everything I use. | seydor wrote: | flex is ok, and actually fills a need, but can it be used to | make e.g. a chat layout? | | i don't agree btw. grid is voodoo declarations that is worse | than tables. pretty much need to stackoverflow to do anything | duxup wrote: | >but can it be used to make e.g. a chat layout? | | I don't see why not. | [deleted] ___________________________________________________________________ (page generated 2022-10-21 23:00 UTC)