Top
Best
New

Posted by FromTheArchives 10/27/2025

Tags to make HTML work like you expect(blog.jim-nielsen.com)
441 points | 238 comments
aragonite 10/27/2025|
Fun fact: both HN and (no doubt not coincidentally) paulgraham.com ship no DOCTYPE and are rendered in Quirks Mode. You can see this in devtools by evaluating `document.compatMode`.

I ran into this because I have a little userscript I inject everywhere that helps me copy text in hovered elements (not just links). It does:

[...document.querySelectorAll(":hover")].at(-1)

to grab the innermost hovered element. It works fine on standards-mode pages, but it's flaky on quirks-mode pages.

Question: is there any straightforward & clean way as a user to force a quirks-mode page to render in standards mode? I know you can do something like:

document.write("<!DOCTYPE html>" + document.documentElement.innerHTML);

but that blows away the entire document & introduces a ton of problems. Is there a cleaner trick?

rob 10/27/2025||
I wish `dang` would take some time to go through the website and make some usability updates. HN still uses a font-size value that usually renders to 12px by default as well, making it look insanely small on most modern devices, etc.

At quick glance, it looks like they're still using the same CSS that was made public ~13 years ago:

https://github.com/wting/hackernews/blob/5a3296417d23d1ecc90...

Someone1234 10/27/2025|||
I trust dang a lot; but in general I am scared of websites making "usability updates."

Modern design trends are going backwards. Tons of spacing around everything, super low information density, designed for touch first (i.e. giant hit-targets), and tons of other things that were considered bad practice just ten years ago.

So HN has its quirks, but I'd take what it is over what most 20-something designers would turn it into. See old.reddit Vs. new.reddit or even their app.

dlisboa 10/27/2025|||
There's nothing trendy about making sure HN renders like a page from 15 years ago should. Relative font sizes are just so basic they should count as a bug fix and not "usability update".
reactordev 10/27/2025|||
Overall I would agree but I also agree with the above commenter. It’s ok for mobile but on a desktop view it’s very small when viewed at anything larger than 1080p. Zoom works but doesn’t stick. A simple change to the font size in css will make it legible for mobile, desktop, terminal, or space… font-size:2vw or something that scales.
cluckindan 10/27/2025|||
It’s not ok for mobile. Misclicks all around if you don’t first pinch zoom to what you are trying to click.
hunter2_ 10/27/2025||
Indeed, the vast majority of things I've flagged or hidden have been the accidental result of skipping that extra step of zooming.
5- 10/27/2025|||
> Zoom works but doesn’t stick.

perhaps try using a user agent that remembers your settings? e.g. firefox

reactordev 10/28/2025||
Perhaps not recommend workarounds to lack of utilizing standards.
angiolillo 10/27/2025||||
Setting aside the relative merits of 12pt vs 16pt font, websites ought to respect the user's browser settings by using "rem", but HN (mostly[1]) ignores this.

To test, try setting your browser's font size larger or smaller and note which websites update and which do not. And besides helping to support different user preferences, it's very useful for accessibility.

[1] After testing, it looks like the "Reply" and "Help" links respect large browser font sizes.

panzi 10/28/2025||
Side note: pt != px. 16px == 12pt.
angiolillo 10/29/2025||
You are correct, it should have been "px".
ano-ther 10/27/2025||||
Please don’t. HN has just the right information density with its small default font size. In most browsers it is adjustable. And you can pinch-zoom if you’re having trouble hitting the right link.

None of the ”content needs white space and large fonts to breathe“ stuff or having to click to see a reply like on other sites. That just complicates interactions.

And I am posting this on an iPhone SE while my sight has started to degrade from age.

rob 10/27/2025|||
Yeah, I'm really asking for tons of whitespace and everything to breathe sooooo much by asking for the default font size to be a browser default (16px) and updated to match most modern display resolutions in 2025, not 2006 when it was created.

HN is the only site I have to increase the zoom level, and others below are doing the same thing as me. But it must be us with the issues. Obviously PG knew best in 2006 for decades to come.

Izkata 10/27/2025|||
On the flipside, HN is the only site I don't have to zoom out of to keep it comfortable. Most sit at 90% with a rare few at 80%.

16px is just massive.

