hckrnws
98.css – A design system for building faithful recreations of old UIs
by OuterVale
I made something similar as well (that includes both 3.11, 95, 2000, XP, CDE and Mac OS 9, and also all the default color schemes of those): https://nielssp.github.io/classic-stylesheets/?theme=win9x&s...
My focus was not so much on pixel perfect, but instead on creating something that would also work and look aesthetically pleasing on modern systems, like with higher DPI monitors and such. So one of the the things I did was to recreate all the icons and symbols in SVG.
I tried posting it as a Show HN when I added XP and Mac OS 9, but it didn't get much attention. Maybe the title of the project isn't as catchy.
Love it; though the Windows 2000 theme seems a bit off (headings to heavy/bold).
Windows 2000 was the pinnacle of UI design IMO.
Whoa. Insanely cool. Outstanding quality and theming, such a simple implementation. Only thing I'd want to see is theming for data tables, maybe even an interactive table that behaves like the lists and grids.
This is amazing, thanks for this! I made a simple app using 98.css because that was the most feature-filled retro CSS library I could find. Going to try and use your 3.1 schemes :)
This project is absolutely gorgeous, you really did a great job at mapping each UI elements, really great work!
To echo the other comments: this is beautiful work!
Absolutely incredible work
Very cool, thank you!
This is incredible
Holy crap, that Mac OS 9 one is fantastic!!!
I’ve always had a soft spot for the older Mac OS design, and I really love this implementation! I spent sooooo much time in windows and Linux doing various things to try and get that feel back
Author here – happy to see this posted again!
This was my burnout recovery project and I wrote some thoughts on it recently https://notes.jordanscales.com/98-css-reflections
Thanks for your work on this! I recently used 98.css in my fairly simple web app[0] for a recreation of something from my childhood, and it worked beautifully for my purposes.
I'd suggest using checkboxes instead of radio buttons for the operator selection. It would be useful, I think, to have a mix of just addition and subtraction, or just multiplication and division, instead of having one option or all four.
I hadn't thought of that use case, thanks for the feedback!
Thank you for including houndstooth :,)
Phenomenal work
> burnout recovery
I hope you're feeling better. Interesting how retro computing, like old games and operating systems, can be comforting and even healing. I've had similar experience with emulators - playing Gameboy and Nintendo games from childhood, or running Macintosh System 9.
Reminds me of Pico-8, SerenityOS, TempleOS. There's a common thread of a retro-style computing environment that can be entirely understood and controlled by the user.
I imagine there's deeper psychological dynamics to this, like a safe "sandbox" as a therapeutic tool.
It also says something about design with empathy and focus on user experience. There are so many hostile dark patterns these days in technology and society, that it's a relief to find some space (physical or mental) that's designed for your comfort.
It’s more that nostalgia is apparently very healthy for you
This is the most accurate replication I have ever seen of Windows 98. Wish there's one for Windows 2000 and Windows XP.
My collection:
The Sims https://thesimscss.inbn.dev/
Windows 98 https://jdan.github.io/98.css/
Windows XP https://botoxparty.github.io/XP.css/
Windows 7 https://khang-nd.github.io/7.css/
Edward Tufte https://edwardtufte.github.io/tufte-css/
First time I heae abour Tufte OS :)
98.css is an HN Classic, for all the best reasons.
Previous discussions:
https://news.ycombinator.com/item?id=33310554 - October 2022 (179 comments)
https://news.ycombinator.com/item?id=22940564 - April 2020 (211 comments)
See also:
HyperCard Simulator and Decker.
I don't know if anyone else remembers this but in the late 90s, Microsoft had built-in CSS named colours that matched the Windows desktop theme/colours.
I have no idea if these still work (my IDE seems to say they do not, because everything is red).
body {
font-size : 11px ;
color : windowtext ;
background-color : appworkspace ;
}
a {
color: menutext;
}
.headerBar {
border-top : 1px solid threedlightshadow ;
border-left : 1px solid threedlightshadow ;
border-bottom : 1px solid threedshadow ;
border-right : 1px solid threedshadow ;
background-color : threedface ;
}
So you could build web UIs that matched the user's Desktop look and feel. We did this for our browser-based Intranet applications in 1998, which made them look a bit more "native".I did a bit of digging and it seems this was generalized into CSS System Colours at some point:
https://drafts.csswg.org/css-color/#css-system-colors
And all these old colours were deprecated:
https://drafts.csswg.org/css-color/#deprecated-system-colors
That's nice resource, especially the "Tests" part showing Firefox keeps them all supported and Safari dropping most of them.
I have explored system colours including deprecated ones with intention to try to tap them into some more pleasant scheme (dimming canvastext for bordrers through color-mix() for example) and was interested about the "palette" we could use without defining own colours. Made a comprehensive "sampler" to test them [1,2] and Results were quite sad, especially outside Firefox [3].
[1] Dark: https://codepen.io/myf/pen/KKbVpmN [2] Light: https://codepen.io/myf/pen/jOXWPGV [3] https://x.com/myfonj/status/1769512951705149840
NB, that style does not play well with non-native DPI (e.g. when you have monitor set to 150% scale); to see it mapped to physical pixels, try running this in the browser's console:
with(document.documentElement.style){
transform = `scale(${ 1 / devicePixelRatio })`;
transformOrigin = 'top left';
}
(multiply the scale by whole number to get it "crisply zoomed").Still not 100% perfect, but much closer to intended rendering, I guess.
Wow, your use of `with` is both terrifying and super fresh. I love/hate it.
I’ll be honest, I didn’t know JS had `with`…off to MDN
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
tl;dr is that `with` is a long deprecated statement that is good for casual "golfing" and raising eyebrows of JS-savvy folks. Does not work in the "use strict" mode (so in modules) and generally should not be used in any "real-world" production code, since it prevents many optimisations and could possibly make the code harder to grasp. But I guess for casual one-time console doodles it could be fine. Reportedly it is supported in all major JS engines, and I don't think it will be really removed in foreseeable future.
I read the MDN page on it right after my comment and it’s fascinating, and also very understandable why it’s a Bad Idea™
I used a little bit of this I think in crowdwave https://www.crowdwave.com
What a lovely website. Thank you for sharing! :)
That's an interesting website!
Also worth checking out: https://botoxparty.github.io/XP.css and https://khang-nd.github.io/7.css
In both of these as well as submission link, one of the things that is clearly and strikingly different from modern UI is the lack of very abundant amount of padding space. I think it's almost the mantra that we need breathing room, e.g., between different options in a radio-group box list of items... but I find lesser space (as was characteristic of older UI's) to be more honest... more respectful to me as an end-user, more information-dense.
I don't want to discard whatever innovation has been done, but man I find myself being nostalgic of old UI quite often.
There's nothing preventing information-dense layouts today, except that the "flat design" crowd has decreed that no work spaces, toolbars, or controls shall have any borders or lines to delineate visual separation. Too much "clutter." So the only thing left is to separate things with vast volumes of whitespace which doesn't actually work all that well when you have to deal with different screen sizes.
With old 640 x 480 or 800 x 600 resolutions, the screen real estate came at premium. There wasn't much room to use generous padding and still make all the buttons and UI fields fit in the low resolution displays.
Modern smartphones aren't that far off in terms of (logical) pixel counts. The difference is in input accuracy.
It goes back to an accessibility study that found that 1.5x line-height is the most readable.
As with a lot of things in ux accessibility research, these results were never replicated but the idea was seared into all our brains permanently. We know from research on fonts that ultimately, the most accessible font is the one the user is most used to. Sans vs. Serif vs. etc all don't seem to make a consistent difference across demographics. I suspect line spacing is something that's due for a relook
The mouse has significantly higher precision than touch interfaces. That's a large part of why modern hybrid interfaces have such low density.
Realistically, desktop interfaces will never stop trying to cater for touchscreen devices. We need a eugenics program to breed people with sharp pointy fingers.
The one that looks like Windows 7 seems to be the most complete and has a bunch of stuff not found in the others, like progress bar or menus. In fact while I never liked the window decorations that 7 used, the rest wouldn't look bad on an electron app
THANK you so much for the XP one. XP's UI is my favorite of all the Windows UIs. It had just enough modernity to feel sleek but still had contrast to be easily seen and read and understood.
Windows 7 UI was a bit too flashy and employed looks over readability and Windows 98 was too old fashioned and also suffered from a lack of contrast with all the grey.
I never enjoyed the XP one. Somebody called the Fisher-Price ui, and I think the remark is not too off. I would always switch to the "classic" UI, which I think was the same as Windows 2000, which in my opinion is the best of all (it is a similar but different from the one of Windows 98, especially in color choice and icon)
Was XP your first OS, by any chance? I really like the 98 UI, but that was my first and it evokes really nice memories.
XP was my favorite as well, at least among the Windows. Not the first OS I used (that would be DOS 3). But it was the last MS OS I used.
Oh it was my favorite OS as well, it crashed way way less and did its job admirably, I just prefer the Windows 98 UI.
So basically windows server 2003. Peak desktop productivity UX.
For me that was KDE 3. In fact, KDE 3 had such a fan base that even until today there is still an active port.
Yep, exactly.
XP x64 was a lovely desktop, and was essentially 2k3 desktop. Last Windows system I enjoyed using.
Windows 98 was my first, but I loved XP UI the most, especially in the later years when Microsoft launched the ZUNE XP theme.
XP with classic theme was like 2000 but with a warmer palette. My favorite.
Shilling mine (not as decoupled and extensive as those), since it's quite on point:
https://git.sr.ht/~q3cpma/website/tree/master/item/src/resou...
https://world-playground-deceit.net/
These make me want to go all the way.
Now all we are missing is Windows 3.x -version.
Comment was deleted :(
By eye alone, I'm pretty sure that is not MS Sans Serif as rendered in Windows 95 and Windows 98.
Recreating old fonts in modern browsers is a hard problem
https://web.archive.org/web/20230603234837/https://vistaserv...
Sure, but I refuse to call this a faithful recreation of the aesthetic until the fonts look correct. :D
On a related note, I did start working on some tools to work with legacy .FONs for this exact purpose earlier this year, but the project is iceboxed for now...
Sounds like it was a hard problem!
Mostly figuring out the details of the old formats enough to be able to render them without having an actual Windows rasterizer... https://github.com/akx/winfont/tree/dev is half of it, the web `<canvas>` frontend is currently still private :)
They’ve also kept the pixelated nature. The XP style sheet linked in another comment [1] draws at high res for its text and shapes and so retains the feel of the UI without the constraints.
I — we? — like the 98 etc UI for its clarity and simplicity not its low resolution.
The fonts are pixelated, but those pixels don't appear to align with the physical ones, so they're blurry in some places. Meanwhile, on a real 98 you either had crisp fonts, or neatly and consistently blurred by the CRT.
I'd claim that this is way better than what we've got after years of UX/UI "research" and "improvements".
And it's not that I'm some old boomer. In '98 I was one year old. I just hate buttons which don't look like buttons, tabs which don't look like tabs, text fields that you have to click to discover they're editable etc.
Have much UX/UI research been put into operation systems UIs since Windows 95?
I suppose Apple must have done some research for MacOSX, but in the past two decades it feels like features are just be thrown in, especially on mobile, with no concept of discoverability or consistency. More than anything I think companies desire to have "consistent branding" or "unique look" is to blame for much of this.
Yes, Apple at one time had a phenomenal Human Interface Guide for native OS X applications which was based on actual UX testing and research. Things like, "make your application features discoverable," "clearly delineate functional areas and controls," and "use verb+noun on action buttons." It was Good Stuff and it heavily informed a lot of UX decisions for the prominent Linux desktops at the time.
It's still around but I flipped through it recently and it seems to be a mix of the absurdly general ("don't build an app for a specific screen size") to the very specific (MacOS and iOS APIs). Maybe there's some gold buried in there still, but I'm not sure where to find it.
That said I'm not a fan of the black text over dark gray background.
Also, that website includes "show code" buttons disguised as ordinary text.
It’s a light/medium gray. Believe the idea was to deemphasize the ui in favor of the document/input fields.
https://github.com/lolstring/window98-html-css-js
https://github.com/anthmn/hackertosh.css
https://github.com/AlexBSoft/win95.css
https://github.com/1j01/os-gui
https://github.com/themesberg/windows-95-ui-kit
https://github.com/andersevenrud/retro-css-shell-demo
https://github.com/arturbien/React95
https://github.com/botoxparty/XP.css
https://github.com/Gioni06/terminal.css
https://github.com/jdan/98.css
https://github.com/jianzhongli/csswin10
https://github.com/khang-nd/7.css
https://github.com/kristopolous/BOOTSTRA.386
https://github.com/lachsfilet/Renkbench
https://github.com/lolstring/window98-html-css-js
https://github.com/micah5/PSone.css
https://github.com/nostalgic-css/NES.css
https://github.com/npjg/classic.css
https://github.com/robbiebyrd/platinum
https://github.com/bryanbraun/after-dark-css
https://github.com/npjg/new-dawn
https://github.com/ritenv/retro-desktop
https://github.com/RoelN/c64css3
https://github.com/sakofchit/system.css
https://github.com/lolstring/window98-html-css-js
https://github.com/anthmn/hackertosh.css
https://github.com/AlexBSoft/win95.css
https://github.com/1j01/os-gui
https://github.com/themesberg/windows-95-ui-kit
https://github.com/andersevenrud/retro-css-shell-demo
https://github.com/arturbien/React95
https://github.com/botoxparty/XP.css
https://github.com/Gioni06/terminal.css
https://github.com/jdan/98.css
https://github.com/jianzhongli/csswin10
https://github.com/khang-nd/7.css
https://github.com/kristopolous/BOOTSTRA.386
https://github.com/lachsfilet/Renkbench
https://github.com/lolstring/window98-html-css-js
https://github.com/micah5/PSone.css
https://github.com/nostalgic-css/NES.css
https://github.com/npjg/classic.css
https://github.com/robbiebyrd/platinum
https://github.com/bryanbraun/after-dark-css
https://github.com/npjg/new-dawn
https://github.com/ritenv/retro-desktop
https://github.com/RoelN/c64css3
https://github.com/sakofchit/system.css
https://github.com/vinibiavatti1/TuiCss
https://code.divshot.com/geo-bootstrap/
Cool!
Can someone please collect this into a github page so I can find it again in the future?
I know I'm being lazy and should do it myself, but I'd rather someone with more visibility do it.
[EDIT: Added the actual list to my comment so I can find it again in the future]
This is really cool, the only thing I see is the font rendering looks choppy. An antialiasing issue I think, but it looks worse than some non-antialiazed fonts (like the EGA 8x14 pixels font) too
To be very pedantic: also the dropdown menu, when opened, looks very different than the original 98 style
Chrome on Windows 10 here. The font rendering looks very similar (if not identical) to what I remember it in Win98 -- no antialiasing, 1px thick, very easy to spot the pixels on curved strokes, very easy to spot the pixels on bold style, etc.
The style looks incredible accurate to what I remember, although there are some differences:
- The opened dropdown menu, as my parent suggested.
- I don't remember textareas being resizable.
- I remember stepped sliders had little marks indicating where each step is. Only continuous sliders (e.g., the one in the Windows volume control) had no marks.
- The tabs don't look like as I remember from Win95/98, these ones look more like Win 3.1. Too much padding, the border is too thick, and the border radius is too big.
- In tables, the headers looked like buttons because they were actually buttons (you could press them to sort the table). However, here they are not clickable.
Interesting, I tried zooming in now and when zooming in far enough the font does look alright!
It might be that it just happens to look bad on high resolution screens, and/or maybe some browser fractional scaling issue
As an example, one of the text fields on the page contains the word "Incredible". When zoomed in it looks fine, when zoomed at 100% the I and the n are stuck together to each other without any pixel in-between which is very ugly
> also the dropdown menu, when opened, looks very different than the original 98 style
Sadly this is the dropdown provided by the host operating system. The tell is that it can extend beyond the browser chrome! 98.css doesn't ship with any JS, and I thought about hacking it with checkboxes and :after but.... no thanks.
Very cool, will need to find a use for this. I briefly had a go at building similar trying to replicate the Club Penguin UI - need to get back to it!
I made this Obsidian theme (now defunct) using lots of source from 98.css
This is weirdly compelling. I have some retro info that I've wanted to put in a small website, this may be the thing that pushes it into the active list.
Thanks!
Admirable job. Just wondering - was the impetus for this anything to do with movie or TV prop making? It would certainly be terrific for rendering real time screens of '90s era data.
I miss this era of life and childhood
It sucks that the fonts will never look amazing as they once were in CRT monitors in 800x600.
This would be an improvement over modern UI design. It's much more clear what is clickable. That is why old Windows versions were designed like that.
Where’s Clippy?
Great job! I think adding Clippy notifications would be a fun touch
Here he is (+ friends)
This is pretty cool, sadly the sites that it uses to show the examples in action are long gone.
broken on firefox for me after clicking through a few times...
the left side gets shift over and hidden behind the white navigation box.
Does this happen to anyone else?
This is beautiful. The world needs more of this.
I hate and love this at the same time
Cool but the fonts are all messed up.
developers will do anything but actually recreate visual basic
i dream of a 16 cga colors css framework with bulky arrows
[dead]
Crafted by Rajat
Source Code