frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Pico CSS – Minimal CSS Framework for Semantic HTML

https://picocss.com
222•mpweiher•4h ago

Comments

luckylion•3h ago
I suppose the title should be _Minimalist_ CSS Framework. At 71kb it really isn't minimal.
jonahx•3h ago
Indeed. I was expecting 5-10Kb. Tbf, it's only 11 zipped.
sixtyj•3h ago
At Neat CSS website author says that zipping needs some action at browser side and it is not worth it for small css frameworks…
d1sxeyes•3h ago
That’s if you load it all from the CDN though, build your own with SASS and it’s much smaller.
drewbitt•3h ago
I agree. beercss is less than 20kb and about the biggest 'minimal' I would consider
kozika•3h ago
There is also a semantic-based CSS that is overwhelmingly smaller than this one: https://newcss.net/

And I think this is so minimal

bdn_•2h ago
New.css developer here, thanks for sharing :)

I’ve been thinking about creating a CSS tool somewhere about halfway between new.css and Pico CSS for very basic page layout tools (containers, callouts, menu bars, etc) that still focuses on being extremely small and performant.

I feel that a tool like that would be helpful for laying out a simple but functional site (sourcehut’s site [1] comes to mind) where you need a few basic layout tools but don’t need all of Bootstrap.

[1]: https://sourcehut.org/

codazoda•1h ago
I’d love to see NeatCSS on your list. It’s not officially classless but I try to make it semantic as much as possible. I bookmarked you GitHub repo (which you should link on the page if I didn’t miss it). I’ll give it a try myself to see if it works (and maybe make adjustments).
sroerick•48m ago
I think this would be excellent. There's a whole class of websites /landing pages which right now Astro seems to be filling that niche. It's mind boggling how hard it is to do basic components on the web
vehemenz•2h ago
Tailwind is semantic too because the class names say what they do.
imiric•9m ago
That's not what semantic means.
poidos•3h ago
Love pico. It’s my default starting point for nearly every side project. Sometimes I will reach for Neat [0] which is a great deal smaller.

[0]: https://neat.joeldare.com/

codazoda•1h ago
Whoa, that’s mine. Thanks for the mention. :)

I use it for almost everything. I just made a note to try it with the demo and to steal some ideas from pico (while keeping the size of neat tiny).

tcdent•3h ago
yeah but does claude know how to use it?
mariocesar•3h ago
Yes it does
lagniappe•3h ago
Claude knows how to use plain HTML.
minimaxir•2h ago
LLMs may know the v1 version of PicoCSS, which has some differences from the current v2 (e.g. no SASS).
dalemhurley•1h ago
agents.md will help if it doesn't
xutopia•3h ago
I can't possibly recommend class based CSS soup anymore. Once you go with utility classes it's hard to go with anything else. It's super intuitive, you don't have to dig through loads of CSS files to figure out where the CSS is and you can simply remove or add classes as you need and see it right there in front of you.
nailer•3h ago
> I can't possibly recommend class based CSS soup anymore.

Me neither!

> you can simply remove or add classes as you need

That sounds like exactly what I was thinking when you said class soup.

> you don't have to dig through loads of CSS files to figure out where the CSS is

The CSS should be in your components, or in a .css file beside your components at worst. React having bad defaults doesn't need you need to change to adding 20 classes to every HTML element.

librasteve•2h ago
this is exactly correct … Gnat CSS is a great way to police encapsulation imo
vorador•3h ago
It really feels like all these concerns about semantic everything belong to a previous era of the web. I remember arguing with people 20 years ago who believed RDF and the semantic web was going to take over, but the use cases never materialized.
wvbdmp•2h ago
The use cases are perfectly material, but unfortunately the ad business depends on shitty, ever-changing HTML and scripting shenanigans.
vorador•2h ago
What did you/do you use the semantic web for?
wvbdmp•2h ago
Not much, since we’ve never really had it, but yes, I would love to consume hypertext like a stable API, have user-styles and block elements I don’t like. I do these things now, too, but in a better world they could be less of a hassle technically and less niche socially, then I’d do them even more.

Here’s a uBlock Origin style I use for hackernews, for example:

    news.ycombinator.com##.comment:style(max-width: 40em !important;)
