How to create a table with fixed-width columns regardless of contents, and/or the type of browser in use (e.g. IE, NN, Opera)?

Here is an example:

<table border=1 width=183 style=‘table-layout:fixed’>
<col width=67>
<col width=75>
<col width=41>
<tr>
<td>First Column</td>
<td>Second Column</td>
<td>Third Column</td>
</tr>
<tr>
<td>Row 1</td>
<td>Text</td>
<td align=right>1</td>
</tr>
<tr>
<td>Row 2</td>
<td>Abcdefg</td>
<td align=right>123</td>
</tr>
<tr>
<td>Row 3</td>
<td>Abcdefghijklmnop</td>
<td align=right>123456</td>
</tr>
</table>

Notice how a very long entry does not cause a column to expand.

There are three (3) elements involved here to maintain cross-browser consistency.
1) use of width attribute in the table tag
2) use of ‘table-layout:fixed’ property in the style attribute of the table.
3) use of col tags to designate column widths

Make sure the value of the width attribute of the table tag is equal to the total of the width attributes of the col tags.

The 3 elements altogether is redundant if you are using IE. But this approach is needed to take care of the way some browsers like NN behaves differently when specifying column widths.

There are other ways to accomplish this, but this approach is the *easiest* to maintain, especially if you frequently add and delete table rows and/or columns. You don’t have to put style sheet properties on every TD tags.

NOTE:

I used IE6, NN6, Opera7 and Firefox 0.9 to test this. Users of Netscape and Firefox may not like to see table cells with overflowing long texts (because of fixed column-widths), so I updated this FAQ to include the following code in the CSS style definition inside the <HEAD> tags or in the external CSS file:

<style>
td {overflow:hidden;}
</style>

NOTE: This is an archive/copy of the article posted here: http://www.tek-tips.com/faqs.cfm?fid=4499