fixed-table-layout-003f08.xht (3692B)
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 2 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 5 <head> 6 7 <title>CSS Test: table-layout: fixed - cell in the first row with specified width</title> 8 9 <link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/" /> 10 <link rel="help" href="http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout" /> 11 <link rel="bookmark" href="http://lists.w3.org/Archives/Public/www-style/2011Oct/0502.html" title="[css21] Section 17.5.2.1 should be clarified" /> 12 <link rel="match" href="fixed-table-layout-003f08-ref.xht" /> 13 14 <meta name="assert" content="A cell in the first row with specified non-auto 'width' sets the width for its column in the absence of a column element with specified non-auto width. This test checks the 'border-collapse: collapse' model with zero horizontal cell padding and with non-zero asymetrical horizontal cell borders." /> 15 16 <style type="text/css"><![CDATA[ 17 div, table {font: 1.25em/1.2 serif;} 18 19 table 20 { 21 border-collapse: collapse; 22 table-layout: fixed; 23 width: 300px; 24 } 25 26 td {padding: 0px;} 27 28 td#tested-cell 29 { 30 background-color: blue; 31 border-left: orange solid 32px; 32 border-right: orange solid 88px; 33 color: blue; 34 width: 80px; 35 } 36 37 div#reference 38 { 39 background-color: black; 40 color: black; 41 margin-left: 64px; 42 43 /* 44 45 " 46 In the fixed table layout algorithm, the width of each column is determined as follows: 47 48 (...) a cell in the first row with a value other than 'auto' for the 'width' property determines the width for that column. (...) 49 Any remaining columns equally divide the remaining horizontal table space (minus borders or cell spacing). 50 " 51 Section 17.5.2.1 Fixed table layout 52 http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout 53 54 55 Middle column width calculations 56 -------------------------------- 57 58 16px : half of border-left since such border must be split with cell in 1st column 59 + 60 80px : width of cell in the middle column 61 + 62 44px : half of border-right since such border must be split with cell in 3rd column 63 ======= 64 140px : width of the middle column 65 66 67 So, 68 300px : table set width 69 - 70 140px : width of the middle column 71 ======= 72 160px 73 74 So, each of the 2 remaining columns must be 75 half of such extra horizontal table space, 76 which is 160px divided by 2 == 80px. 77 78 1st column width calculations 79 ----------------------------- 80 81 (solve) : width of cell in 1st column 82 + 83 16px : border-right since such border must be split with cell in middle column 84 ======= 85 80px : width of 1st column 86 87 So, the width of the cell in first column must be exactly 64px. 88 89 90 3rd column width calculations 91 ----------------------------- 92 44px : border-left since such border must be split with cell in middle column 93 + 94 (solve) : width of cell in 3rd column 95 ======== 96 80px : width of 3rd column 97 98 So, the width of the cell in 3rd column must be exactly 36px. 99 100 101 Finally, the precise horizontal point where the border-right of cell 102 in first column begins to be drawn, painted is: 103 104 64px : width of cell in 1st column 105 106 Therefore the margin-left: 64px value of the div#reference. 107 108 */ 109 110 width: 200px; 111 } 112 ]]></style> 113 114 </head> 115 116 <body> 117 118 <p>Test passes if the 2 orange slivers and blue stripe are as a whole <strong>exactly as wide as</strong> the black stripe.</p> 119 120 <table> 121 122 <col /> 123 <col /> 124 <col /> 125 126 <tr> 127 <td></td> 128 <td id="tested-cell">F08</td> 129 <td></td> 130 </tr> 131 132 </table> 133 134 <div id="reference">200px wide</div> 135 136 </body> 137 </html>