ryeights 10/27/2025||
Sounds like your display scaling is a little out of whack?
hunter2_ 10/27/2025||
Yeah, this is like keeping a sound system equalized for one album and asserting that modern mastering is always badly equalized. Tune the system to the standard, and adjust for the oddball until it's remastered.
lioeters 10/28/2025||
Except we all know what happened to the "standard" with the Loudness War.
hunter2_ 10/29/2025||
I'm not a fan of extreme compression and limiting, but doing so in a multiband fashion (as occurs due the loudness war) actually does result in more consistent EQ from album to album, label to label, genre to genre, etc. which virtually eliminates the need to adjust EQ at playback time between each post-war selection.
JadeNB 10/27/2025||||
You're obviously being sarcastic, but I don't think that it's a given that "those are old font-size defaults" means "those are bad font-size defaults." I like the default HN size. There's no reason that my preference should override yours, but neither is there any reason that yours should override mine, and I think "that's how the other sites are" intentionally doesn't describe the HN culture, so it need not describe the HN HTML.
basilikum 10/27/2025||
[dead]
8note 10/27/2025||||
on mobile at least, i find thati can frequently zoom in, but can almost never zoom out, so smaller text allows for more accessibility than bigger text
hunter2_ 10/27/2025||
Browser (and OS) zoom settings are for accessibility; use that to zoom out if you've got the eyes for it. Pinching is more about exploring something not expected to be readily seen (and undersized touch targets).
torstenvl 10/27/2025|||
Don't do this.
rob 10/27/2025||
I agree, don't set the default font size to ~12px equiv in 2025.
torstenvl 10/27/2025||
[flagged]
a_cool_username 10/27/2025||
Do you think that "Don't do this" as a reply comment is following the spirit of the guidelines? It doesn't seem very thoughtful or substantive to me.
ErroneousBosh 10/27/2025|||
Content does need white space.

HN has a good amount of white space. Much more would be too much, much less would be not enough.

marcosdumay 10/27/2025||||
No kidding. I've set the zoom level so long ago that I never noticed, but if I reset it on HN the text letters use about 2mm of width in my standard HD, 21" display.
ErroneousBosh 10/27/2025||
> but if I reset it on HN the text letters use about 2mm of width in my standard HD, 21" display.

1920x1080 24" screen here, .274mm pitch which is just about 100dpi. Standard text size in HN is also about 2mm across, measured by the simple method of holding a ruler up to the screen and guessing.

If you can't read this, you maybe need to get your eyes checked. It's likely you need reading glasses. The need for reading glasses kind of crept up on me because I either work on kind of Landrover-engine-scale components, or grain-of-sugar-scale components, the latter viewed down a binocular microscope on my SMD rework bench and the former big enough to see quite easily ;-)

nine_k 10/27/2025||||
Shameless plug: I made this userstyle to make HN comfortable to handle both on desktop and mobile. Minimal changes (font size, triangles, tiny bits of color), makes a huge difference, especially on a mobile screen.

https://userstyles.world/style/9931/

thelibrarian 10/27/2025||
Thanks for that, it works well, and I like the font choice! Though personally I found the font-weight a bit light and changed it to 400.
oskarkk 10/27/2025||||
> HN still uses a font-size value that usually renders to 12px by default as well, making it look insanely small on most modern devices, etc.

On what devices (or browsers?) it renders "insanely small" for you? CSS pixels are not physical pixels, they're scaled to 1/96th of an inch on desktop computers, for smartphones etc. scaling takes into account the shorter typical distance between your eyes and the screen (to make the angular size roughly the same), so one CSS pixel can span multiple physical pixels on a high-PPI display. Font size specified in px should look the same on various devices. HN font size feels the same for me on my 32" 4k display (137 PPI), my 24" display with 94 PPI, and on my smartphone (416 PPI).

gs17 10/27/2025||
On my MacBook it's not "insanely small", but I zoom to 120% for a much better experience. I can read it just fine at the default.
dormento 10/27/2025||
On my standard 1080p screen I gotta set it to 200% zoom to be comfortable. Still LOTS of content on the screen and no space wasted.
embedding-shape 10/27/2025||||
> At quick glance, it looks like they're still using the same CSS that was made public ~13 years ago:

It has been changed since then for sure though. A couple of years ago the mobile experience was way worse than what it is today, so something has clearly changed. I think also some infamous "non-wrapping inline code" bug in the CSS was fixed, but can't remember if that was months, years or decades ago.

On another note, they're very receptive to emails, and if you have specific things you want fixed, and maybe even ideas on how to do in a good and proper way, you can email them (hn@ycombinator.com) and they'll respond relatively fast, either with a "thanks, good idea" or "probably not, here's why". That has been my experience at least.

sgarland 10/28/2025||||
I hesitate to want any changes, but I could maybe get behind dynamic font sizing. Maybe.

On mobile it’s fine, on Mac with a Retina display it’s fine; the only one where it isn’t is a 4K display rendering at native resolution - for that, I have my browser set to 110% zoom, which is perfect for me.

