<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>CSS Test: table-layout fixed - columns with percentage width and absolute width</title> <link rel="author" title="GĂ©rard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout" title="17.5.2.1 Fixed table layout" /> <link rel="match" href="fixed-table-layout-023-ref.xht" /> <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" /> <meta content="A column with a percentage width in a 'table-layout: fixed' table can be calculated, predicted, rendered." name="assert" /> <style type="text/css"><![CDATA[ body { margin: 8px; width: 640px; } table, div {font: 1.25em/1 Ahem;} table { border: white solid; border-width: 0px 11px; /* horizontal table border width is 22px total */ border-collapse: separate; border-spacing: 18px 4px; /* horizontal border-spacing width is 90px total */ table-layout: fixed; width: 80%; /* 640px mult by 80% == 512px */ /* "With this (fast) algorithm, the horizontal layout of the table does not depend on the contents of the cells; it only depends on the table's width, the width of the columns, and [table] borders or cell spacing." So, 512px : total table width - 90px : total horizontal border-spacing width - 22px : total horizontal border-spacing width ======== 400px : total to split among the 4 columns */ } col#first { background-color: fuchsia; width: 13%; /* 400px multiplied by 13% = 52px */ } col#second { background-color: olive; width: 100px; } col#third { background-color: orange; width: 31%; /* 400px multiplied by 31% = 124px */ /* 400px - (52px + 100px + 124px) = 124px for last column */ } col#fourth {background-color: lime;} td {padding: 1px 10px;} td#first-cell {color: fuchsia;} td#second-cell {color: olive;} td#third-cell {color: orange;} td#fourth-cell {color: lime;} div {padding: 1px 0px;} div#reference1st { background-color: fuchsia; color: fuchsia; left: 29px; /* 11px border-left of table + 18px border-spacing == 29px */ position: relative; width: 52px; } div#reference2nd { background-color: olive; bottom: 1.1em; color: olive; left: 99px; /* 11px : border-left of table + 18px : 1st border-spacing + 52px : width of first column + 18px : 2nd border-spacing ======= 99px */ position: relative; width: 100px; } div#reference3rd { background-color: orange; bottom: 2.2em; color: orange; left: 217px; /* 11px : border-left of table + 18px : 1st border-spacing + 52px : width of first column + 18px : 2nd border-spacing + 100px : width of second column + 18px : 3rd border-spacing ======= 217px */ position: relative; width: 124px; } div#reference4th { background-color: lime; bottom: 3.3em; color: lime; left: 359px; /* 11px : border-left of table + 18px : 1st border-spacing + 52px : width of first column + 18px : 2nd border-spacing + 100px : width of second column + 18px : 3rd border-spacing + 124px : width of third column + 18px : 4th border-spacing ======= 359px */ position: relative; width: 124px; } ]]></style> </head> <body> <p>Test passes if the colored (fuchsia, olive, orange and lime) stripes have respectively the same widths and the same horizontal positions.</p> <table> <col id="first"></col> <col id="second"></col> <col id="third"></col> <col id="fourth"></col> <tr> <td id="first-cell">1</td> <td id="second-cell">2</td> <td id="third-cell">3</td> <td id="fourth-cell">4</td> </tr> </table> <div id="reference1st">r</div> <div id="reference2nd">r</div> <div id="reference3rd">r</div> <div id="reference4th">r</div> </body> </html>