    ## Appendix: Improper Row and Column Lists

An improper row list is a row list that specifies an unsatisfyable set of row dimensions. For example, consider the row list given in the following frameset tag:

`<frameset rows="15,25,100">`

This row list tells the browser to divide the document area into rows of heights 15, 25, and 100 pixels -- which is perfectly fine if the document area being divided is exactly 140 pixels high. But how often can you predict exactly how tall the user's browser window is going to be? After all, most browser programs are displayed in resizable windows. What if the area being divided by the frameset is shorter or taller than 140 pixels? Clearly, this row list presents some layout problems that must be solved.

Here is another example of an improper list:

<div cols=30%,40%,50%>

In this example, three column frames will cover 30%, 40%, and 50% of the document area. But how can this be? Since the sum of these percentages is greater than 100%, what's the browser to do?

### Normalization of Row and Column Lists

Although improper row or column lists can be confusing to programmers, frames-capable browsers can handle them quite easily through a technique called normalization. This means that whenever the sum of the row or column sizes does match the size of the area being divided, every frame is proportionately scaled until they all fit.

Suppose, for example, that you want to use percentages to divide a document area into three row frames of equal size. One third is approximately equal to 33% -- but not exactly. Since it is actually impossible to represent the quantity 1/3 this way, you might settle for

<div rows=33%,33%,33%>

Because the sum of the areas does not equal 100% exactly, the browser will automatically distribute the extra 1% evenly among all three rows. Hence, even though your numbers weren't exact, the browser's size normalization capability helps you achieve the desired effect!

Note: In this example example, percentages are used in the frameset only to motivate a discussion. A wise frame designer would actually prefer "`<frameset rows=*,*,*>`" instead.

To avoid creating improper row or column lists, remember the following rules:

1. If there is at least one pixel count specified in the list, then there must also be at least one * value in the list.
2. Otherwise, if there are no pixel values in the list, but there is at least one percentage value, then:
1. if the sum is less than 100%, there must be at least one * value;
2. otherwise the sum of the percentages must be exactly 100%.

For more information on forming row and column lists, see The Tags: <frameset ...> </frameset>

Next: Appendix: Catering to Frames-Incapable Browsers