
Holy mackerel, that is the most complicated and convoluted navigation list I've seen in a long time.
When you've got an example of really complex code like that, it would be very helpful if you could post an example page that uses it, so that we can see it in action. I'm having trouble envisaging what it will look like and downloading and unzipping the files is not an efficient way for me to see it when you could put the page live on the internet.
My first thought is that anything as simple as a navigation list that has been made so complex it needs a key has been made TOO complex. Remember the basic rule - people spend most of their time NOT using your website, and they don't want to have to learn anything new in order to use your website.
What your method does is:
- add what looks like a navigation list at the top, but isn't, which will confuse people.
- add a layer of complexity to the menu by introducing lots of different icons, which will confuse people
- induce people to spend a lot longer looking at the menu trying to work out what is going on (ie they are confused) OR ignore the menu altogether (because it's too confusing).
You're aiming for something that degrades nicely, but you then add in even more confusion! You've put alt="ball symbol" on the image in the key, but anyone who can read the alt text won't see the ball symbol in the real menu because it's inserted with CSS so doesn't have any alt text. So the users will see that there are supposed to be ball symbols, chain symbols and so on, but will then just get a bulleted list of links - that's going to be confusing.
Yes, it's great to indicate the current page in some way - usually a background colour and/or a marker symbol are used. But surely the simplest way to stop people from clicking on it and wondering why they aren't being taken to a new page is to remove the link from that item in the list so that people can't click on it. Then mark visited links in a different colour/shade, and it's obvious to anyone who cares which pages they have been to.
The second thing that strikes me is how much redundant code there is in your CSS declarations. There are rules that are repeated identically in a:link, a:visited, a:hover and a:active. This is a recipe for disaster come maintenance or update time. Any rule that is common to some/all link states should be whipped out and placed in a separate a {...} declaration - that way you can't accidentally change it for one link state and not another. You can reduce the border declarations substantially as well, by combining them into:
border: 1px solid;
border-color: #aaa #aaa #fff #fff; (or whatever order it was)
Much more compact and easier to work with than specifying the weight and line style for each side of the border.
This seems to me like a prime example of "too much accessibility" - in trying to make it more accessible, you've actually made it a lot harder for most people - combined with hideously verbose CSS that will be an absolutely nightmare to work with.