So I have a workaround that’s trivial, but I can see the benefit of not needing to do that.

nojs 10/27/2025||||
The font size is perfect for me, and I hope it doesn’t get a “usability update”.
afavour 10/27/2025||
“I don’t see any reason to accommodate the needs of others because I’m just fine”
cluckindan 10/27/2025||||
I bet 99.9% of mobile users' hidden posts are accidentally hidden
zamadatix 10/27/2025||||
12 px (13.333 px when in the adapted layout) is a little small - and that's a perfectly valid argument without trying to argue we should abandon absolute sized fonts in favor of feels.

There is no such thing as a reasonable default size if we stop calibrating to physical dimensions. If you choose to use your phone at a scaling where what is supposed to be 1" is 0.75" then that's on you, not on the website to up the font size for everyone.

martin-t 10/27/2025||||
I find it exactly the right size on both PC and phone.

There's a trend to make fonts bigger but I never understood why. Do people really have trouble reading it?

I prefer seeing more information at the same time, when I used Discord (on PC), I even switched to IRC mode and made the font smaller so that more text would fit.

askonomm 10/27/2025|||
I'm assuming you have a rather small resolution display? On a 27" 4k display, scaled to 150%, the font is quite tiny, to the point where the textarea I currently type this in (which uses the browsers default font size) is about 3 times the perceivable size in comparison to the HN comments themselves.
rob 10/27/2025|||
Agreed. I'm on an Apple Thunderbolt Display (2560x1440) and I'm also scaled up to 150%.

I'm not asking for some major, crazy redesign. 16px is the browser default and most websites aren't using tiny, small font sizes like 12px any longer.

The only reason HN is using it is because `pg` made it that in 2006, at a time when it was normal and made sense.

askonomm 10/27/2025||
Yup, and these days we have relative units in CSS such that we no longer need to hardcode pixels, so everyone wins (em, rem). That way people can get usability according to the browsers defaults, which make the whole thing user configurable.
martin-t 10/27/2025|||
1920x1080 and 24 inches

Maybe the issue is not scaling according to DPI?

OTOH, people with 30+ inch screens probably sit a bit further away to be able to see everything without moving their head so it makes sense that even sites which take DPI into account use larger fonts because it's not really about how large something is physically on the screen but about the angular size relative to the eye.

Izkata 10/27/2025||
Yeah, one of the other cousin comments mentions 36 inches away. I don't think they realize just how far outliers they are. Of course you have to make everything huge when your screen is so much further away than normal.
jermaustin1 10/27/2025||||
I have HN zoomed to 150% on my screens that are between 32 and 36 inches from my eyeballs when sitting upright at my desk.

I don't really have to do the same elsewhere, so I think the 12px font might be just a bit too small for modern 4k devices.

zachrip 10/27/2025||||
I'm low vision and I have to zoom to 175% on HN to read comfortably, this is basically the only site I do to this extreme.
trenchpilgrim 10/27/2025||||
I have mild vision issues and have to blow up the default font size quite a bit to read comfortably. Everyone has different eyes, and vision can change a lot with age.
pletnes 10/27/2025|||
Even better: it scales nicely with the browser’s zoom setting.
onion2k 10/27/2025||||
Text size is easily fixed in your browser with the zoom setting. Chrome will remember the level you use on a per site basis if you let it.
robertlagrant 10/27/2025||||
I'm sure they accept PRs, although it can be tricky to evaluate the effect a CSS change will have on a broad range of devices.
umanwizard 10/27/2025||||
The text looks perfectly normal-sized on my laptop.
super256 10/27/2025|||
Really? I find the font very nice on my Pixel XL. It doesn't take too much space unlike all other modern websites.
neRok 10/27/2025|||
A uBlock filter can do it: `||news.ycombinator.com/*$replace=/<html/<!DOCTYPE html><html/`
razster 10/27/2025||
Could also use tampermonkey to do that, also perform the same function as OP.
cxr 10/27/2025|||
There is a better option, but generally the answer is "no"; the best solution would be for WHATWG to define document.compatMode to be writable property instead of readonly.

