I am not a clean CSS coder, so this may be the crux of my problem… but…I’ve cobbled together an interactive map from this tutorial: http://www.noobcube.com/tutorials/html-css/css-image-maps-a-beginners-guide-/.
My solution: http://www.paideiaschool.org/testing/barb_map.htm
I think I have the initial “rollovers” of the map working– (I’ve only coded the first two buildings in the upper left of the map) and am happy with that.
My problem is I want the legend of the map to do the same things as the rollovers of the map. I’ve come up with a clumsy solution that works (labeled ‘1509’), but not well in all browsers, and that tells me I have gone wrong somewhere.
I’m trying to avoid javascript as well.
What is the main problem?
Here’s an updated jsFiddle for part one
Here’s the basics:
We use an image map with anchor tags as “hot spots”. We use CSS to absolutely position these “hot spots” in the proper location and we do the basic background image sprite “trick”, the same you did in your original code.
However, I updated your sprite image to have two “hover” images. When making an image hover map with none-square image spots (like buildings overlapping each-other), a single hover state runs into problems with a “neighbor” icon showing up in the hot spot slice. This is due to due HTML blocks being square and not being able to draw odd shapes. We solve this by having extra images states so you can make the neighbors still look un-highlighted.
Pop-up box
All the pop-up boxes have this HTML format. I position: absolute; them off to the side with the standard left:-999em; trick. I crafted the CSS to give them a standard pop-up location with a slight space between the hot-spot box and the pop-up box. This helps ensure your mouse will “hover out” of the hot-spot when reaching for a new hot-spot. Otherwise, you’ll hover over the pop-up box and it won’t go away until you over off both.
For the “map legend”, I have a group of “glamour images” and a list of links. Pretty standard stuff. The key is how they’re all tied together with their ID’s. JavaScript will use this to swap images and CSS states as we tie the three elements (map, glamour image, and list of links) together.
ID’s in the map are the straight up ID name like “mac”. ID’s in the glamour images are “[id]-img” (ie. “mac-img”). And ID’s in the list are “[id]-list” (ie. “mac-list”).
I recommend using jQuery to help do easy JavaScript-ing and loading it from Google API for easy Content Delivery Network benefits.
All that’s really left is the JavaScript event.
What happens above is we tell JavaScript to trigger anytime someone hovers a list link. There are two events when hovering, in and out.
When someone hovers into a link, we get the base ID value from it and all we do is apply a CSS class “active” to the map “hot spot”.
“.active” class will basically “turn on” the map item as if it was hovered (if you notice in the CSS, all the :hover selector styles are also shared with a ‘.active’ class).
When we hover out, we simply tell jQuery to remove all ‘active’ classes. All that’s left to do is swap also write some code that does the same thing for the “glamour” images. Simply turning them on (display:block) or off (display:none). The one catch is that there should probably be a default image that we always turn back on if nothing else is selected unless we just want the previously activated glamour image to stay active, that works too.
I’ve not gotten to that bit of code yet. I’ll see I can update it later and maybe leave a little bit for you to play around with.
update
it in IE7/8/9 and it seemed to work fine.
Btw, I updated your map image and uploaded it on imgur.com => https://i.stack.imgur.com/zDzps.png