I've seen a lot of posts about people despising css but I don't truly understand why. Is it the lack of foundation? Is it the specificity or the abundance of properties? If you guys want, I can create a multi-part series of CSS starting from the absolute basics to the advanced properties of CSS or I can create a huge cheat sheet on it for an easy bookmark. Let me know what you think of CSS in the comments and should I create an in-depth post or cheat sheet about it?
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (33)
Cause it's out of their expertise. And even alien to their main way of thinking.
CSS has a logic behind it, but it's declarative nature makes it closer to linguistics than to the logical mindset of imperative programming or the spatial thinking of design.
People hating on CSS are either programmers or designers that are trying to shoehorn it into their way of thinking instead of taking the language for what it is: a language.
CSS describes the interface, provides suggestions for the browsers that at the end of the day have the final word on how things are rendered.
That is very different from drawing in a known-dimensions, fixed canvas as designers normally do, and even quite different from the set of logical instructions we write in traditional programming
That is very true and I didn't really think about that because truly, CSS is incomparable to any other language, whether programming or not. However, I do think CSS leans a lot more on rules and understanding on how some things just work than logic unless you are using SASS and making functions and for loops. Overall, thank you for explaining some things I didn't really consider when writing this ❤️
Yeah, it's not like CSS is directly comparable to a spoken language, but the mechanism behind it are. Linguistic intelligence is linked to pattern and contexts recognition.
In all spoken languages a given word can have different meanings based on the context. Think for instance the word "lead". Without context, you can't really know what it means. You can't even know how to pronounce it.
Is it a lead as in “being in the lead”, the best position in a race? Maybe it’s lead, the toxic, radioactive metal we used to have in our house’s plumbing It may not even be meant as a noun but an adjective, as in "lead developer", meaning you’re in charge of the group. Or maybe as one of the 40 ways it’s used as a verb.
That same thing happens with CSS. A given instruction can mean a million different things, depending on the stacking context, the display property, block formatting context, etc.. even the relation of the given element with its siblings, parents and childs.
In CSS, just like in a spoken language, context is everything
I do understand what you mean by CSS needing context but from my current knowledge, it is not an absolute deal-breaker if you don't have any preconceived knowledge or context to it. For example, I can have about 5 props to this specific class selector and I can more or less depict what is happening to it. Granted, I will not know where or how it looks in the viewport because other selectors like the parent will have a direct impact on it but I am not totally in the dark of it either.
You can with a rule such as "color: red". The color is going to be red, unless overwritten in a high-specificity selector or something that takes priority on the cascade.
But how about something like "flex-basis: 200px"... that doesn't tell you anything on its own. Doesn't even tell you if it's width or height, as it would depend on the flex-direction. Doesn't really tell you how big it's going to be, as that would depend on the siblings' flex-basis, their flex shrink and flex grow values, the container width, the margin, padding and box-sizing, etc
Actually, it doesn't even tell you if it's going to do anything at all, as that depends on whether the parent is a flex container or not.
Yeah, now I do understand what you mean by CSS being extremely dependent on context. Now you saying that, it dawns on me that every single property could have the potential of not working if the html elements have inline-styles to it. Thank you for going out of your way and truly explaining this to me
Exactly, lot of people will disregard CSS as "not true programming", only as as strategy to hide the fact they can't use it properly when they face it.
I love the linguistic analogy. Everybody knows how to write, not everybody is Shakespear though… There is beauty to CSS (or similar declarative languages like LaTeX) and it's harder than it looks to find a simple, maintainable solutions, but it's a super efficient way of programming actually (entirely stateless!).
Now there is a second thing people hate: CSS is messed-up by three decades of browsers evolution. Some people will mix that reality—it's not a perfect world—with to dismiss the premise of the language—a declarative, stateless way to style.
Not the whole story, but here are some thoughts:
The first 2 points definitely make sense but CSS has been getting better over time. It is definitely not a programming language and maybe programmers think they can just write a few lines easily but it should almost be treated as one. Old CSS was very hard but we now have easy props like flexbox and grid to make responsive designs 100x easier. If a web developer is working with css, they can easily use the BEM naming convention and/or make modular css files to really make css "easier" to write and understand.
I ♥ CSS. I just don't have time to catch all the new improvements that are supported by all major browsers at the time. 😅
I would throw another question to this, to make it a little less emotional: Why is X different?
From here on there will still be (flame) wars, but I have the feeling, that people don't hate the topic or object, but their own experience with it.
Some are reinventing things to make it more workable, and that is fine. You always want to make your work easier. Just look at all the CSS frameworks, CSS-in-JS inventions, and more crazy ideas you could never handle by a healthy brain, but it works for machines and software 🤷♂️
And it can't be hate when you did not loved it before, right? 🙃
Totally agree. There is so much css features and overall new things being added and different ways to write it but i see it like an 80-20 rule. 20% of what you learn in css (mainly fundamentals) will be used about 80% of the time.
It's pretty hard!
Programming is hard in general🥹
When people talk about programming they are usually referring to imperative programming and CSS is declarative. Experience with imperative programming is no help with CSS or visual design.
It wasn't until ITCSS that I got a better grasp on the design philosophy behind CSS.
And frustratingly learning CSS doesn't move towards building design skills. Those are separate, unconnected skills and people don't usually practice design in the browser anyway. Web designers handing over designs to front-end developers smacks a bit of waterfall to me.
Right now everything is component-oriented and while CSS can be used for components it's much broader than that. As outlined by CUBE CSS it all starts with the page composition—that's an "outside-in" approach while components are an "inside-out" approach.
CSS was deliberately designed to let the global visual design "leak" into the blocks in order to create a more cohesive overall look.
Components tend to want to be autonomous and protective about their styling but often don't differentiate between their structure and skin (i.e. the global design should affect the skin but not the structure). So often components need to utilize design tokens in order to be consistent with the global, overall design.
CSS is great with a little help from some friends I still use post CSS and it's fine
At first I strongly disliked CSS and it was one of the main reasons I stayed away from front-end development for a long time. I'd always end up creating a crooked and unaligned mess of a site whenever I attempted it. It wasn't until I took a step back and re-learned some of the basics - most importantly the box model - that I started to gain a strong understanding of the framework the language was laying out. Plain CSS still feel tedious which is why I use SASS now. but I believe anyone can conquer it if they take a few days to learn and understand it's core principals.
In my own very subjective experience
CSS
gets a lot of roasting because of its early days. In the early 2000s there were many browser engines with half-baked implementation of the standards.You built up your site in Internet Explorer 6? How cute 🤩. Now it looks like crap in Firefox... One browser had default margins and paddings, the other didn't, things that were not exactly specified by the standards (like negative
margin
values) got implemented in widely different ways and so on.With the unreliability of the effects of the declarations, it soon became a running joke to struggle with
CSS
, and people often felt it is witchcraft instead of engineering. Witchcraft in the sense that you have to inherit a recipe for a concoction from somebody as you have no chance figuring it out yourself: "Well, you know, what you wrote is OK in this browser but now just copy-paste this block to make it work in everything else."Though language itself was mostly logical (there are still issues coming from the huge vocabulary you need to learn), but its support was not; you had to learn a ton of non-reusable workarounds, that made it unpopular. (I wrote about non-reusable knowledge: it is a must to be an effective engineer, but you hate gaining every bit of that knowledge...)
That was one source of unpopularity. The another one was a missing dimension of freedom.
CSS
was intended to describe documents in an effective, overridable way: with a couple of great rules you could style a huge amount of documents with very little code.But the same thing did not work when you had multiple teams working in a big application. When one team had its implemented its own
notification-dot
and then another team their ownnotification-dot
declarations, the resulting conflict meant that things were breaking without warning. The language itself did not have a trivial, explicit way to express isolation from other's code (with the advent of CSS layers, we might have this ability).And in a big corporation isolation is important thing as people does not have the time to ask every team's every developer if it OK, that they will have a
.notification-dot
class.Then people started "fixing"
CSS
by inventing abominations that went against the nature ofcascade
and caching, like forcingCSS
to be created duringJS
runtime to be tightly linked to the one component it was used for. This essentially robbed the browser engine to effectively cache stylesheets and speed up rendering.But in 2022 the standard got adopted pretty well, most browser engines are gone and there are very good training materials. So it is time to embrace the
cascade
and write smart, fluid designs. (Tip: Every Layout -> one of my favorite new sources).I still love CSS
I love CSS ,and I think we should not consider CSS to be a programming language. CSS has nothing to do with programming. It's more like rules of settings. We may break the rules if we don't understand it enough. I heard people hate CSS simply because they don't thoroughly understand, and it's very likely that they may build some crazy things with wrong ways.
Unlike programming languages that keep changing a lot every year, once we know CSS rules, we can just follow it to do lots of things for years. It really pays off to fully understand CSS details, and that's why I love CSS.
They find it hard, and "hate" (or dislike, or whatever) is people's emotional reaction to the fact they find it hard and are unable to wrap their head around it.
There was another post about this subject, I added a comment there that might be relevant: dev.to/leob/comment/1p0gp