The better option is to create and hold a reference to the old nodes (as easy as `var old = document.documentElement`) and then after blowing everything away with document.write (with an empty* html element; don't serialize the whole tree), re-insert them under the new document.documentElement.

* Note that your approach doesn't preserve the attributes on the html element; you can fix this by either pro-actively removing the child nodes before the document.write call and rely on document.documentElement.outerHTML to serialize the attributes just as in the original, or you can iterate through the old element's attributes and re-set them one-by-one.

somat 10/27/2025||
On that subject I would be fine if the browser always rendered in standard mode. or offered a user configuration option to do so.

No need to have the default be compatible with a dead browser.

further thoughts: I just read the mdn quirks page and perhaps I will start shipping Content-Type: application/xhtml+xml as I don't really like putting the doctype in. It is the one screwball tag and requires special casing in my otherwise elegant html output engine.

dugmartin 10/27/2025||
I know this was a joke:

   <div id="root"></div>
   <script src="bundle.js"></script>
but I feel there is a last tag missing:

   <main>...</main>
that will ensure screenreaders skip all your page "chrome" and make life much easier for a lot of folks. As a bonus mark any navigation elements inside main using <nav> (or role="navigation").
eska 10/27/2025||
I’m not a blind person but I was curious about once when I tried to make a hyper-optimized website. It seemed like the best way to please screen readers was to have the navigation HTML come last, but style it so it visually comes first (top nav bar on phones, left nav menu on wider screens).
sholladay 10/27/2025|||
Props to you for taking the time to test with a screen reader, as opposed to simply reading about best practices. Not enough people do this. Each screen reader does things a bit differently, so testing real behavior is important. It's also worth noting that a lot of alternative input/output devices use the same screen reader protocols, so it's not only blind people you are helping, but anyone with a non-traditional setup.

Navigation should come early in document and tab order. Screen readers have shortcuts for quickly jumping around the page and skipping things. It's a normal part of the user experience. Some screen readers and settings de-prioritize navigation elements in favor of reading headings quickly, so if you don't hear the navigation right away, it's not necessarily a bug, and there's a shortcut to get to it. The most important thing to test is whether the screen reader says what you expect it to for dynamic and complex components, such as buttons and forms, e.g. does it communicate progress, errors, and success? It's usually pretty easy to implement, but this is where many apps mess up.

cluckindan 10/27/2025||
”Each screen reader does things a bit differently, so testing real behavior is important.”

Correction: each screen reader + os + browser combo does things a bit differently, especially on multilanguage React sites. It is a full time job to test web sites on screen readers.

If only there was a tool that would comprehensively test all combos on all navigation styles (mouse, touch, tabbing, screen reader controls, sip and puff joysticks, chin joysticks, eye trackers, Braille terminals, etc)… but there isn’t one.

hnthrowaway121 11/9/2025||
Do you know about assistiv labs?

Doesn’t hit everything but it can run real device screen reader automated tests

hnthrowaway121 10/27/2025||||
Wouldn’t that run afoul of other rules like keeping visual order and tab order the same? Screen reader users are used to skip links & other standard navigation techniques.
eska 11/2/2025||
Interesting question. I don’t remember testing this, sorry.
striking 10/27/2025||||
You want a hidden "jump to content" link as the first element available to tab to.
marcosdumay 10/27/2025|||
Just to say, that makes your site more usable in text browsers too, and easier to interact with the keyboard.

I remember HTML has an way to create global shortcuts inside a page, so you press a key combination and the cursor moves directly to a pre-defined place. If I remember that right, it's recommended to add some of those pointing to the menu, the main content, and whatever other relevant area you have.

petecooper 10/27/2025||
>I know this was a joke

I'm…missing the joke – could someone explain, please? Thank you.

SomeHacker44 10/27/2025|||
Not a front end engineer but I imagine this boilerplate allows the JavaScript display engine of choice to be loaded and then rendered into that DIV rather than having any content on the page itself.
bitbasher 10/27/2025|||
It's because "modern" web developers are not writing web pages in standard html, css or js. Instead, they use javascript to render the entire thing inside a root element.

This is now "standard" but breaks any browser that doesn't (or can't) support javascript. It's also a nightmare for SEO, accessibility and many other things (like your memory, cpu and battery usage).

But hey, it's "modern"!