imiric•3h ago
... And end up with elements that have dozens of classes until you need to parse CSS in your head in order to figure out what the element is supposed to look like. This methodology completely misses the point of using classes to begin with.

Good class and ID names should be semantic, just like the markup. Don't describe what the CSS does; describe what the element is.

Not only that, but it introduces useless abstractions that could've been avoided by just writing CSS directly. How is `.content-center` better than `align-content: center`?

Tailwind and its ilk are one of the worst trends to have ever happened in web development. It's making people forget how to use CSS, while being useless in the process. I truly don't understand it. And, yes, I've worked on projects that used it extensively. It's awful.

ChocolateGod•2h ago
> I truly don't understand it

Quick iteration and good relative spacing for margins, paddings, dimensions etc.

A lot of people combine Tailwind with something like Vite so they're getting instant previews and don't need to swap focus to a style sheet to style their component. I swapped to Tailwind and honestly could never swap back.

vehemenz•2h ago
I appreciate strong opinions, but I appreciate good arguments even more. And there's just nothing here.

You're raising a bunch of meyerweb talking points from 2003, except why? WHY does markup need to be "semantic" in the sense that you mean? Actually, WHY? Provide a supporting argument that it makes a difference to developers or end users. Remember, we've all been doing it that way for years, and we switched to Tailwind. You need to have something more compelling to developers who have already made up their minds.

> Not only that, but it introduces useless abstractions that could've been avoided by just writing CSS directly. How is `.content-center` better than `align-content: center`?

There are several reasons, but media queries would be reason 1. Why is it useless, again? Remember, we can't tell what your high-level abstractions do without opening at least two files, plus we have to understand any inherited/cascading rules on top of that. If that complexity doesn't matter, then it's argument time again.

> It's making people forget how to use CSS

Tailwind relies on CSS for its class names. How would one use it without knowing CSS in the first place? Secondly, why would it be bad (argument time again)?

The reasons for Tailwind are well understood. It's way faster, trivial to pick up, and easier to maintain longterm, especially in a team environment, than bespoke CSS/DOM abstractions that have layers of hidden complexity. Now, what does your way of doing CSS offer? Remember, tons of people switched from older methodologies to Tailwind and have already priced in the benefits, small as they were.

imiric•31m ago
> WHY does markup need to be "semantic" in the sense that you mean?

If you've been hearing about this since 2003, then I shouldn't have to repeat the reasons here. You can look up countless articles that explain exactly why semantic HTML and CSS are a good thing much better than I can do justice here.

> There are several reasons, but media queries would be reason 1.

That still doesn't explain why e.g. `class="w-16 h-48 md:w-32 lg:w-48"` would be preferable over a single class that describes what the element is and defines how it should look like and behave.

I mean, to steel man your argument, I get the appeal of getting predefined and consistent breakpoints, and being able to prefix or suffix classes with sizes. But that doesn't seem like a worthy tradeoff for losing legibility, and polluting the markup with this noise. It's the same as declaring all CSS inline, except using classes.

> Remember, we can't tell what your high-level abstractions do without opening at least two files

A good class name will tell you what the element is, not what it should look like. For that, you look at the CSS. Whether that CSS is defined in the same file or in another file, is up to you.

> plus we have to understand any inherited/cascading rules on top of that

Yes, that is what the "C" in CSS stands for, and it's a useful feature for propagating and combining rules without having to redefine them on every element.

If you want to avoid this "complexity", there are numerous ways to scope rules to a specific element or component. Most modern frameworks can scope styles per component for you. And with cascade layers, you now have more control over how and when rules are applied.

> Tailwind relies on CSS for its class names. How would one use it without knowing CSS in the first place?

Some class names are straightforward to understand and use, but others, like the example I posted above, require knowledge about Tailwind itself. Users can become proficient with this syntax without ever understanding what's happening underneath, thus degrading their CSS knowledge. You said it yourself—you want to avoid looking at CSS files altogether. How long would it take for you to not be able to write CSS directly?

> It's way faster, trivial to pick up, and easier to maintain longterm, especially in a team environment

Those are highly subjective, and I would argue against it being easier to maintain. When all your elements use dozens of utility classes, how do you ensure that the styles are consistent throughout the app? One typo in any of the class names can cause inconsistencies that are difficult to spot in a code review.

