Live data from Hacker News

Why I Write CSS in JavaScript

mxstbr.com

81–90 of 255 posts

Re: Why I Write CSS in JavaScript

#81
post #47

We built a relatively large social media management platform, and for one of our major features (a streams page that shows social media activities from different sources), we put a lot of our css in JS including all the logic for stream sizing/resizing and page responsiveness. I can honestly say that this approach is terrible. It is a maintenance nightmare. Even the smallest changes require a ton of time. We're now r…

... especially web designers.

What are you trying to say?

Re: Why I Write CSS in JavaScript

#82
post #47

We built a relatively large social media management platform, and for one of our major features (a streams page that shows social media activities from different sources), we put a lot of our css in JS including all the logic for stream sizing/resizing and page responsiveness. I can honestly say that this approach is terrible. It is a maintenance nightmare. Even the smallest changes require a ton of time. We're now r…

Why can't we see more of these stories surfacing on the internet. All I see when I search for CSS-in-JS on google is how, CSS-in-JS is so great.

Why don't we have more : "We tried it, it is the worst, especially for products which lifespan is more than two months"

Re: Why I Write CSS in JavaScript

#83
post #30
post #2

Author here, happy to respond to any questions. AMA!

Why do you think CSS-in-JS has only caught on in the React community?

Probably because it's the only one among major popular frameworks that doesn't use weird compile-to-js templates, and relies on JS only.

Others (I'm thinking Angular and Vue) have their own templating systems that they compile to JS anyway.

Re: Why I Write CSS in JavaScript

#84

I understand the "pit of success" idea, particularly when it comes to more junior devs. But I don't necessarily agree that you need stringent processes to get most of the gains you cite from using something like SCSS or even regular CSS these days. It's really easier than ever. 1- append only? No, each module/feature/widget gets its own CSS file, imported to the main app CSS file. Delete the widget? Delete the file.…

I agree with you. I've done both approaches at scaled, and I'm still not really sold on CSS-IN-JS. Of course, I think it's a matter a taste (and maybe experience?) so to each its own.

Personally I much prefer using separate css (or sass) file, one for each component (assuming you also have a "layout" component for shared styles) and import each relevant css file as a module.

This way you keep writing our CSS out of your JS, but still can keep it scoped to your component. It's also obvious what css a component uses, and each to grep for when you want to delete some css.

Re: Why I Write CSS in JavaScript

#85

In my opinion this is a workaround for a language flaw in the React concept. Look at this beauty for comparison: https://vuejs.org/v2/guide/single-file-components.html

> a language flaw in the React concept. What language are you talking about? React is Javascript > Look at this beauty for comparison Meanwhile Vue is neither HTML [1], nor strictly speaking CSS [1], and has a very wierd concept of how objects work in JS. [1] It's a templating system with its own rules and mini-DSLs that ends up being compiled into JS.

AFAIK you can't have non valid CSS in the style tag of a SFC, so, strictly speaking, it is CSS.

Re: Why I Write CSS in JavaScript

#86
I've been doing almost the opposite - enhancing and extending valid CSS stylesheets by using JavaScript to define new features and functionality to be made accessible and usable by writing valid CSS.

An overview of my tooling and workflow is here: https://github.com/tomhodgins/caffeinated-style-sheets

The big idea being that CSS should be able to apply to _any_ HTML, no matter how it was created before it got to the browser. Many style-related tools integrate tightly into your framework or into one particular workflow but don't give you the flexibility you need to apply any styles to any website unless it happened to be put together with specific tools a specific way, but I don't think that provides enough flexibility.

Re: Why I Write CSS in JavaScript

#87
post #12

CSS in JS is one place where Vue has a substantially better experience. Being able to toss scoped-css, written as normal in a css block is what I call nailing the developer experience. It is all the best parts of css in js with none of the downsides.

You can do this with styled-components in react too. https://www.styled-components.com/

Yea, but this isn't out of the box. This is some 3rd party solution for a pretty major part of an application.

Re: Why I Write CSS in JavaScript

#88
Thought experiment: imagine doing React development with all inline styles. Someone invents CSS. Would you use it?

Of course not: CSS is a bad idea in 2019. In 2004 it solved some of the problems we have React to solve today, but much, much weaker

Re: Why I Write CSS in JavaScript

#89
post #33

If you make sure your site works without javascript as well(unless it's actually an app) it's fine by me.

This is a requirement that most sites can simply dismiss these days. The distinction between an app and a website is blurry, a lot of interaction simply works far better with Javascript. Supporting "no Javascript" can be costly. It's possible with server-side React and careful engineering, but why bother? What's the impact on the business?

I don't know what the real impact is, but if your site shows me blank page without javascript(I have it off by default) I am closing the tab.

I don't think supporting noscript version is costly because for me that's how it supposed to be by default. 90% sites that are currently on the internet would work just fine without any js and 95% would work with as little as hackernews has. Modern CSS allows to create most of the experiences and unless you need some interactive forms or serving live broadcasts, games etc., there's just no point in using javascript.

Over the years I've stripped javascript from about 40sites which I visit daily without sacrificing any real functionality. Those sites download and render visibly faster, only relevant cotent is shown and I even implemented dark theme for them. My only javascript fixes are for broken galleries or embedded videos (and those wouldn't even be necessary if developers wrote a fallback to noscript).

It used to be that developers loaded many little scripts so I could only block the useless crap but since everything is minifed and bundled in one huge unreadable file, I just use uMatrix to block it entirely and Stylus and Tampermonkey to fix it.

Re: Why I Write CSS in JavaScript

#90

In my opinion this is a workaround for a language flaw in the React concept. Look at this beauty for comparison: https://vuejs.org/v2/guide/single-file-components.html

> a language flaw in the React concept. What language are you talking about? React is Javascript > Look at this beauty for comparison Meanwhile Vue is neither HTML [1], nor strictly speaking CSS [1], and has a very wierd concept of how objects work in JS. [1] It's a templating system with its own rules and mini-DSLs that ends up being compiled into JS.

> and has a very wierd concept of how objects work in JS.

What is so weird about it? I personally find Vue vastly more approachable than React is, especially once you have to start writing all the plumbing to get all the libraries you need to go along with it to write a real world app.

> ] It's a templating system with its own rules and mini-DSLs that ends up being compiled into JS.

Vue has the option to use Webpack to compile html compliant templates to JS functions just like JSX (which BTW is not JavaScript and not HTML compliant and is also a separate concept that needs to be learned as well.)

CSS is just another add-on through Webpack when using Single File Components. Nothing really ground breaking here except for the fact that it creates a nice separation of concerns. This is especially true on teams with junior devs or designers. Or with a team that works on a site with mixed MPA and SPA features.

Post reply on HN