mb2100 10/28/2025||
This. But hey, let's work on swinging the pendulum of technology back while keeping the DX. I'm doing that with https://mastrojs.github.io/
dinkelberg 10/27/2025||
TFA itself has an incorrect DOCTYPE. It’s missing the whitespace between "DOCTYPE" and "html". Also, all spaces between HTML attributes where removed, although the HTML spec says: "If an attribute using the double-quoted attribute syntax is to be followed by another attribute, then there must be ASCII whitespace separating the two." (https://html.spec.whatwg.org/multipage/syntax.html#attribute...) I guess the browser gets it anyway. This was probably automatically done by an HTML minifier. Actually the minifier could have generated less bytes by using the unquoted attribute value syntax (`lang=en-us id=top` rather than `lang="en-us"id="top"`).

Edit: In the `minify-html` Rust crate you can specify "enable_possibly_noncompliant", which leads to such things. They are exploiting the fact that HTML parsers have to accept this per the (parsing) spec even though it's not valid HTML according to the (authoring) spec.

zamadatix 10/27/2025||
For anyone else furiously going back and forth between TFA and this comment: they mean the actual website of TFA has these errors, not the content of TFA.
dinkelberg 10/29/2025||
Sorry for confusing you!
9029 10/27/2025||
Maybe a dumb question but I have always wondered, why does the (authoring?) spec not consider e.g. "doctypehtml" as valid HTML if compliant parsers have to support it anyway? Why allow this situation where non-compliant HTML is guaranteed to work anyway on a compliant parser?
LegionMammal978 10/27/2025|||
It's considered a parse error [0]: it basically says that a parser may reject the document entirely if it occurs, but if it accepts the document, then it must act as if a space is present. In practice, browsers want to ignore all parse errors and accept as many documents as possible.

[0] https://html.spec.whatwg.org/multipage/parsing.html#parse-er...

9029 10/27/2025||
> a parser may reject the document entirely if it occurs

Ah, that's what I was missing. Thanks! The relevant part of the spec:

> user agents, while parsing an HTML document, may abort the parser at the first parse error that they encounter for which they do not wish to apply the rules described in this specification.

(https://html.spec.whatwg.org/multipage/parsing.html#parse-er...)

HWR_14 10/27/2025||||
Because there are multiple doctypes you can use. The same reason "varx" is not valid and must be written "var x".
AlienRobot 10/27/2025|||
Same reason <ahref="/page.html"> is invalid.
theandrewbailey 10/27/2025||
I often reach for the HTML5 boilerplate for things like this:

https://github.com/h5bp/html5-boilerplate/blob/main/dist/ind...

xg15 10/27/2025||
There is some irony in then-Facebook's proprietary metadata lines being in there (the "og:..." lines). Now with their name being "Meta", it looks even more proprietary than before.

Maybe the name was never about the Metaverse at all...

zelphirkalt 10/27/2025||
Are they proprietary? How? Isn't open graph a standard and widely implemented by many parties, including many open source softwares?
FoxBJK 10/27/2025|||
They're not, at all. It was invented by Facebook, but it's literally just a few lines of metadata that applications can choose to read if they want.
kaoD 10/27/2025||
Being invented by $company does not preclude it from being a standard.

https://en.wikipedia.org/wiki/Technical_standard

> A technical standard may be developed privately or unilaterally, for example by a corporation, regulatory body, military, etc.

PDF is now an international standard (ISO 32000) but it was invented by Adobe. HTML was invented at the CERN and is now controlled by W3C (a private consortium). OpenGL was created by SGI and is maintained by the Khronos Group.

All had different "ownership" paths and yet I'd say all of them are standards.

albedoa 10/27/2025||
Did you mean to type "does not" in that first sentence? Otherwise, the rest of your comment acts as evidence against it.
kaoD 10/27/2025||
Yep, it was a typo. Thanks! Fixed.
chrismorgan 10/28/2025|||
The Open Graph Protocol was thrown over the wall by Facebook and promptly abandoned. It’s an atrocious spec, a good chunk of what it did (and most of what people actually wanted from it) was already unnecessary (og:description, for example, is stupid), its data model makes several woefully bad choices, it’s firmly based around Facebook’s interests (especially pictures!), it’s built on standards that were already looking like they were failing and are definitely long abandoned now, and I don’t think I’ve seen a single page implementing OGP tags correctly in the last five years and I’m not confident that a strictly correct reader implementation even exists (the specific matter I have in mind pertains to the prefix attribute). Also a bunch of key URLs have been 404ing for many years now.
fud101 10/27/2025||
how do you find this when you need it?
crabmusket 10/27/2025|||
DuckDuckGo "html5 boilerplate", click on website, click on "source code", follow your nose to the index.html file
ilaksh 10/27/2025||
Anyone else prefer to use web components without bundling?

I probably should not admit this, but I have been using Lit Elements with raw JavaScript code. Because I stopped using autocomplete awhile ago.

I guess not using TypeScript at this point is basically the equivalent for many people these days of saying that I use punch cards.

VPenkov 10/27/2025||
37 Signals [0] famously uses their own Stimulus [1] framework on most of their products. Their CEO is a proponent of the whole no-build approach because of the additional complexity it adds, and because it makes it difficult for people to pop your code and learn from it.

[0]: https://basecamp.com/ [1]: https://stimulus.hotwired.dev/

evilduck 10/27/2025|||
It's impossible to look at a Stimulus based site (or any similar SSR/hypermedia app) and learn anything useful beyond superficial web design from them because all of the meaningful work is being done on the other side of the network calls. Seeing a "data-action" or a "hx-swap" in the author's original text doesn't really help anyone learn anything without server code in hand. That basically means the point is moot because if it's an internal team member or open source wanting to learn from it, the original source vs. minified source would also be available.

It's also more complex to do JS builds in Ruby when Ruby isn't up to the task of doing builds performantly and the only good option is calling out to other binaries. That can also be viewed from the outside as "we painted ourselves into a corner, and now we will discuss the virtues of standing in corners". Compared to Bun, this feels like a dated perspective.

DHH has had a lot of opinions, he's not wrong on many things but he's also not universally right for all scenarios either and the world moved past him back in like 2010.

VPenkov 10/27/2025||
Well you do learn that a no-build process can work at some scale, and you can see what tech stack is used and roughly how it works.

But regardless, I didn't mean to make any argument for or against this, I'm saying this was one of the points DHH made at some point.

christophilus 10/27/2025|||
Dunno. You can build without minifying if you want it to be (mostly) readable. I wouldn’t want to give up static typing again in my career.
dinkleberg 10/27/2025|||
Even with TS, if I’m doing web components rather than a full framework I prefer not bundling. That way I can have each page load the exact components it needs. And with http/2 I’m happy to have each file separate. Just hash them and set an immutable cache header so it even when I make changes the users only have to pull the new version of things that actually changed.
zeroq 10/28/2025||
This.

I'm old enough to have a first hand experience of building a Flash website that required to load couple hundred tiny xml files for configuration only to find out that some ~300kb was taking couple of minutes to load because of limited connection pool in old http.

Back then bundling and overly complicated build steps were not yet invented, so instead of serving one large XML (which would work out of the box, as there was a root xml and certain nodes instead of having data were linking to external files) I quickly decided to implement zip compression and bundle the package that way.

Fast forward to 2025 when most devs need an external library to check if number isEven and the simplest project need a toolchain that's more complicated that the whole Apollo project.

zeroq 10/28/2025|||
> not using TypeScript at this point is basically the equivalent for many people these days of saying that I use punch cards

I very much enjoy writing no-build, plain vanilla JS for the sake of simplicity and ability to simply launch a project by dragging HTML file onto a browser. Not to mention the power of making changes with notepad instead of needing whole toolchain on your system.

brazukadev 10/27/2025|||
> Anyone else prefer to use web components without bundling?

Yes! not only that but without ShadowDOM as well.

WorldMaker 10/27/2025|||
I've been leaning that direction more and more every year. ESM loading in browsers is really good at this point (with and without HTTP/2+). Bundle-free living is nice now.

Even frameworks with more dependencies bundling/vendoring just your dependencies at package upgrade time and using an importmap to load them is a good experience.

I'm not giving up Typescript at this point, but Typescript configured to modern `"target"` options where it is doing mostly just type stripping is a good experience, especially in a simple `--watch` loop.

mb2100 10/28/2025|||
Definitely team #noBundler for most websites. But I didn't wanna give up TypeScript. With Deno and even Node.js supporting type-stripping now natively, all I had to do for https://mastrojs.github.io was to use ts-blank-space to transform client-components on the fly.
mock-possum 10/27/2025|||
God yes, as little tool chain as I can get away with.
LelouBil 10/27/2025|||
Stopped using autocomplete ? I want to hear more about this.

I could never.

nonethewiser 10/27/2025||
Can't say I generally agree with dropping TS for JS but I suppose it's easier to argue when you are working on smaller projects. But here is someone that agrees with you with less qualification than that https://world.hey.com/dhh/turbo-8-is-dropping-typescript-701...

I was introduced to this decision from the Lex Fridman/DHH podcast. He talked a lot about typescript making meta programming very hard. I can see how that would be the case but I don't really understand what sort of meta programming you can do with JS. The general dynamic-ness of it I get.

mariusor 10/27/2025||
Luckily Lit supports typescript so you wouldn't need to drop it.
notepad0x90 10/27/2025||
I'm not a web developer, so if someone can please enlighten me: Why does this site, and so many "modern" sites like it have it so that the actual content of the site takes up only 20% of my screen?

My browser window is 2560x1487. 80% of the screen is blank. I have to zoom in 170% to read the content. With older blogs, I don't have this issue, it just works. Is it on purpose or it is it bad css? Given the title of the post, i think this is somewhat relevant.

harrall 10/27/2025||
You'll notice newspapers use columns and do not extend the text all the way left to right either. It's a typographical consideration, for both function and style.

From a functional standpoint: Having to scan your eyes left to right a far distance to read makes it more uncomfortable. Of course, you could debate this and I'm sure there are user preferences, but this is the idea behind limiting the content width.

From a stylistic standpoint: It just looks “bad” if text goes all the way from the left to right because the paragraph looks "too thin" like "not enough volume" and "too much whitespace." It’s about achieving a ratio of background to text that’s visually pleasurable. With really wide widths, paragraphs can end really early on the left, leaving their last lines really “naked” where you see all this whitespace inconsistently following some paragraphs. I can't really explain why this looks bad any further though. It’s kind of like picking colors combinations, the deciding factor isn't any rule: it's just "does it look pretty?"

In the case of the site in question, the content width is really small. However, if you notice, each paragraph has very few words so it may have been tightened up for style reasons. I would have made the same choice.

That said, if you have to zoom in 170% to read the content and everything else is not also tiny on your screen, it may be bad CSS.

notepad0x90 10/27/2025||
Newspapers have less than 5% margin for whitespace. they're smart enough to have multiple columns. It's also a side-effect of how every line costs money and they need to cramp as much content as possible in one page.

I get not having read all the way to the end and back, I even get having margins, but it should be relative to the screen size. Fixed width is the issue I think. To avoid paragraphs looking too thin, maybe increasing the font relative to the screen size makes sense? I'd think there is a way to specify a reference screen resolution to the browser so that it can auto increase the font sizes and/or adjust the div's width.

wonger_ 10/28/2025|||
For font size that increases with screen size, you can use some clamp() math, like:

  --step-0: clamp(1.125rem, 1.0739rem + 0.2273vw, 1.25rem);
Taken from https://utopia.fyi/type/calculator?c=360,18,1.2,1240,20,1.25...
harrall 10/27/2025|||
You're not wrong. Increasing font size is one method.

Another method I like to use is to adjust the amount of words per paragraph depending on the medium. I will literally write more or less just to attain my personal favorite of 3-6 visual lines per paragraph.

Or sometimes I will more readily join paragraphs or split them more often in a text just to achieve my target.

Decreasing width is actually just really easy and also works really well when the type of content can vary.

All of this seems like some serious overkill attention to detail I know, but I guess it's a big deal for some people. For example, most people don't really care about dressing nice regularly anymore when they get older and marry because it frankly doesn't matter anymore (and they're totally right), but people who like fashion still care up until the end.

Menu_Overview 10/27/2025|||
Often times that is to create a comfortable reading width. (https://ux.stackexchange.com/questions/108801/what-is-the-be...)
Telaneo 10/28/2025|||
This breaks so hard with my own preferences it hard to believe it to be true, and relevant studies aren't all that convincing. The few websites I find that go to 150/200+ character lines are a blessing to read when I do. I only get to do this on my desktop on very odd sites or completely unstyled HTML pages (and there you don't get line-spacing, which is something I do want. I should probably write a script to fix that), and Hacker News, and I never want that to go away.

This wouldn't be the first thing I'm just weird about. Similarly, I find reading justified text to be just horrible, as I constantly lose track of what line I'm on. This one I believe has been debunked and raised as a genuine accessibility concern, but not all parts of the world have gotten around to recognising that. I'm also not a fan of serifed fonts, even in books. I'm not sure if there have been any studies made about that, as the serifs are supposed to be there to aid reading when printed on paper, but I consistently find a good sans-serif font to be better in all cases.

AlienRobot 10/27/2025|||
I wonder if this research is really valid. It was published 20 years ago, there is nothing in the abstract about arcdegrees and I can't read the full thing, and it's cited with zero consideration for the actual content being presented.

If Wikipedia had 70 characters per line I would never read it.

notepad0x90 10/27/2025||
That's a good point, 2560p wasn't a popular resolution back then. I'm sure people browsing in 4k suffer worse.
flufluflufluffy 10/27/2025|||
Probably to not have incredibly wide paragraphs. I will say though, I set my browser to always display HN at like 150% zoom or something like that. They definitely could make the default font size larger. On mobile it looks fine though.
notepad0x90 10/27/2025||
I have HN on 170% zoom too. this a bad design pattern. I shouldn't have to zoom in on every site. Either increasing the font or making sure the content is always at least 50% of the page would be great for me.
qingcharles 10/27/2025|||
This site was designed many moons ago, for another age. That's both a blessing and a curse, but much more of a blessing. As you've found, you can fix the zoom.

It's rare to see a site as popular as HN which has made almost zero changes to the UI over its entire history.

majora2007 10/27/2025|||
I'm not sure, but when I was working with UX years ago, they designed everything for a fixed width and centered it in the screen.

Kinda like how HackerNews is, it's centered and doesn't scale to my full width of the monitor.

notepad0x90 10/27/2025||
I understand not using the full width, but unless you zoom in, it feels like I'm viewing tiny text on a smart phone in portrait mode.

You would think browsers themselves would handle the rest, if the website simply specified "center the content div with 60% width" or something like that.

scotty79 10/27/2025||
Your pixels are too small. Enable system scaling for high dpi screens.
lapcat 10/27/2025||

  <meta name="viewport" content="width=device-width,initial-scale=1.0">
width=device-width is actually redundant and cargo culting. All you need is initial-scale. I explain in a bit more detail here: https://news.ycombinator.com/item?id=36112889
qingcharles 10/27/2025||
I've read your post. I'm going to test this on some crappy devices this week to confirm and then update my boilerplate.
cxr 10/27/2025||
outerHTML is an attribute of Element and DocumentFragment is not an Element.

Where do the standards say it ought to work?

daneel_w 10/27/2025||
For clarity and conformity, while optional these days, I insist on placing meta information within <head>.
chroma_zone 10/27/2025||
I usually add:

  <meta name="color-scheme" content="light dark">
which gives you a nice automatic dark theme "for free"
jimniels 10/27/2025|
Ah this is a good one! I should maybe start considering this as a default...
chrismorgan 10/27/2025|
> <html lange="en">

s/lange/lang/

> <meta name="viewport" content="width=device-width,initial-scale=1.0">

Don’t need the “.0”. In fact, the atrocious incomplete spec of this stuff <https://www.w3.org/TR/css-viewport-1/> specifies using strtod to parse the number, which is locale dependent, so in theory on a locale that uses a different decimal separator (e.g. French), the “.0” will be ignored.

I have yet to test whether <meta name="viewport" content="width=device-width,initial-scale=1.5"> misbehaves (parsing as 1 instead of 1½) with LC_NUMERIC=fr_FR.UTF-8 on any user agents.

cousin_it 10/27/2025|
Wow. This reminds me of Google Sheets formulas, where function parameters are separated with , or ; depending on locale.
Moru 10/27/2025|||
Not to mention the functions are also translated to the other language. I think both these are the fault of Excel to be honest. I had this problem long before Google came around.

And it's really irritating when you have the computer read something out to you that contains numbers. 53.1 km reads like you expect but 53,1 km becomes "fifty-three (long pause) one kilometer".

cubefox 10/27/2025||
> Not to mention the functions are also translated to the other language.

This makes a lot of sense when you recognize that Excel formulas, unlike proper programming languages, aren't necessarily written by people with a sufficient grasp of the English language, especially when it comes to more abstract mathematical concepts, which aren't taught in secondary English language classes at school, but it in their native language mathematics classes.

troupo 10/27/2025||||
The behaviour predates Google Sheets and likely comes from Excel (whose behavior Sheets emulate/reverse engineer in many places). And I wouldn't be surprised if Excel got it from Lotus.
fainpul 10/27/2025||||
Not sure if this still is the case, but Excel used to fail to open CSV files correctly if the locale used another list separator than ',' – for example ';'.
eska 10/27/2025||
I’m happy to report it still fails and causes me great pain.
haskellshill 10/27/2025||
Reall? Libreoffice at least has a File > Open menu that allows you to specify the separator and other CSV stuff, like the quote character
LtdJorge 10/27/2025|||
You have to be inside Excel and use the data import tools. You cannot double click to open, it outs everything in one cell…
mrguyorama 10/27/2025||
Sometimes you double click and it opens everything just fine and silently corrupts and changes and drops data without warning or notification and gives you no way to prevent it.

The day I found that Intellij has a built in CSV tabular editor and viewer was the best day.

fainpul 10/27/2025|||
Excel has that too. But you can't just double-click a CSV file to open it.
layer8 10/27/2025||||
Given that world is about evenly split on the decimal separator [0] (and correspondingly on the thousands grouping separator), it’s hard to avoid. You could standardize on “;” as the argument separator, but “1,000” would still remain ambiguous.

[0] https://en.wikipedia.org/wiki/Decimal_separator#Conventions_...

WA 10/27/2025||||
Try Apple Numbers, where even function names are translated and you can’t copy & paste without an error if your locale is, say, German.
neves 10/27/2025||
aha, in Microsoft Excel they translate even the shortcuts. The Brazilian version Ctrl-s is "Underline" instead of "Save". Every sheet of mine ends with a lot of underlined cells :-)
noja 10/27/2025||||
Same as Excel and LibreOffice surely?
KoolKat23 10/27/2025||
Yes
simulo 10/27/2025|||
Oh, good to know that it depends on locale, I always wondered about that behavior!
More comments...