Oh, use reusable components, I hear you say. Well, why don't you just define the CSS in the component itself then?

Or, no, you use another abstraction on top of Tailwind like daisyUI, which is an insane attempt to bring back sanity into this workflow.

> than bespoke CSS/DOM abstractions that have layers of hidden complexity.

What abstractions?? It's literally a group of rules with a descriptive name that tells you a) what the element represents in the context of the app, and b) how it looks and behaves. There are no abstractions there.

The reason the classes are "bespoke" is because every app will be different. You might want to share some common rules between apps, and we've been doing that for decades just fine. I don't see how grouping utility class names inline makes you any faster or more productive than grouping rules in CSS declarations in the same or external file, and giving them a descriptive name.

> Remember, tons of people switched from older methodologies to Tailwind and have already priced in the benefits, small as they were.

Tons of people use and swear by bloated and complicated frontend web frameworks too, so the popularity of Tailwind doesn't surprise me. I can still have the opinion that it's all wrong, which you're free to disagree with.

giveita•2h ago
The hill is pointed at and the soldiers will fight, but obviously it depends what you are doing. Jira wont move to classless, but a blog might.
kbrannigan•1h ago
How do you manage the html where you can't even see the tags anymore and it's a spaghetti of utilities in the template for example:

<!-- Like his --> <div class="px-4 py-2 bg-blue-500 text-white rounded shadow-md hover:bg-blue-600">

<!-- Instead of this --> <div class="btn-primary">

mixmastamyk•1h ago
This is largely a classless framework. Meaning it typically styles tags themselves.
crazygringo•1h ago
...and then you need to make all your buttons of a certain type 5px taller or a different color, and you have to go replace the utility class in all 40 buttons. But not any other elements that use the same utility class.

Instead of if you'd just given them all the same semantic class ".config-button" or ".sidebar-button" or ".btn-hero" or whatever, you could make that change in a single place.

If your CSS has turned into soup, I have to be blunt: you're doing it wrong. And you should never have to "dig through loads of CSS files to figure out where the CSS is", it's 1) literally in your browser inspector when you select the element and 2) your CSS files should be organized so it would be easy anyways. Finding a class is as easy as finding a function definition.

Utility classes are for people who want to throw away all the benefits of semantic naming because they don't want to go to the trouble of actually organizing their user interface, even though they see the value in organizing the rest of their code. I honestly don't get it.

handsclean•30m ago
The big missing piece for me was that these strategies are meant to be used with React or some other framework. So, in your example, you actually only edit in one place, a SidebarButton component.
IgorPartola•3h ago
I honestly can no longer tell which “minimal CSS frameworks for semantic HTML” I have not seen on the front page of HN and which are repeats. Are they all the same at this point?

Not specifically picking on this one, just that it seems that they are the quick to crank out type of libraries and everyone has their own.

Retr0id•3h ago
The neat thing about semantic HTML is that the CSS ought to be pretty interchangeable.
IgorPartola•3h ago
Sure but why would I do that? When was the last time you decided that the solution to whatever problem you were facing was to switch to a completely different CSS framework without rewriting your HTML?
giveita•2h ago
The real neat thing is not having to make decisions up front. But you can tweak it later. If you are a rebel you could even use classes to touch up bits you are not happy with.
IgorPartola•43m ago
What I am saying is that I have never done this, have seen the need for this, or have heard of anyone doing this or having the need for this.

To create an absurdist analogy it is like saying that because labels on cotton T-shirts are the same size that you could take them off shirt A and sew them onto shirt B. It is possible by there is zero point in doing it other than to say that you did it.

vehemenz•2h ago
You're mixing "is" and "ought." Why ought styles be interchangeable (remembering that stylesheets and DOM structures often have complex, dependent relationships that are rarely as simple as Pico or anything similar).
Retr0id•1h ago
I said what I meant to say, I don't understand your reply.
codedokode•3h ago
The buttons and form inputs are too large compared to standard desktop UI elements.
bityard•3h ago
Yeah. I had to zoom out to 75% in my browser before the text looked normal-ish sized but the "widgets" still looked very big and awkward. Maybe this was designed not just for mobile-first but mobile-only?
librasteve•2h ago
I agree, but quite easy to scale back with a couple of root values
rodolphoarruda•3h ago
Pico is great! It's nice to see it hitting HN front page.
librasteve•2h ago
big fan of pico … just published the new https://raku.org official website using it
notagoodidea•2h ago
Congrats on the facelift of raku.org! Interesting to see the mix of HTMX/PicoCSS and Cro.
Winblows11•2h ago
There's also this site which allows easy switching/previewing of classless CSS themes:

