- From: Dean Trower <dean@omnivision-au.com>
- Date: Tue, 11 Oct 2005 02:36:27 +0000
- To: <www-style@w3.org>
CSS selector syntax ought to have a mechansim for selecting table cells based on row and column, taking rowspan and colspan attributes into account when determining a cell's row and column coordinate ranges. I propose something vaguely along the lines of the following (i.e. having the power and flexibility shown below, if not the exact syntax): ----------------------------------- td[3] {background-color:green} /* 4th column (0 based col index) of "myStyledTable" is green (including any cells SPANNING this column) */ td[3][6] {color:red} /* table cell at or covering column 3, row 6 has color red */ td[5, 7] {background-color:blue} /* columns 5 and 7 are blue */ td[][0-2] {background-color:blue} /* rows 0 to 2 inclusive are blue */ td[*][0-2] {background-color:blue} /* rows 0 to 2 inclusive are blue */ td[][@7] {background-color:blue} /* 8th row in any <THEAD>, <TFOOT>, or <TBODY> section is blue ('@' symbol means row numbering by section rather than over whole table) */ /* cells belonging to a <COL> or <COLGROUP> element with class "colClass1" are red: */ td[.colClass1] {background-color:red} /* The following selects both <TD> and <TH> elements in the intersection of the following columns: -- <COL> or <COLGROUP> elements with class "colClass2" -- <COL> or <COLGROUP> elements with ID "colID1" -- columns numbered 11 through 15 inclusive with the following rows: -- rows who's <TR> element has class "myRowClass" -- rows who's <TR> element has ID "myRowID" -- rows numbered 20 through 22 inclusive */ *[.colClass2, #colID1, 11-15][.myRowClass, #myRowID, 7, 20-22] {background-color:red} /* The following selects only <TD> cells that BEGIN in column 3 (i.e. who's left edge is the left edge of column 3) td[3~] {border:2px solid black} /* The following selects only <TD> cells that END in column 7 (i.e. who's right edge is the right edge of column 7) td[~7] {border:2px solid black} /* The following selects only <TH> cells that begin in column 5 and have COLSPAN=3 */ th[5~8] {border:2px solid black} /* The following selects both <TD> and <TH> cells that: -- begin in a column belonging to a <COL> or <COLGROUP> element with class "leftEdge" -- end either at column 13 or in columns ranging from 17 through 21 inclusive, or in a column who's <COL> or <COLGROUP> element has ID "rightEdge" AND -- span any row who's <TR> element has class "sytledRow", OR -- end at row 35 (i.e. they include row 35 as the last row that they span), OR -- are completely contained within a <TR> element whose ID is "thinRow" (i.e. they'd need to have ROWSPAN=1) */ *[.leftEdge~13, .leftedge~17-21, .leftEdge~#rightEdge][.styledRow, ~35, #thinRow~#thinRow] {font-face:bold} ----------------------------------- The syntax need only apply to <TD> and <TH> elements (* for both) - it could be ignored for all others. Implicit in this syntax is the idea that each <TD> or <TH> element knows its rectangular grid cooridinates in the table - left and right column index, and top and bottom rows; and that it knows or can quickly discover which <COL> and <COLGROUP> elements it falls under, as well as which <TR> elements it intersects (starting with it's parentNode, but there may be more if it has ROWSPAN>1). Thus, there should probably be DOM properties for all these things, as well as methods for getting collections of cells in intersecting row and column ranges, etc.. This information is implicit in HTML table structure, so should be available before any CSS cascade begins. Any comments? -- Dean Trower dean [at] omnivision [a dash here, not a dot] au [dot] com
Received on Tuesday, 11 October 2005 09:56:07 UTC