Frames is an HTML technology that divides the screen window into two or more sub-windows which can be changed or scrolled independently. Web designers love frames because they can put a menu in one frame and the selected page in another frame.
Unfortunately, frames have a lot of usability problems:
- It is not always obvious to the user whether a page is divided into frames or not.
- Does not work well on small screens.
- Does not work in all browsers and devices.
- It is difficult for the user to navigate because the address bar of the browser shows the URL of the frameset, not the selected page.
- The user cannot set a bookmark to an individual page in a frame system.
- Others cannot make a link to a particular page in a frame system.
- If you want to inform a friend about a particular page in a frame system then you cannot just give them the URL. You have to give a detailed explanation of which menu items to click on.
- The browser doesn't show which frame has the focus. When you issue a print command you may print the wrong frame.
- The user may want to open a link in a new window. This may not work correctly with frames.
- Users who, for whatever reason, use the keyboard rather than the mouse don't know which key to use for changing the focus from one frame to another.
- A user may - deliberately or by accident - open a subpage separately rather than as part of the intended frameset. Thereby they lose the context and the navigation menu.
- Search engines are generally not able to handle frame systems adequately.
- Web designers often make errors in frame systems. A very common error is that when you click a link to an external web page it is shown inside the same frame system.
The conclusion is clear: Never use frames!
If you want the same menu on many pages then use server-side includes or server-side programming. If you prefer to use client-side programming then be sure to test it in different browsers and provide an alternative for browsers that don't support your script or applet.