Jesus Christ, that's a rabbit hole I don't wish to go down again. cammy.somnol now officially supports Internet Explorer 3 and up and Netscape 4 and up. And Mosaic for the most part, though it doesn't like my images.

I seem to get caught up in these occasional 24 hour tech projects, like the 24 hour flu, y'know? It's entirely emotional, it's not rational, and realistically, there's no reason for this one—well, there might be. Also it's a fun story to tell.
We have it really really good as Web developers in the 21st century. We have advanced CSS modules to enable us to easily put together layouts from scratch, and all the relevant CSS frameworks have grid and flex systems to make it as easy as putting a few classes in. This was not the luxury Web designers in the late 90s got to enjoy. They had to deal with two browsers from two temperamental browser developers that each supported a completely different version of the Web, and they were called Internet Explorer and they were called Netscape.
Microsoft has always been easy to put down as the evildoer, bulldozing the competition with their stagnant Web browser included with loads of software and bloating the nice and efficient Windows desktop shell with Active Desktop. This is all true. People also still have a lot of piss and vinegar for Microsoft today, which helps reinforce the idea that Internet Explorer was the bad browser and Netscape was the good one, but—I much prefer dealing with Internet Explorer if I can help it. It feels much zippier and less buggy when you actually compare the two, and here's the big thing, the CSS support is light years better.
Netscape was just as culpable as Microsoft in the "I'm only going to support my technologies" arms race, and the big one that haunts me as a Web developer is JavaScript Style Sheets. In case you're not aware, JavaScript originated with Netscape—and aside from it being used to do things it shouldn't, it's pretty good for what it is. Netscape wanted everyone to use JavaScript; they had plans for a server-side JavaScript (sit down, React users), and with the desire to have stylesheets for people's larger and larger websites looming on the horizon, they figured they could turn their scripting language into a styling language as well.
It didn't work, but it continues to be relevant to those designing retro Web pages because Netscape inexplicably hacked its CSS support around translating to JSSS. If you use CSS at all, and you're targeting Netscape at all, you will have to learn to deal with its hideously bad, incredibly limited, unbelievably buggy implementation of JIT translated CSS. To give you an idea, there's a phenomenal website I've been combing over for the past day or so called RichInStyle.com, which is devoted to turn-of-the-millennium CSS information, bugs, and best practices. They count several hundred bugs for Netscape 4's CSS implementation—some parts of the site list it around 230, other parts 500.
I've known for a long time now that cammy.somnol, basic as though the layout is, ate shit on Netscape 4, but I wasn't too interested in figuring out why...until it crawled up my ass and I started playing with it. Here's some bugs I've personally encountered:
- The most egregious one involves
line-height
. Specifying aline-height
on a container that features images causes those images to overlap the text, sort of like a float gone wrong. Not setting a specificline-height
. Specifyingline-height
at all. margin: auto
does nothing.auto
equals 0 to Netscape 4. (This one is actually common to both IE3 and IE4 as well. You all disgust me.)- You can center-align a table, but only if that table doesn't contain images. If there's images in the table, it will ignore centering, even if you use a
<center>
. - Tables are actually just permafucked on Netscape. Any CSS you have that applies to a container will be unset after a table in that container closes. In plain English: if you set a text color and font on your body, and then have a table, the text color and font will be unset after the table closes.
- Netscape will replace some images with others and generally cause chaos with your layout if those images have inline CSS on them.
!important
causes Netscape to ignore CSS declarations set as such. (This is actually quite useful for making it ignore certain buggy declarations.)
The thing about JSSS is that, because only Netscape 4 supports it, I can write a JSSS file and use it to fix Netscape-specific rendering bugs without resorting to CSS hacks. Why would I want to do this? Originally, I didn't much care, but I got to thinking about how I'd eventually like to have cammy.somnol linked more around the still-growing retro Web community a bit more, and I know folks on Windows 3.x and 9x and other OSes alike sometimes have no choice but to use Netscape. Even if they do have choice (RetroZilla supports Windows 95 and NT4 and is lovely to develop for), it doesn't mean they're taking advantage of that choice.

So, literally 24 hours ago as of writing this, I got to seeing how much better I could make cammy.somnol work on Netscape without completely rewriting every page. I could've gotten things pretty close looking and fairly consistent across all browsers had I just resorted to presentational HTML, but that's not my style and I like clean markup too much. (I wound up using some anyway, I'll get back to that.) That journey expanded out to Internet Explorer 3, 4, and Mosaic 3.0 fairly quickly; I knew it mostly worked in IE5 and worked perfect in IE6 already, but I didn't have anything I could test the older versions on to hand and had to spend the morning setting up PCem with networking support.
So here's a summary of what all I did:
- I sorted out the buggy declarations and got Netscape much happier with my stylesheet fairly quickly. That said, the page still can't be horizontally centered, but I figure if you're stuck with Netscape or early IE, you're probably viewing at 800x600 like I designed the site for anyway.
- Most of what I did in JSSS became CSS hacks when I started targeting IE3 and 4, but there's still a good bit of it embedded in every page. This gets ignored by every other browser and lets me target Netscape specifically.
- I fell back to using presentational HTML for centering individual images, page headers, and footers. I also use it to set
border
to 0 on images that act as links, because old browsers like to generate boxes around those and it's ugly with my transparent images. This all necessitated changing the doctype of the entire site from HTML4 Strict to HTML4 Transitional, though it's still fairly clean either way. - Each page now has a fallback background, text, and link color specified in the
<body>
opening tag, in case the user agent has no CSS support whatsoever. This is, funnily enough, how I initially learned to write HTML when I was a little kid fooling around in Notepad back in the 2000s.<body bgcolor="green">
my beloved. - I had to do much digging into CSS hacks, plus manually specifying my font choice and color on every single paragraph to make sure the tables didn't eat my styling. This and the above two bullets led to a lot more redundancy than I would've liked, but no big deal, really, things are still fairly efficient.
- I outright disabled all image rendering on the journal for Netscape 4 because of the bonkers "images bouncing around" bug. I'd reload the page and find the Setter journal drawing replaced with a screenshot of Sheezy, and after not being able to find a fix to my liking, I just disabled it outright. I may revisit that bug in the future, but for now, use a better browser.
As a result, Netscape 4 finally works mostly well on cammy.somnol (ignoring the journal), IE3 is near-perfect aside from floated images not working, IE4 is perfect, and Mosaic is almost perfect, rendering my GIFs as black-and-transparent for some reason I can't seem to understand. All of them have some trouble with the journal, either due to lack of PNG support, Netscape's image bug, Mosaic's tendency to crash when it has to get off its lazy ass and render a bigger page, or my lazy ass' tendency to not render thumbnail versions of embedded images, causing load times and images breaking out of their containers. RetroZilla and more recent were already perfect and remain completely unaffected.
I've learned so many nightmarish bugs, hacks, and workarounds over the past evening, trying to target one browser but not another, working around the lack of horizontal centering in basically every browser I was working with, and constantly checking this not-altogether-accurate-somehow W3 specification submission on JSSS for reference. That said, she's working nicely! cammy.somnol will now work in your favorite retro browser, I didn't have to change how I write these pages too much to make it happen, and eventually when I start floating this thing around more, hopefully someone in the retrocomputing scene will appreciate all that hard work. (mari.somnol will avoid this pitfall because I'm going to be writing a no-CSS version from the get go. You can't deal with bad CSS implementations if you don't use CSS, black man taps head GIF.)
Wait, I had a bunch of other stuff to work on? Like, other sites, pages, a trip diary, drawings, IT certifications? Ah geez dude.