Frameless

As far back as May 1996, web accessibility guru Jakob Nielsen argued against using frames on websites. And as a web developer, I agree that frames are rarely the right solution. And yet, for as long as I’ve been running that pet project of mine, I’ve been using a frames.

The (almost) Complete Meat Loaf and Jim Steinman Lyric Archive is just a bunch of HTML pages, and when I first put it online, I didn’t know a thing about building websites. I just messed around in a cracked copy of Dreamweaver and frames seemed to do the job. Then I learned about writing semantic HTML, separating content from presentation, graceful degradation, progressive enhancement and all that. And while swapping the regular frameset for an iframe and adding some javascript to tackle the bookmarking issue was a good step in the right direction, I still wasn’t satisfied.

On and off I’ve been thinking about how to make that pesky iframe disappear. I’ve considered setting up a database, and make a dynamic website. Then I thought about converting all pages to XML and do some magic with XSLT and/or PHP. Both these options were rejected for the same reasons: I have to come up with a complex database structure or XML equivalent, I would lose my offline HTML version to tinker with, and, let’s be honest, it’s an awful lot of work. Call me lazy, but there is no way I am going to covert more than three hundred files by hand. Doing this website is supposed to be fun.

And then, yesterday, I came across PHP‘s loadHTMLFile function. And where numerous other attempts at including HTML files into a PHP script failed, this time it all came together, one thing led to another, et voilà, a frameless website. And I was busy figuring out how to get all the pages properly run through the script with some mod_rewrite magic, I accidentally stumbled upon a fully backward compatible solution that works even better than that I was shooting for.

Contrary to what is said, some days it does come easy.

Almost forgot: as of this update Internet Explorer 6 is dead to me.