| ▲ | I spent years trying to make CSS states predictable(tenphi.me) | |||||||||||||||||||||||||
| 40 points by tenphi 12 hours ago | 10 comments | ||||||||||||||||||||||||||
| ▲ | wewewedxfgdf 4 hours ago | parent | next [-] | |||||||||||||||||||||||||
My final conclusion about CSS is - program the damn machine. What I mean by this is STOP every single type of abstraction/library/programming layer for CSS - nothing gets it right, everything causes a problem. The ONLY way to deal with CSS is program it directly in the way the docs say, never anything else. There's nothing wrong with using Bootstrap or whatever, and I definitely use JavaScript to program CSS. What I am saying is - no abstractions - no "better way" - no trying to turn CSS into something it isn't via whatever your new abstraction is that can be added to the N other abstractions that other people have made over the years. Program the damn machine. | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
| ▲ | grebc 29 minutes ago | parent | prev | next [-] | |||||||||||||||||||||||||
I’ve made some gnarly custom forms over the years but never quite run into the problem you’re describing. These days if starting a greenfield web app, each page has its own style/css sent in the head tag. Because it’s usually just base layout + page specific styles/overrides then it barely adds any overhead in the scheme of things(couple of extra KB). Maybe the base layout could be moved into a static file to be cached but whatever, it’s already ridiculously quick to render plain html/css. | ||||||||||||||||||||||||||
| ▲ | Pikamander2 an hour ago | parent | prev | next [-] | |||||||||||||||||||||||||
Personally I just increase the specificity as needed. .thing .thing-container .thing html body .thing-container .thing.thing.thing.thing | ||||||||||||||||||||||||||
| ▲ | tenphi 12 hours ago | parent | prev | next [-] | |||||||||||||||||||||||||
Happy to take questions! I built this because I kept hitting the same wall: CSS state resolution is opaque when states overlap, and extending components means mentally re-deriving the whole selector matrix every time. Some topics I'm curious what people think about: - What’s the one thing this doesn’t cover that you’d expect it to? - Does the syntax feel natural to you, or did you find yourself confused by anything? - I'm looking for edge cases: what kind of complex selector scenario would trip this compiler up or be impossible to express with this model? AMA—happy to answer any questions about the tool, the implementation, or the design choices. | ||||||||||||||||||||||||||
| ▲ | chrismorgan 6 hours ago | parent | prev | next [-] | |||||||||||||||||||||||||
This sounds interesting, but I’d need to think about it more so I could picture how things fit together as they get more complex and different styles logically overlap. This looks to head in the utility direction possibly too far for that to work nicely. But it may well work better than I’m initially imagining. Unfortunately I can’t give it more attention now, because I should have gone to sleep a couple of hours ago… —⁂— Another approach entirely is to embrace last-declaration-wins, by :where()ing everything:
I’d be interested to know which approach performs better once you have altogether too many elements and altogether too complex selectors. I suspect the :where() would win, but that the difference would be impossible to detect in any sort of realistic load. | ||||||||||||||||||||||||||
| ▲ | porsager 5 hours ago | parent | prev [-] | |||||||||||||||||||||||||
Probably because you aren't using Sin | ||||||||||||||||||||||||||