iTEST YOUR SITE IN LYNX null (FALSE) 0
i null (FALSE) 0
i2024-05-01 null (FALSE) 0
i null (FALSE) 0
iWhen was the last time you tested your website in a text-only browser like null (FALSE) 0
iLynx (or ELinks, or one of several others)? Perhaps you should. null (FALSE) 0
i null (FALSE) 0
i null (FALSE) 0
i null (FALSE) 0
iI'm a big fan of CSS Naked Day. I love the idea of JS Naked Day, although I null (FALSE) 0
imissed it earlier this month (I was busy abroad, plus my aggressive caching, null (FALSE) 0
iincluding in service workers, makes it hard to reliably make sweeping changes null (FALSE) 0
ifor short periods). I'm a big fan of the idea that, for the vast majority of null (FALSE) 0
iwebsites, if it isn't at least usable without any CSS or JavaScript, it should null (FALSE) 0
iprobably be considered broken. null (FALSE) 0
i null (FALSE) 0
iThis year, I thought I'd celebrate the events by testing DanQ.me in the null (FALSE) 0
imost-limited browser I had to-hand: Lynx. Lynx has zero CSS or JavaScript null (FALSE) 0
isupport, along with limited-to-no support for heading levels, tables, images, null (FALSE) 0
ietc. That may seem extreme, but it's a reasonable analogue for the level of null (FALSE) 0
ifunctionality you might routinely expect to see in the toughest environments null (FALSE) 0
iin which your site is accessed: slow 2G connections from old mobile hardware, null (FALSE) 0
ipeople on the other side of highly-restrictive firewalls or overenthusiastic null (FALSE) 0
iprivacy and security software, and of course users of accessibility null (FALSE) 0
itechnologies. null (FALSE) 0
i null (FALSE) 0
iHere's what broke (and some other observations): null (FALSE) 0
i null (FALSE) 0
iS AT THE TOP null (FALSE) 0
i null (FALSE) 0
iI see the thinking that Lynx (and in an even more-extreme fashion, ELinks) null (FALSE) 0
ihave with showing "alternate versions" of a page at the top, but it's not null (FALSE) 0
iterribly helpful: most of mine are designed to help robots, not humans! null (FALSE) 0
i null (FALSE) 0
IScreenshot showing four alternate links at the top of DanQ.me as viewed in Lynx. /2024/04/screenshot-01.png danq.me 70
i null (FALSE) 0
iI wonder if switching from elements to Link: HTTP null (FALSE) 0
iheaders would indicate to Lynx that it shouldn't be putting these URLs in null (FALSE) 0
ihumans' faces, while still making them accessible to all the services that null (FALSE) 0
iexpect to find them? Doing so would require some changes to my caching logic, null (FALSE) 0
ibut might result in a cleaner, more human-readable HTML file as a side-effect. null (FALSE) 0
iPossibly something worth investigating. null (FALSE) 0
i null (FALSE) 0
iFortunately, I ensure that my s have a title attribute, null (FALSE) 0
iwhich is respected by Lynx and ELinks and makes these scroll-past links null (FALSE) 0
islightly less-confusing. null (FALSE) 0
i null (FALSE) 0
ILynx screenshot from IKEA.com, showing no fewer than 113 anonymous "alternate" links at the top of the page. /2024/04/screenshot-03.png danq.me 70
i null (FALSE) 0
iPOST LIST INDENTATION null (FALSE) 0
i null (FALSE) 0
iPosts on the homepage are structured a little like this: null (FALSE) 0
i null (FALSE) 0
i
null (FALSE) 0
iStrictly-speaking, that's not valid. Heading elements are only permitted null (FALSE) 0
iwithin flow elements. I chose to implement it that way because it seemed to be null (FALSE) 0
ithe most semantically-correct way to describe the literal "list of posts". But null (FALSE) 0
iprobably my use of
is not the best solution. Let's see how Lynx handles null (FALSE) 0
iit: null (FALSE) 0
i null (FALSE) 0
IScreenshot from Lynx showing headings "outdented" from the list items they're children of. /2024/05/screenshot-04.png danq.me 70
i null (FALSE) 0
iIt's not intolerable, but it's a little ugly. null (FALSE) 0
i null (FALSE) 0
iCSS LIGHTBOXES ADD A STEP TO IMAGES null (FALSE) 0
i null (FALSE) 0
iI use a zero-JavaScript approach to image lightboxes: you can see it by null (FALSE) 0
iclicking on any of the images in this post! It works by creating a (closed) null (FALSE) 0
i