https://www.cssbed.com/

giveita•2h ago
Tufte looks very elegant
internetter•1h ago
Tufte frequently makes the rounds here — most recently 4 days ago: https://news.ycombinator.com/item?id=45119103
simpaticoder•1h ago
I like that resource, but it's missing an important one: github-markdown-css[1]. Given that most devs these days read a lot of Github markdown, it seems like a reasonable starting place for a css system.

1 - https://github.com/sindresorhus/github-markdown-css

svat•8m ago
See also https://dohliam.github.io/dropin-minimal-css/ which has quite a few more (including github-markdown-css mentioned in a sibling comment).
indigodaddy•2h ago
FastHTML uses Pico CSS by default
nicr_22•2h ago
Love love love Pico. It's such a terrific starting point, and easy to tweak into different directions. It's the anti-Tailwind.
nrjames•2h ago
I've tried using this before and pretty quickly migrated away. While I like the idea of it, the default styling is not great and I felt frustrated with the amount of adjustments it needed to support a data-dense site.
andreashaerter•1h ago
Even though I use Tailwind CSS for larger projects, there are smaller, self-contained cases where Pico CSS is a perfect fit. Their "Usage scenarios" page describes it spot on:

https://picocss.com/docs/usage-scenarios

I discovered Pico CSS just last week, and it turned out to be exactly what I needed for a small Hugo theme (govanity, vanity URLs for Go modules/packages with Hugo: https://github.com/foundata/hugo-theme-govanity). From discovering Pico, reading the docs, and integrating it, I was done in about two hours.

One thing that's surprisingly easy to overlook in between: CSS variables: https://picocss.com/docs/css-variables and Colors: https://picocss.com/docs/colors

dfee•1h ago
- url updated!
MrGilbert•1h ago
I use picocss for my personal site [1], which I just recently converted to plain html. I just realized that, with a bit of plain vanilla js, I can easily create a header and footer for every page. I need to write some kind of markup anyways, so why not directly write html? Also, picocss comes with dark mode, which I personally prefer.

[1]: https://g5t.de

rimmontrieu•1h ago
I use tailwind but sometime extremely lightweight CSS framework like Pico is a good starting point to build the foundation for any projects.
petr25102018•1h ago
I like to use Pico CSS as a starting point for websites (as opposed to apps). I even put it in the my Django starter kit (https://github.com/stribny/sidewinder/). Recommended!
candl•52m ago
Wish it had a tab component.
cantalopes•44m ago
Hell yes, this is geat! It's a shame it uses pixels instead of physical+relative units (like pt/mm + em/ex/rem) but still better than tailwind or bootstrap horrors
stgr_codes•38m ago
Really love how this project is evolving. It helps you write components with better accessibility without compromising maintainability (it actually improves it) and it's easy to customize.
ixxie•24m ago
I love the idea, but why can't I install with npm and import as plain CSS?
quantisan•14m ago
I use Pico with LLM code gen for new projects. As you probably know, LLMs are predisposed to Tailwind and coding for industrial strength on any tiniest projects. The trick is to feed it the whole Pico docs as context and prompt it (i.e. in your CLAUDE.md) to use Pico explicitly.
drzel•4m ago
Love Pico CSS. I've used it for close to a decade on https://www.fortressone.org - just works, and looks pretty enough out of the box.

The World's Biggest Animal Migration

https://www.wsj.com/world/africa/worlds-biggest-animal-migration-great-nile-b67e3c0b
1•Stratoscope•1m ago•1 comments

How the Slavic Migration Reshaped Central and Eastern Europe

https://www.mpg.de/25256341/0827-evan-slavic-migration-reshaped-central-and-eastern-europe-150495-x
1•gmays•1m ago•0 comments

Show HN: CompareGPT – Spotting LLM Hallucinations with Multi-Model Comparison

1•tinatina_AI•10m ago•0 comments

GitHub/spec-kit: Toolkit to help you get started with Spec-Driven Development

https://github.com/github/spec-kit
1•dmmalam•12m ago•0 comments

The Three Laws of Humanics

https://pinchito.es/2025/three-laws-humanics
2•alexfernandez•20m ago•0 comments

Learnership

1•Tendanie•26m ago•0 comments

Learnership

1•Tendanie•29m ago•0 comments

Removing yellow stains from fabric with blue light

https://phys.org/news/2025-09-yellow-fabric-blue.html
1•bookofjoe•30m ago•0 comments

AI robots can carve stone statues. buildings are next

https://www.fastcompany.com/91366303/ai-robots-can-already-carve-stone-statues-entire-buildings-a...
1•theptip•30m ago•0 comments

3D (and 2D) forward pathtracing in a compute shader

https://wrighter.xyz/blog/2023_08_18_forward_pathtracing_in_comp_shader
2•ibobev•30m ago•0 comments

Rendering flame fractals with a compute shader

https://wrighter.xyz/blog/2023_08_17_flame_fractals_in_comp_shader
2•ibobev•30m ago•0 comments

Using Claude Code to modernize a forgotten Linux kernel driver

https://dmitrybrant.com/2025/09/07/using-claude-code-to-modernize-a-25-year-old-kernel-driver
36•dmitrybrant•38m ago•6 comments

Vibe Coding Fiasco: AI Agent Goes Rogue, Deletes Company's Database

https://www.pcmag.com/news/vibe-coding-fiasco-replite-ai-agent-goes-rogue-deletes-company-database
2•hackernj•39m ago•1 comments

We're building a new kind of computer to beat GPUs on optimization

https://www.resonantcomputer.com/
1•iq19zero•48m ago•1 comments

Private Go proxies: How they work and why it matters

https://riverqueue.com/blog/dependabot-private-go-proxies
2•clra•49m ago•0 comments

One mother for two species via obligate cross-species cloning in ants

https://www.nature.com/articles/s41586-025-09425-w
1•bryanrasmussen•54m ago•0 comments

My Vercel v0 weekend: A working app, a happy friend, and a $50 bill

1•ryado•56m ago•2 comments

AI SDRs do not solve the cold outreach problem

1•TigerSolo•58m ago•0 comments

The entropy formula for the Ricci flow and its geometric applications

https://arxiv.org/abs/math/0211159
2•ibobev•1h ago•0 comments

Show HN: AI API for 3D container packing

https://3dpack.ing/api-docs.html
1•reverseblade2•1h ago•0 comments

Muscular stress is the biggest cause of workplace injuries

https://safetyspace.co/manual-handling-techniques
1•safety-space•1h ago•0 comments

FCC plans to kill Wi-Fi on school buses, hotspots for library patrons

https://www.theregister.com/2025/09/05/fcc_to_kill_wifi_school_buses/
3•Bender•1h ago•0 comments

Reg hack attends job interview hosted by AI avatar struggles exit uncanny valley

https://www.theregister.com/2025/09/06/ai_job_interview_experience/
2•Bender•1h ago•2 comments

OpenAI reorg at risk as Attorneys General push AI safety

https://www.theregister.com/2025/09/05/openai_reorg_at_risk/
1•Bender•1h ago•0 comments

ChatGPT's Micro-Cap Portfolio: Week 10

https://nathanbsmith729.substack.com/p/chatgpts-micro-cap-portfolio-week-cbc
1•geox•1h ago•0 comments

GitHub shouldn't allow AGPL project templates

https://github.com/dannysmith/tauri-template/issues/1
2•johnbellone•1h ago•7 comments

Why more old people are dying after falls

https://www.nytimes.com/2025/09/07/health/falls-deaths-elderly-drugs.html
3•bookofjoe•1h ago•1 comments

Daily Crypto Trading Tournaments (Fake Funds, Real Prizes)

1•Moosaabbas•1h ago•1 comments

Formatting code should be unnecessary

https://maxleiter.com/blog/formatting
22•MaxLeiter•1h ago•12 comments

Show HN: hn30 – Alternative interface for the top HN stories

https://hn30.yamanlabs.com/
2•yaman071•1h ago•1 comments