## COL

Attribute definitions

span = number [CN]
  This attribute, whose value must be an integer > 0, specifies the number of columns "spanned" by the COL element; the COL element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., the COL element refers to a single column). If the span attribute is set to N > 1, the current COL element shares its attributes with the next N-1 columns.
width = multi-length [CN]
  This attribute specifies a default width for each column spanned by the current COL element. It has the same meaning as the width attribute for the COLGROUP element and overrides it.

Attributes defined elsewhere

- id, class (document-wide identifiers)

- lang (language information), dir (text direction)

- title (element title)

- style (inline style information )

- onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup (intrinsic events )

- align, char, charoff, valign (cell alignment)

The COL element allows authors to group together attribute specifications for table columns. The COL does not group columns together structurally -- that is the role of the COLGROUP element. COL elements are empty and serve only as a support for attributes. They may appear inside or outside an explicit column group (i.e., COLGROUP element).

The width attribute for COL refers to the width of each column in the element's span.

#### Calculating the number of columns in a table

There are two ways to determine the number of columns in a table (in order of precedence):

1. If the TABLE element contains any COLGROUP or COL elements, user agents should calculate the number of columns by summing the following:

   - For each COL element, take the value of its span attribute (default value 1).

   - For each COLGROUP element containing at least one COL element, ignore the span attribute for the COLGROUP element. For each COL element, perform the calculation of step 1.

   - For each empty COLGROUP element, take the value of its span attribute (default value 1).

2. Otherwise, if the TABLE element contains no COLGROUP or COL elements, user agents should base the number of columns on what is required by the rows. The number of columns is equal to the number of columns required by the row with the most columns, including cells that span multiple columns. For any row that has fewer than this number of columns, the end of that row should be padded with empty cells. The "end" of a row depends on the table directionality.

It is an error if a table contains COLGROUP or COL elements and the two calculations do not result in the same number of columns.

Once the user agent has calculated the number of columns in the table, it may group them into column groups.

For example, for each of the following tables, the two column calculation methods should result in three columns. The first three tables may be rendered incrementally.

    <TABLE>
    <COLGROUP span="3"></COLGROUP>
    <TR><TD> ...
    ...rows...
    </TABLE>

    <TABLE>
    <COLGROUP>
    <COL>
    <COL span="2">
    </COLGROUP>
    <TR><TD> ...
    ...rows...
    </TABLE>

    <TABLE>
    <COLGROUP>
    <COL>
    </COLGROUP>
    <COLGROUP span="2">
    <TR><TD> ...
    ...rows...
    </TABLE>

    <TABLE>
    <TR>
      <TD><TD><TD>
    </TR>
    </TABLE>

#### Calculating the width of columns

Authors may specify column widths in three ways:

Fixed
  A fixed width specification is given in pixels (e.g., width="30"). A fixed-width specification enables incremental rendering.
Percentage
  A percentage specification (e.g., width="20%") is based on the percentage of the horizontal space available to the table (between the current left and right margins, including floats). Note that this space does not depend on the table itself, and thus percentage specifications enable incremental rendering.
Proportional
  Proportional specifications (e.g., width="3*") refer to portions of the horizontal space required by a table. If the table width is given a fixed value via the width attribute of the TABLE element, user agents may render the table incrementally even with proportional columns.
  However, if the table does not have a fixed width, user agents must receive all table data before they can determine the horizontal space required by the table. Only then may this space be allotted to proportional columns.

If an author specifies no width information for a column, a user agent may not be able to incrementally format the table since it must wait for the entire column of data to arrive in order to allot an appropriate width.

If column widths prove to be too narrow for the contents of a particular table cell, user agents may choose to reflow the table.

The table in this example contains six columns. The first one does not belong to an explicit column group. The next three belong to the first explicit column group and the last two belong to the second explicit column group. This table cannot be formatted incrementally since it contains proportional column width specifications and no value for the width attribute for the TABLE element.

Once the (visual) user agent has received the table's data: the available horizontal space will be alloted by the user agent as follows: First the user agent will allot 30 pixels to columns one and two. Then, the minimal space required for the third column will be reserved. The remaining horizontal space will be divided into six equal portions (since 2* + 1* + 3* = 6 portions). Column four (2*) will receive two of these portions, column five (1*) will receive one, and column six (3*) will receive three.

    <TABLE>
    <COLGROUP>
       <COL width="30">
    <COLGROUP>
       <COL width="30">
       <COL width="0*">
       <COL width="2*">
    <COLGROUP align="center">
       <COL width="1*">
       <COL width="3*" align="char" char=":">
    <THEAD>
    <TR><TD> ...
    ...rows...
    </TABLE>

We have set the value of the align attribute in the third column group to "center". All cells in every column in this group will inherit this value, but may override it. In fact, the final COL does just that, by specifying that every cell in the column it governs will be aligned along the ":" character.

In the following table, the column width specifications allow the user agent to format the table incrementally:

    <TABLE width="200">
    <COLGROUP span="10" width="15">
    <COLGROUP width="*">
       <COL id="penultimate-column">
       <COL id="last-column">
    <THEAD>
    <TR><TD> ...
    ...rows...
    </TABLE>

The first ten columns will be 15 pixels wide each. The last two columns will each receive half of the remaining 50 pixels. Note that the COL elements appear only so that an id value may be specified for the last two columns.

Note. Although the width attribute on the TABLE element is not deprecated, authors are encouraged to use style sheets to specify table widths.