If the designers of Unix had seen the light of CSS, they wouldn’t have bothered with shells and file descriptors and C and Awk and all that composable flotsam.
They’d just created a single program, call it the “Central Software System”, and defined thousands of properties that let you control its state machine to produce the output you need.
Presto! The perfect computer. If for some reason someone needs a new kind of output, it can be added to the Central Software System via a friendly decade-long committee process.
And if the properties happen to conflict in how they define some output, well, the one company in the world who has actually implemented all of this “open standard” can decide what happens in that case.
It’s almost - almost! - as if the designers of Unix and of CSS work in completely different scenarios and with completely different constraints! Almost!
And with this convenient domain excuse, CSS has managed to become a system that’s not a fit for any domain.
It’s incomprehensible to visual designers, incomprehensible to programmers, and incomprehensible to document authors.
On the upside, it provides a massive moat of sunk cost and implicit implementation dependency around Chromium, so at least there’s that.
It’s always funny to read people that just never understood CSS trying to convince everyone that CSS is impossible to understand!
Yes, that's fair.
Sure, today we have grid and vanilla CSS is sane and useable by anyone who takes the time to learn the modern way of doing things.
But let's not forget what a long and tortured road CSS has taken to become what it is today. CSS was a total dumpster fire up until around when flexbox came out. It was SO HARD to make it do what you want for SO LONG.
The MOST BASIC NOTION of layout, putting things in a freaking grid, was missing from CSS for almost two decades. Yet, the grid concept has been around in application layout since the 1980's. I can't explain why it took CSS such a long time, and the explanations I've heard don't seem plausible to me.
It's understandable that folks who were around in the bad days of CSS are still kind of bitter. I was, and if I didn't take the time to see the new ways of using it, I would still be incredulous about CSS.
This is not true. CSS have had ‘display:table’ for 25 years, which is a simple grid layout model equivalent to html tables. Content can be aligned in rows and columns.
‘Display:grid’ is much more powerful of course.
Yeah, I remember those. It was intended as a way to make "tables" using divs.
That way, we could pretend to do page layout with CSS, while still feeling shitty about repurposing something meant for tables.
There's just no justifiable reason for putting whole-page lay-out on the back-burner for so long. So many other far less important things came out before grid, it feels almost like it was deliberately spiteful to delay it so long.
Why would you feel shitty about using ‘display:table’?
It puts things into a freaking grid as you asked for.
It is weird to look back on but the web platform essentially went through a dark ages for a while. You could say the same about why it took us so long to get to ES6 JS, too. The standards bodies were frozen in ice (and I don’t quite know why either), everyone was debating HTML5 vs XHTML and somehow the rest of the platform floundered for years.
Microsoft failed to capture the internet. IE6 can still cause sane minds to crack.
I'd be surprised to hear anybody with intimate knowledge of CSS claiming to understand CSS.
it's better on HN because you can get it combined with snide insinuations that they could have created a better layout system that would do all the things that CSS does, but also fix the various problems that CSS has.
However the glory days are evidently behind us, because these insinuations never end with "in a weekend" anymore.
Maybe you need better glasses. This proposal is coming from the Webkit team, ie. Apple. CSS is plenty comprehensible and using it gets better with every browser release as they are focused around yearly interoperability efforts.
AFAICT, practically nobody picks WebKit over Blink/Chromium for new projects.
The reasons why Apple still maintains their own browser engine have to do with corporate prestige and expensive insurance policy. They can afford it because Apple is literally the world’s richest corporation.
Nobody else does anymore. Even Microsoft gave up on their own browser engine despite having 97% market share two decades ago. And Mozilla is bankrolled by Google as their own kind of insurance policy.
Safari has 24% of the browser market.
Not on merit but simply by being the only allowed option on iOS. Nobody chooses Safari because it runs WebKit instead of Blink.
I happen to quite like CSS (in comparison to any other layouting system out there), but I really wouldn't characterize it plenty comprehensible.
I'm quite certain there's no human on earth that could reliably predict the outcome of most non-trivial real-life CSS layouts given just the code. And even though the situation has improved a lot, it's still common to have to use clearfixque hacks that definitely weren't envisioned by the commitees.
Isn’t that true for most software? Do you think you can simulate the outcome of a semi complicated Python Codebase just by looking at it? That’s just an intrinsic property of the problem you’re dealing with, adaptive page layout will always be complicated and not easily understandable just by looking at code.
I think I'd have a lot better shot with a semi-complicated Python codebase to be correct. Even with GUI stuff if using something like e.g. Qt box layouts.
Yes, CSS is a lot more powerful than those kinds of systems. Perhaps comparable to constraint satisfaction layouts that tend to be quite surprising.
But even so, there are so many settings and their combined behavior in CSS that it's, for me at least, totally infeasible to try to code much CSS "up-front" without constantly checking the result of the changes. And I don't mind it that much, but I'm quite certain that a more "predictable" equally powerful layouting system is entirely possible.
It could be an interesting challenge to show people some layouts and ask them to produce them using CSS without being able to iterate the results.
I’m a web programmer and I find it comprehensible. Sure there are times I need to go to the docs but vast majority of the time I can work with it just fine. I’d agree that it probably is incomprehensible to many visual designers but unfortunately so is code in general. CSS is complex, especially these days, but I feel like those who don’t work with the web every day simply don’t get to experience it often enough to know that it does make sense within its domain.
But sure, if you want, CSS is a conspiracy theory to ensure the dominance of Google.
It’s not a conspiracy. It’s a well-intentioned but poorly thought-out design for basic 1990s word processing layouts that accidentally blew up to describe entire application GUIs, and now it’s not in the interest of the stakeholders to try to do anything about it.
It’s the same kind of growth pattern as government bureaucracies. Those are largely not conspiracies either, despite the occasional optics.
What you’re describing is the organic growth of a platform. The web is undeniably more complex than it was twenty years ago but needs are more complex too. Yes, the complexity does benefit major players but that isn’t the reason the complexity exists.
It’s ironic you’re saying that CSS is some form of vendor lock in. I have to imagine that if Google proposed a new layout engine for the web tomorrow they’d be roasted to kingdom come for their attempt at taking over the web.
Of course it is, there is even the word "masonry" in TFA's name!
Not fit for any domain? It's one of the most widely used "programming languages" in the world. It's clearly fit for many domains I don't know why people have to be so dramatic with their tech opinions
I don't get the drama either. The issue I have with CSS is less about the spec itself, and more about browser compatibility. I'd be dead with caniuse.com and MDN. Having said that, when I build a new page, I rarely need to spend more time laying out the html & css than it takes to type it out and test. Creating cross platform, responsive web pages is a solved problem now.
What would you propose instead that is comprehensible to visual designers, programmers, and document authors?
The inane and utterly incomprehensible toolset that they happen to be more familiar with, obviously. Some people take their ball and go home after they can’t work out how to centre a div, after decades of having “HTML and CSS are for the ‘stupid’ developers” drilled into them, and thinking that they can intuit it.
And yet, somehow, I browse websites using CSS successfully every day. Reality disagrees with your narrative, which is nothing more than a pandering "CSS bad" with little substance. "Not fit for any domain", "incomprehensible", these insults are based on what, exactly?
It's honestly not that difficult at all, saying that as a designer.
I will concede to an argument that CSS exemplifies "design by committee" pejorative and is blighted by backward compatibility woes, but rest assured, it does its job as best as it can. Web development has patchworked its way out of most problems it has created, making it somewhat burdensome to learn. I'd say that is its Achilles's heel.
Nonsense. CSS works. It has its quirks, but what doesn't?
What I do see here, is one of many cases of "I don't understand it therefore it is dumb because it can't be my fault".
While I agree that CSS is sometimes difficult and obtuse, and getting things working in it is more of an art than a science, it's actually shockingly easy to get basic layouts working in it these days even as a total beginner. CSS is very powerful and you can learn the basics very quickly.
It's also worth keeping in mind that CSS is sometimes more complicated than it seems like it should be due to accessibility concerns and flexibility. That's why you can take some HTML produced by some part of your system and use it in completely different contexts with totally different designs, entirely as is, just by adding a few different rules.
I've been doing HTML dev since the late 90s and things were infinitely more difficult back in the old days. CSS might have been simpler, but doing complex things required tons of bizarre hacks that also made your design more frail and less accessible. These days CSS has improved to the point where you can do just about anything, and even very complicated effects can fairly easily be deconstructed just by looking at the devtools and poking around until you get it.
CSS isn't perfect, but all things considered I'm not complaining.
But your favorite 20% of CSS (just like in the old days + some of the new features) fits nicely for web design.
CSS may be complex, but you get a huge bang for the buck in terms of UX, rendering performance, flexibility, accessibility, compared to most drawing and layout systems. You could argue against border-radius and flex as well, but Im glad we’re past clearfix and gifs for corners. Does masonry layout qualify for becoming standard? I don’t know.
This is just an accident of history and not because CSS has anything that makes it intrinsically better than the alternatives.
Accumulated garbage for backwards compatibility? Let him who is without sin cast the first stone.
I’m not saying css is intrinsically better (what does intrinsic even mean in this case?). It’s pragmatically better than anything else I’ve seen. It’s dead simple to learn and use, and (almost) fully declarative, and degrades gracefully. Just show me a better alternative and I’ll change my mind.
Anything other than existing.
CSS is quite a mess, and I would welcome a backwards-incompatible new layouting system, but all the alternatives out there are a lot worse.
You can say that about almost any abstraction layer
The WPF has easy to use grids and layouts, a sane default styling yet is very to completely overhaul. CSS is a failure by design.
Yes, but that's a completely different point
What is the composable unix approach for layout/graphical interfaces?
Tcl/Tk ?
When you had enough of using text as the single data structure in a shell, you can start doing the same with a GUI toolkit.
Tk has basically the same model as CSS, except that it's not strictly hierarchical. (Though CSS has that now, too: https://developer.mozilla.org/en-US/docs/Web/CSS/@scope)
Did the designers of Unix also have to ensure compatibility with billions of devices connected worldwide running different software stacks?
Also as mentioned in the linked article the masonry layout is already possible with JS, no decades-long committee process needed. It's just about standardizing something frequently used.
It's fine, just run ./configure before compiling.
The point GP is making is that they didn't have to, because the architecture made it infinitely configurable while remaining coherent.
Billions of connected devices worldwide do indeed run on *nix with a mad variety stacked on top.
I didn’t realize this was satire until the second paragraph. Well done.
As a firmware engineer who is trying to build a website in his spare time, I find CSS absurd. I’ve found SCSS and Sass make it much more bearable. The ability to represent a hierarchy concisely is awesome.
CSS is adding native nesting: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_nesting...
Is this a sysvinit vs systemd rant?
What dynamic layout system is it that ships in posix again?
They would probably also use regular expressions and incomprehensible $ and \ escape codes to retain some of the fun.
the committee process is probably down to about 5ish years now? I feel like people who complain about this weren't around when the process was "20 years from now when we can drop IE support" — velocity has improved significantly
Was rather hard to tell if you're joking or not, seeing how every trivial program today wants to have Electron with it.
Trusting us plebs with universal turing machines is unacceptable. There's a config/app/saas/appliance for everything you need to need.
I want to say something about monolithic kernels but I’m too scared.
Nixos?
Um, err, POSIX.