Movatterモバイル変換


[0]ホーム

URL:


previous  next  contents  properties  index  


17 Tables

Contents

Note: Several sections of this specification have been updated by other specifications. Please, see"Cascading Style Sheets (CSS) — The Official Definition" in the latestCSS Snapshot for a list of specifications and the sections they replace.

The CSS Working Group is also developingCSS level 2 revision 2 (CSS 2.2).

17.1Introduction to tables

This chapter defines the processing model for tables in CSS. Partof this processing model is the layout. For the layout, this chapterintroduces two algorithms; the first, the fixed table layoutalgorithm, is well-defined, but the second, the automatic table layoutalgorithm, is not fully defined by this specification.

For the automatic table layout algorithm, some widely deployedimplementations have achieved relatively close interoperability.

Table layout can beused to represent tabular relationships between data. Authors specifythese relationships in thedocumentlanguage and can specify theirpresentation usingCSS 2.1.

In a visual medium, CSS tables can also be used to achieve specificlayouts. In this case, authors should not use table-related elementsin the document language, but should apply the CSS to the relevantstructural elements to achieve the desired layout.

Authors may specify the visual formatting of a table as arectangular grid of cells. Rows and columns of cells may be organizedinto row groups and column groups. Rows, columns, row groups, columngroups, and cells may have borders drawn around them (there are twoborder models in CSS 2.1). Authors may align data vertically orhorizontally within a cell and align data in all cells of a row orcolumn.

Example(s):

Here is a simple three-row, three-column table described in HTML 4:

<TABLE><CAPTION>This is a simple 3x3 table</CAPTION><TR>   <TH>Header 1  <TD>Cell 1  <TD>Cell 2<TR>   <TH>Header 2  <TD>Cell 3  <TD>Cell 4<TR>   <TH>Header 3  <TD>Cell 5  <TD>Cell 6</TABLE>

This code creates one table (the TABLE element), threerows (the TR elements), three header cells (the TH elements),and six data cells (the TD elements). Note that the three columnsof this example are specified implicitly: there are as manycolumns in the table as required by header and data cells.

The following CSS rule centers the text horizontally in the headercells and presents the text in the header cells with a bold fontweight:

th { text-align: center; font-weight: bold }

The next rules align the text of the header cells on their baselineand vertically center the text in each data cell:

th { vertical-align: baseline }td { vertical-align: middle }

The next rules specify that the top row will be surrounded by a 3pxsolid blue border and each of the other rows will be surrounded by a1px solid black border:

table   { border-collapse: collapse }tr#row1 { border: 3px solid blue }tr#row2 { border: 1px solid black }tr#row3 { border: 1px solid black }

Note, however, that the borders around the rows overlap where therows meet. What color (black or blue) and thickness (1px or 3px) willthe border between row1 and row2 be? We discuss this in the section onborder conflict resolution.

The following rule puts the table caption above the table:

caption { caption-side: top }

The preceding example shows how CSS works with HTML 4 elements;in HTML 4, the semantics of the various table elements (TABLE,CAPTION, THEAD, TBODY, TFOOT, COL, COLGROUP, TH, and TD) arewell-defined. In other document languages (such as XML applications),there may not be pre-defined table elements. Therefore, CSS 2.1 allowsauthors to"map" document language elements to table elements viathe'display' property. Forexample, the following rule makes the FOO element act like an HTMLTABLE element and the BAR element act like a CAPTION element:

FOO { display : table }BAR { display : table-caption }

We discuss the various table elements in thefollowing section. Inthis specification, the termtable element refers to any elementinvolved in the creation of a table. Aninternaltable element is one that produces a row, row group, column,column group, or cell.

17.2The CSS table model

The CSS table model is based on the HTML4 table model, inwhich the structure of a table closely parallels the visual layout ofthe table. In this model, a table consists of an optional caption andany number of rows of cells. The table model is said to be "rowprimary" since authors specify rows, not columns, explicitly in thedocument language. Columns are derived once all the rows have beenspecified -- the first cell of each row belongs to the first column,the second to the second column, etc.). Rows and columns may begrouped structurally and this grouping reflected in presentation(e.g., a border may be drawn around a group of rows).

Thus, the table model consists of tables, captions, rows,row groups (including header groups and footergroups), columns, column groups, and cells.

The CSS model does not require that thedocument language include elementsthat correspond to each of these components. For document languages(such as XML applications) that do not have pre-defined tableelements, authors must map document language elements to tableelements; this is done with the'display' property. The following'display' values assign tableformatting rules to an arbitrary element:

table (In HTML: TABLE)
Specifies that an element defines ablock-level table: it is a rectangular block that participates in ablock formatting context.
inline-table (In HTML: TABLE)
Specifies that an element defines aninline-level table: it is a rectangular block that participates in aninline formatting context).
table-row (In HTML: TR)
Specifies that an element is a row of cells.
table-row-group (In HTML: TBODY)
Specifies that an element groups one or more rows.
table-header-group (In HTML: THEAD)
Like 'table-row-group', but for visual formatting, the row group is always displayed before all other rows and row groups and after any top captions. Print user agents may repeat header rows on each page spanned by a table. If a table contains multiple elements with 'display: table-header-group', only the first is rendered as a header; the others are treated as if they had 'display: table-row-group'.
table-footer-group (In HTML: TFOOT)
Like 'table-row-group', but for visual formatting, the row group is always displayed after all other rows and row groups and before any bottom captions. Print user agents may repeat footer rows on each page spanned by a table. If a table contains multiple elements with 'display: table-footer-group', only the first is rendered as a footer; the others are treated as if they had 'display: table-row-group'.
table-column (In HTML: COL)
Specifies that an element describes a column of cells.
table-column-group (In HTML: COLGROUP)
Specifies that an element groups one or more columns.
table-cell (In HTML: TD, TH)
Specifies that an element represents a table cell.
table-caption (In HTML: CAPTION)
Specifies a caption for the table. All elements with 'display: table-caption' must be rendered, as described insection 17.4.

Replaced elements with these'display' values are treated as theirgiven display types during layout. For example, an image that is setto 'display: table-cell' will fill the available cell space, and itsdimensions might contribute towards the table sizing algorithms, aswith an ordinary cell.

Elements with'display' setto 'table-column' or 'table-column-group' are not rendered (exactly asif they had 'display: none'), but they are useful, because they mayhave attributes which induce a certain style for the columns theyrepresent.

Thedefault style sheet for HTML4in the appendix illustrates the use of these values for HTML4:

table    { display: table }tr       { display: table-row }thead    { display: table-header-group }tbody    { display: table-row-group }tfoot    { display: table-footer-group }col      { display: table-column }colgroup { display: table-column-group }td, th   { display: table-cell }caption  { display: table-caption }

User agents mayignore these'display' property values forHTML table elements, since HTML tables may be rendered using otheralgorithms intended for backwards compatible rendering. However, thisis not meant to discourage the use of 'display: table' on other,non-table elements in HTML.

17.2.1Anonymous table objects

Document languages other than HTML may not contain all the elementsin the CSS 2.1 table model. In these cases, the "missing"elements must be assumed in order for the table model to work. Anytable element will automatically generate necessary anonymous tableobjects around itself, consisting of at least three nested objectscorresponding to a 'table'/'inline-table' element, a 'table-row'element, and a 'table-cell' element. Missing elements generateanonymous objects (e.g., anonymousboxes in visual table layout) according to the following rules:

For the purposes of these rules, the following terms are defined:

row group box
A 'table-row-group', 'table-header-group', or 'table-footer-group'
proper table child
A 'table-row' box, row group box, 'table-column' box, 'table-column-group' box, or 'table-caption' box.
proper table row parent
A 'table' or 'inline-table' box or row group box
internal table box
A 'table-cell' box, 'table-row' box, row group box, 'table-column' box, or 'table-column-group' box.
tabular container
A 'table-row' box or proper table row parent
consecutive
Two sibling boxes are consecutive if they have no intervening siblings other than, optionally, an anonymous inline containing only white spaces. A sequence of sibling boxes is consecutive if each box in the sequence is consecutive to the one before it in the sequence.

For the purposes of these rules, out-of-flow elements arerepresented as inline elements of zero width and height. Theircontaining blocks are chosen accordingly.

The following steps are performed in three stages.

  1. Remove irrelevant boxes:
    1. All child boxes of a 'table-column' parent are treated as if they had 'display: none'.
    2. If a childC of a 'table-column-group' parent is not a 'table-column' box, then it is treated as if it had 'display: none'.
    3. If a childC of a tabular containerP is an anonymous inline box that contains only white space, and its immediately preceding and following siblings, if any, are proper table descendants ofP and are either 'table-caption' or internal table boxes, then it is treated as if it had 'display: none'. A boxD is a proper table descendant ofA ifD can be a descendant ofA without causing the generation of any intervening 'table' or 'inline-table' boxes.
    4. If a boxB is an anonymous inline containing only white space, and is between two immediate siblings each of which is either an internal table box or a 'table-caption' box thenB is treated as if it had 'display: none'.
  2. Generate missing child wrappers:
    1. If a childC of a 'table' or 'inline-table' box is not a proper table child, then generate an anonymous 'table-row' box aroundC and all consecutive siblings ofC that are not proper table children.
    2. If a childC of a row group box is not a 'table-row' box, then generate an anonymous 'table-row' box aroundC and all consecutive siblings ofC that are not 'table-row' boxes.
    3. If a childC of a 'table-row' box is not a 'table-cell', then generate an anonymous 'table-cell' box aroundC and all consecutive siblings ofC that are not 'table-cell' boxes.
  3. Generate missing parents:
    1. For each 'table-cell' boxC in a sequence of consecutive internal table and 'table-caption' siblings, ifC's parent is not a 'table-row' then generate an anonymous 'table-row' box aroundC and all consecutive siblings ofC that are 'table-cell' boxes.
    2. For each proper table childC in a sequence of consecutive proper table children, ifC is misparented then generate an anonymous 'table' or 'inline-table' boxT aroundC and all consecutive siblings ofC that are proper table children. (If C's parent is an 'inline' box, thenT must be an 'inline-table' box; otherwise it must be a 'table' box.)
      • A 'table-row' is misparented if its parent is neither a row group box nor a 'table' or 'inline-table' box.
      • A 'table-column' box is misparented if its parent is neither a 'table-column-group' box nor a 'table' or 'inline-table' box.
      • A row group box, 'table-column-group' box, or 'table-caption' box is misparented if its parent is neither a 'table' box nor an 'inline-table' box.

Example(s):

In this XML example, a 'table' element is assumed to contain theHBOX element:

<HBOX>  <VBOX>George</VBOX>  <VBOX>4287</VBOX>  <VBOX>1998</VBOX></HBOX>

because the associated style sheet is:

HBOX { display: table-row }VBOX { display: table-cell }

Example(s):

In this example, three 'table-cell' elements are assumed to containthe text in the ROWs. Note that the text is further encapsulated inanonymous inline boxes, as explained invisual formatting model:

<STACK>  <ROW>This is the <D>top</D> row.</ROW>  <ROW>This is the <D>middle</D> row.</ROW>  <ROW>This is the <D>bottom</D> row.</ROW></STACK>

The style sheet is:

STACK { display: inline-table }ROW   { display: table-row }D     { display: inline; font-weight: bolder }

17.3Columns

Table cells may belong to two contexts: rows and columns. However,in the source document cells are descendants of rows, never ofcolumns. Nevertheless, some aspects of cells can be influenced bysetting properties on columns.

The following properties apply to column and column-group elements:

'border'
The various border properties apply to columns only if'border-collapse' is set to 'collapse' on the table element. In that case, borders set on columns and column groups are input to theconflict resolution algorithm that selects the border styles at every cell edge.
'background'
The background properties set the background for cells in the column, but only if both the cell and row have transparent backgrounds. See"Table layers and transparency."
'width'
The'width' property gives the minimum width for the column.
'visibility'
If the 'visibility' of a column is set to 'collapse', none of the cells in the column are rendered, and cells that span into other columns are clipped. In addition, the width of the table is diminished by the width the column would have taken up. See"Dynamic effects" below. Other values for 'visibility' have no effect.

Example(s):

Here are some examples of style rules that set properties oncolumns. The first two rules together implement the "rules" attributeof HTML 4 with a value of "cols". The third rule makes the "totals"column blue, the final two rules shows how to make a column a fixedsize, by using thefixed layoutalgorithm.

col { border-style: none solid }table { border-style: hidden }col.totals { background: blue }table { table-layout: fixed }col.totals { width: 5em }

17.4Tables in the visual formatting model

In terms of the visual formatting model, a table can behave like ablock-level (for 'display:table') orinline-level (for'display: inline-table') element.

In both cases, the table generates a principal block box called thetable wrapper box thatcontains the table box itself and any caption boxes (in documentorder).Thetable box is a block-level box that contains thetable's internal table boxes.The caption boxes are block-level boxes that retain their owncontent, padding, margin, and border areas, and are rendered as normalblock boxes inside the table wrapper box. Whether the caption boxes are placedbefore or after the table box is decided by the 'caption-side'property, as described below.

The table wrapper box is a 'block' box if the table is block-level, andan 'inline-block' box if the table is inline-level. The table wrapper boxestablishes a block formatting context. The table box (not thetable wrapper box) is used when doing baselinevertical alignment for an 'inline-table'. The width of the table wrapperbox is the border-edge width of the table box inside it, as describedby section 17.5.2. Percentages on 'width' and 'height' on the table arerelative to the table wrapper box's containing block, not the table wrapper boxitself.

The computed values of properties 'position', 'float', 'margin-*','top', 'right', 'bottom', and 'left' on the table element are used onthe table wrapper box and not the table box; all other values ofnon-inheritable properties are used on the table box and not the tablewrapper box. (Where the table element's values are not used on thetable and table wrapper boxes, the initial values are used instead.)

A table with a caption aboveit

Diagram of a table with a caption above it.

17.4.1Caption position and alignment

'caption-side'
Value:  top | bottom |inherit
Initial:  top
Applies to:  'table-caption' elements
Inherited:  yes
Percentages:  N/A
Media:  visual
Computed value:  as specified

This property specifies the position of the caption box withrespect to the table box. Values have the following meanings:

top
Positions the caption box above the table box.
bottom
Positions the caption box below the table box.

Note: CSS2 described a different width andhorizontal alignment behavior. That behavior will be introduced inCSS3 using the values 'top-outside' and 'bottom-outside' on thisproperty.

To align caption content horizontally within the caption box, usethe'text-align' property.

Example(s):

In this example, the'caption-side' property placescaptions below tables. The caption will be as wide as the parent ofthe table, and caption text will be left-justified.

caption { caption-side: bottom;           width: auto;          text-align: left }

17.5Visual layout of table contents

Internal table elements generate rectangularboxes with content and borders.Cells have padding as well. Internal table elements do not havemargins.

The visual layout of these boxes is governed by a rectangular,irregular grid of rows and columns. Each box occupies a whole numberof grid cells, determined according to the following rules. Theserules do not apply to HTML 4 or earlier HTML versions; HTML imposesits own limitations on row and column spans.

  1. Each row box occupies one row of grid cells. Together, the row boxes fill the table from top to bottom in the order they occur in the source document (i.e., the table occupies exactly as many grid rows as there are row elements).
  2. A row group occupies the same grid cells as the rows it contains.
  3. A column box occupies one or more columns of grid cells. Column boxes are placed next to each other in the order they occur. The first column box may be either on the left or on the right, depending on the value of the'direction' property of the table.
  4. A column group box occupies the same grid cells as the columns it contains.
  5. Cells may span several rows or columns. (Although CSS 2.1 does not define how the number of spanned rows or columns is determined, a user agent may have special knowledge about the source document; a future update of CSS may provide a way to express this knowledge in CSS syntax.) Each cell is thus a rectangular box, one or more grid cells wide and high. The top row of this rectangle is in the row specified by the cell's parent. The rectangle must be as far to the left as possible, but the part of the cell in the first column it occupies must not overlap with any other cell box (i.e., a row-spanning cell starting in a prior row), and the cell must be to the right of all cells in the same row that are earlier in the source document. If this position would cause a column-spanning cell to overlap a row-spanning cell from a prior row, CSS does not define the results: implementations may either overlap the cells (as is done in many HTML implementations) or may shift the later cell to the right to avoid such overlap. (This constraint holds if the 'direction' property of the table is 'ltr'; if the 'direction' is 'rtl', interchange "left" and "right" in the previous two sentences.)
  6. A cell box cannot extend beyond the last row box of a table or row group; the user agents must shorten it until it fits.

The edges of the rows, columns, row groups and column groups in thecollapsing borders model coincidewith the hypothetical grid lines on which the borders of the cells arecentered. (And thus, in this model, the rows together exactly coverthe table, leaving no gaps; ditto for the columns.) In theseparated borders model, the edgescoincide with theborder edges ofcells. (And thus, in this model, there may be gaps between the rows,columns, row groups or column groups, corresponding to the'border-spacing' property.)

Note. Positioning and floating of table cellscan cause them not to be table cells anymore, according to the rulesinsection 9.7. When floatingis used, therules on anonymous table objects may cause ananonymous cell object to be created as well.

Here is an example illustrating rule 5. The following illegal (X)HTML snippet defines conflicting cells:

<table><tr><td>1 </td><td rowspan="2">2 </td><td>3 </td><td>4 </td></tr><tr><td colspan="2">5 </td></tr></table>

User agents are free to visually overlap the cells, as in thefigure on the left, or to shift the cell to avoid the visualoverlap, as in the figure on the right.

One table with overlappingcells and one without   [D]

Two possiblerenderings of an erroneous HTML table.

17.5.1Table layers and transparency

For the purposes of finding the background of each table cell, thedifferent table elements may be thought of as being on sixsuperimposed layers. The background set on an element in one of thelayers will only be visible if the layers above it have a transparentbackground.

schema of table layers   [D]

Schema of table layers.

  1. The lowest layer is a single plane, representing the table box itself. Like all boxes, it may be transparent.
  2. The next layer contains the column groups. Each column group extends from the top of the cells in the top row to the bottom of the cells on the bottom row and from the left edge of its leftmost column to the right edge of its rightmost column. The background covers exactly the full area of all cells that originate in the column group, even if they span outside the column group, but this difference in area does not affect background image positioning.
  3. On top of the column groups are the areas representing the column boxes. Each column is as tall as the column groups and as wide as a normal (single-column-spanning) cell in the column. The background covers exactly the full area of all cells that originate in the column, even if they span outside the column, but this difference in area does not affect background image positioning.
  4. Next is the layer containing the row groups. Each row group extends from the top left corner of its topmost cell in the first column to the bottom right corner of its bottommost cell in the last column.
  5. The next to last layer contains the rows. Each row is as wide as the row groups and as tall as a normal (single-row-spanning) cell in the row. As with columns, the background covers exactly the full area of all cells that originate in the row, even if they span outside the row, but this difference in area does not affect background image positioning.
  6. The topmost layer contains the cells themselves. As the figure shows, although all rows contain the same number of cells, not every cell may have specified content. In theseparated borders model ('border-collapse' is 'separate'), if the value of their'empty-cells' property is 'hide' these "empty" cells are transparent through the cell, row, row group, column and column group backgrounds, letting the table background show through.

A "missing cell" is a cell in the row/column grid that is notoccupied by an element or pseudo-element. Missing cells are renderedas if an anonymous table-cell box occupied their position in the grid.

In the following example, the first row contains four non-emptycells, but the second row contains only one non-empty cell, and thusthe table background shines through, except where a cell from thefirst row spans into this row. The following HTML code and style rules

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML>  <HEAD>    <TITLE>Table example</TITLE>    <STYLE type="text/css">      TABLE  { background: #ff0; border: solid black;               empty-cells: hide }      TR.top { background: red }      TD     { border: solid black }    </STYLE>  </HEAD>  <BODY>    <TABLE>      <TR>        <TD> 1         <TD rowspan="2"> 2        <TD> 3         <TD> 4       <TR>        <TD> 5        <TD>    </TABLE>   </BODY></HTML>

might be formatted as follows:

Table with three empty cells  in bottom row   [D]

Table with empty cells in the bottom row.

Note that if the table has 'border-collapse: separate', thebackground of the area given by the'border-spacing' property isalways the background of the table element. Seethe separated borders model.

17.5.2Table width algorithms:the'table-layout'property

CSS does not define an "optimal" layout for tables since, in manycases, what is optimal is a matter of taste. CSS does defineconstraints that user agents must respect when laying out a table.User agents may use any algorithm they wish to do so, and are free toprefer rendering speed over precision, except when the "fixed layoutalgorithm" is selected.

Note that this section overrides the rules that apply tocalculating widths as described insection 10.3. Inparticular, if the margins of a table are set to '0' and the width to'auto', the table will not automatically size to fill its containingblock. However, once the calculated value of 'width' for the table isfound (using the algorithms given below or, when appropriate, someother UA dependent algorithm) then the other parts of section 10.3 doapply. Therefore a tablecan be centered using left and right'auto' margins, for instance.

Future updates of CSS may introduce ways of making tablesautomatically fit their containing blocks.

'table-layout'
Value:  auto | fixed |inherit
Initial:  auto
Applies to:  'table' and 'inline-table' elements
Inherited:  no
Percentages:  N/A
Media:  visual
Computed value:  as specified

The'table-layout'property controls the algorithm used to lay out the table cells, rows,and columns. Values have the following meaning:

fixed
Use the fixed table layout algorithm
auto
Use any automatic table layout algorithm

The two algorithms are described below.

17.5.2.1Fixed table layout

With this (fast) algorithm, the horizontal layout of the table doesnot depend on the contents of the cells; it only depends on thetable's width, the width of the columns, and borders or cell spacing.

The table's width may be specified explicitly with the'width' property. A value of 'auto' (forboth 'display: table' and 'display: inline-table') means use theautomatic table layout algorithm.However, if the table is a block-level table ('display: table') innormal flow, a UA may (but does not have to) use the algorithm of10.3.3 to compute a width and applyfixed table layout even if the specified width is 'auto'.

Example(s):

If a UA supports fixed table layout when 'width' is 'auto', thefollowing will create a table that is 4em narrower than its containingblock:

table { table-layout: fixed;        margin-left: 2em;        margin-right: 2em }

In the fixed table layout algorithm, the width of each column isdetermined as follows:

  1. A column element with a value other than 'auto' for the'width' property sets the width for that column.
  2. Otherwise, a cell in the first row with a value other than 'auto' for the'width' property determines the width for that column. If the cell spans more than one column, the width is divided over the columns.
  3. Any remaining columns equally divide the remaining horizontal table space (minus borders or cell spacing).

The width of the table is then the greater of the value of the'width' property for the tableelement and the sum of the column widths (plus cell spacing orborders). If the table is wider than the columns, the extra spaceshould be distributed over the columns.

If a subsequent row has more columns than the greater of the numberdetermined by the table-column elements and the number determined bythe first row, thenadditional columns may not be rendered. CSS 2.1 does not definethe width of the columns and the table if theyare rendered. When using 'table-layout:fixed', authors should not omit columns from the first row.

In this manner, the user agent can begin to lay out the table oncethe entire first row has been received. Cells in subsequent rows donot affect column widths. Any cell that has content that overflowsuses the'overflow' property todetermine whether to clip the overflow content.

17.5.2.2Automatic table layout

In this algorithm (which generally requires no more than twopasses), the table's width is given by the width of its columns (andinterveningborders). This algorithm reflectsthe behavior of several popular HTML user agents at the writing ofthis specification. UAs are not required to implement this algorithmto determine the table layout in the case that'table-layout' is 'auto'; theycan use any other algorithm even if it results in different behavior.

Input to the automatic table layout must only include the width ofthe containing block and the content of, and any CSS properties seton, the table and any of its descendants.

Note. This may be defined in more detail inCSS3.

The remainder of this section is non-normative.

This algorithm may be inefficient since it requires the user agentto have access to all the content in the table before determining thefinal layout and may demand more than one pass.

Column widths are determined as follows:

  1. Calculate the minimum content width (MCW) of each cell: the formatted content may span any number of lines but may not overflow the cell box. If the specified'width' (W) of the cell is greater than MCW, W is the minimum cell width. A value of 'auto' means that MCW is the minimum cell width.

    Also, calculate the "maximum" cell width of each cell: formatting the content without breaking lines other than where explicit line breaks occur.

  2. For each column, determine a maximum and minimum column width from the cells that span only that column. The minimum is that required by the cell with the largest minimum cell width (or the column'width', whichever is larger). The maximum is that required by the cell with the largest maximum cell width (or the column'width', whichever is larger).

  3. For each cell that spans more than one column, increase the minimum widths of the columns it spans so that together, they are at least as wide as the cell. Do the same for the maximum widths. If possible, widen all spanned columns by approximately the same amount.

  4. For each column group element with a 'width' other than 'auto', increase the minimum widths of the columns it spans, so that together they are at least as wide as the column group's 'width'.

This gives a maximum and minimum width for each column.

The caption width minimum (CAPMIN) is determined by calculating foreach caption the minimum caption outer width as the MCW of ahypothetical table cell that contains the caption formatted as"display: block". The greatest of the minimum caption outer widths isCAPMIN.

Column and captionwidths influence the final table width as follows:

  1. If the 'table' or 'inline-table' element's'width' property has a computed value (W) other than 'auto', the used width is the greater of W, CAPMIN, and the minimum width required by all the columns plus cell spacing or borders (MIN). If the used width is greater than MIN, the extra width should be distributed over the columns.
  2. If the 'table' or 'inline-table' element has 'width: auto', the used width is the greater of the table's containing block width, CAPMIN, and MIN. However, if either CAPMIN or the maximum width required by the columns plus cell spacing or borders (MAX) is less than that of the containing block, use max(MAX, CAPMIN).

A percentage value for a column width is relative to the tablewidth. If the table has 'width: auto', a percentage represents aconstraint on the column's width, which a UA should try to satisfy.(Obviously, this is not always possible: if the column's width is'110%', the constraint cannot be satisfied.)

Note. In this algorithm, rows (and rowgroups) and columns (and column groups) both constrain and areconstrained by the dimensions of the cells they contain. Setting thewidth of a column may indirectly influence the height of a row, andvice versa.

17.5.3Table height algorithms

The height of a table is given by the'height' property for the 'table' or'inline-table' element. A value of 'auto' means that the height is thesum of the row heights plus any cell spacing or borders. Any othervalue is treated as a minimum height. CSS 2.1 does not define howextra space is distributed when the 'height' property causes the tableto be taller than it otherwise would be.

Note. Futureupdates of CSS may specify this further.

The height of a 'table-row' element's box is calculated once theuser agent has all the cells in the row available: it is the maximumof the row's computed'height',the computed'height' of eachcell in the row,and the minimum height (MIN) required by the cells. A'height' value of 'auto' for a'table-row' means the row height used for layout is MIN. MIN dependson cell box heights and cell box alignment (much like the calculationof aline box height).CSS 2.1 does not define how the height of table cells and tablerows is calculated when their height is specified using percentagevalues. CSS 2.1 does not define the meaning of'height' on row groups.

In CSS 2.1, the height of a cell box is the minimum heightrequired by the content. The table cell's'height' property can influence theheight of the row (see above), but it does not increase the height ofthe cell box.

CSS 2.1 does not specify how cells that span more than one rowaffect row height calculations except that the sum of the row heightsinvolved must be great enough to encompass the cell spanning the rows.

The'vertical-align'property of each table cell determines its alignment within the row.Each cell's content has a baseline, a top, a middle, and a bottom, asdoes the row itself. In the context of tables, values for'vertical-align' have thefollowing meanings:

baseline
The baseline of the cell is put at the same height as the baseline of the first of the rows it spans (see below for the definition of baselines of cells and rows).
top
The top of the cell box is aligned with the top of the first row it spans.
bottom
The bottom of the cell box is aligned with the bottom of the last row it spans.
middle
The center of the cell is aligned with the center of the rows it spans.
sub, super, text-top, text-bottom, <length>, <percentage>
These values do not apply to cells; the cell is aligned at the baseline instead.

The baseline of a cell is the baseline of the first in-flowline box in the cell, or the firstin-flow table-row in the cell, whichever comes first. If there is nosuch line box or table-row, the baseline is the bottom of content edgeof the cell box. For the purposes of finding a baseline, in-flow boxeswith a scrolling mechanisms (see the'overflow' property) must beconsidered as if scrolled to their origin position. Note that thebaseline of a cell may end up below its bottom border, see theexample below.

The maximumdistance between the top of the cell box and the baseline over allcells that have 'vertical-align: baseline' is used to set the baselineof the row. Here is an example:

Example of vertically  aligning the cells   [D]

Diagram showing the effect of various values of 'vertical-align' on table cells.

Cell boxes 1 and 2 are aligned at their baselines. Cell box 2 hasthe largest height above the baseline, so that determines the baselineof the row.

If a row has no cell box aligned to its baseline, the baseline ofthat row is the bottom content edge of the lowest cell in the row.

To avoid ambiguous situations, the alignment of cells proceeds inthe following order:

  1. First the cells that are aligned on their baseline are positioned. This will establish the baseline of the row. Next the cells with 'vertical-align: top' are positioned.
  2. The row now has a top, possibly a baseline, and a provisional height, which is the distance from the top to the lowest bottom of the cells positioned so far. (See conditions on the cell padding below.)
  3. If any of the remaining cells, those aligned at the bottom or the middle, have a height that is larger than the current height of the row, the height of the row will be increased to the maximum of those cells, by lowering the bottom.
  4. Finally the remaining cells are positioned.

Cell boxes that are smaller than the height of the row receiveextra top or bottom padding.

The cell in this example has a baseline below its bottom border:

div { height: 0; overflow: hidden; }<table> <tr>  <td>   <div> Test </div>  </td> </tr></table>

17.5.4Horizontal alignment in a column

The horizontal alignment of inline-level content within a cellbox can be specified by the value ofthe'text-align' property onthe cell.

17.5.5Dynamic row and column effects

The'visibility' propertytakes the value 'collapse' for row, row group, column, and columngroup elements. This value causes the entire row or column to beremoved from the display, and the space normally taken up by the rowor column to be made available for other content. Contents of spannedrows and columns that intersect the collapsed column or row areclipped. The suppression of the row or column, however, does nototherwise affect the layout of the table. This allows dynamic effectsto remove table rows or columns without forcing a re-layout of thetable in order to account for the potential change in columnconstraints.

17.6Borders

There are two distinct models for setting borders on table cells inCSS. One is most suitable for so-calledseparated borders around individualcells, the other is suitable for borders that are continuous from oneend of the table to the other. Many border styles can be achieved witheither model, so it is often a matter of taste which one is used.

'border-collapse'
Value:  collapse | separate |inherit
Initial:  separate
Applies to:  'table' and 'inline-table' elements
Inherited:  yes
Percentages:  N/A
Media:  visual
Computed value:  as specified

This property selects a table's border model. The value 'separate'selects the separated borders border model. The value 'collapse'selects the collapsing borders model. The models are described below.

17.6.1The separated borders model

'border-spacing'
Value:  <length><length>? |inherit
Initial:  0
Applies to:  'table' and 'inline-table' elements*
Inherited:  yes
Percentages:  N/A
Media:  visual
Computed value:  two absolute lengths

*) Note: user agents may also apply the'border-spacing' property to 'frameset' elements. Which elements are'frameset' elements is not defined by this specification and is up tothe document language. For example, HTML4 defines a <FRAMESET>element, and XHTML 1.0 defines a <frameset> element. The'border-spacing' property on a 'frameset' element can be thus used asa valid substitute for the non-standard 'framespacing' attribute.

The lengths specify the distance that separates adjoining cellborders. If one length is specified, it gives both the horizontal andvertical spacing. If two are specified, the first gives the horizontalspacing and the second the vertical spacing. Lengths may not benegative.

The distance between the table border and the borders of the cellson the edge of the table is the table's padding for that side, plusthe relevant border spacing distance. For example, on the right handside, the distance ispadding-right +horizontalborder-spacing.

The width of the table is the distance from the left inner paddingedge to the right inner padding edge (including the border spacing butexcluding padding and border).

However, in HTML and XHTML1, the width of the <table>element is the distance from the left border edge to the right borderedge.

Note: In CSS3 this peculiar requirementwill be defined in terms of UA style sheet rules and the 'box-sizing'property.

In this model, each cell has an individual border. The'border-spacing' propertyspecifies the distance between the borders of adjoining cells. In thisspace, the row, column, row group, and column group backgrounds areinvisible, allowing the table background to show through. Rows,columns, row groups, and column groups cannot have borders (i.e., useragents mustignore the border properties forthose elements).

Example(s):

The table in the figure below could be the result of a style sheetlike this:

table      { border: outset 10pt;              border-collapse: separate;             border-spacing: 15pt }td         { border: inset 5pt }td.special { border: inset 10pt }  /* The top-left cell */

A table with  border-spacing   [D]

A table with'border-spacing' set to a length value. Note that each cell has its own border, and the table has a separate border as well.

17.6.1.1Borders and Backgrounds around empty cells: the'empty-cells' property

'empty-cells'
Value:  show | hide |inherit
Initial:  show
Applies to:  'table-cell' elements
Inherited:  yes
Percentages:  N/A
Media:  visual
Computed value:  as specified

In the separated borders model, this property controls therendering of borders and backgrounds around cells that have no visiblecontent. Empty cells and cells with the'visibility' property set to'hidden' are considered to have no visible content.Cells are empty unless they contain one or more of the following:

When this property has the value 'show', borders and backgroundsare drawn around/behind empty cells (like normal cells).

A value of 'hide' means that no borders or backgrounds are drawnaround/behind empty cells (see point 6 in17.5.1). Furthermore, if all the cells in arow have a value of 'hide' and have no visible content, then the rowhas zero height and there is vertical border-spacing on only one sideof the row.

Example(s):

The following rule causes borders and backgrounds to be drawnaround all cells:

table { empty-cells: show }

17.6.2The collapsing border model

In the collapsing border model, it is possible to specify bordersthat surround all or part of a cell, row, row group, column, andcolumn group. Borders for HTML's "rules" attribute can be specifiedthis way.

Borders are centered on the grid lines between the cells. Useragents must find a consistent rule for rounding off in the case of anodd number of discrete units (screen pixels, printer dots).

The diagram below shows how the width of the table, the widths ofthe borders, the padding, and the cell width interact. Their relationis given by the following equation, which holds for every row of thetable:

row-width = (0.5 *border-width0)+padding-left1 +width1 +padding-right1 +border-width1 +padding-left2 +...+padding-rightn + (0.5 *border-widthn)

Heren is the number of cells in the row,padding-lefti andpadding-righti refer to the left(resp., right) padding of celli, andborder-widthi refers to the borderbetween cellsi andi + 1.

UAs must compute an initial left and right border width for thetable by examining the first and last cells in the first row of thetable. The left border width of the table is half of the first cell'scollapsed left border, and the right border width of the table is halfof the last cell's collapsed right border. If subsequent rows havelarger collapsed left and right borders, then any excess spills intothe margin area of the table.

The top border width of the table is computed by examining allcells who collapse their top borders with the top border of the table.The top border width of the table is equal to half of the maximumcollapsed top border. The bottom border width is computed by examiningall cells whose bottom borders collapse with the bottom of the table.The bottom border width is equal to half of the maximum collapsedbottom border.

Any borders that spill into the margin are taken into account whendetermining if the table overflows some ancestor (see'overflow').

Schema showing the widths of  cells and borders and the padding of cells   [D]

Schema showing the widths of cells and borders and the padding of cells.

Note that in this model, the width of the table includes half thetable border. Also, in this model, a table does not have padding (butdoes have margins).

CSS 2.1 does not define where the edge of a background on atable element lies.

17.6.2.1Border conflict resolution

In the collapsing border model, borders at every edge of every cellmay be specified by border properties on a variety of elements thatmeet at that edge (cells, rows, row groups, columns, column groups,and the table itself), and these borders may vary in width, style, andcolor. The rule of thumb is that at each edge the most "eye catching"border style is chosen, except that any occurrence of the style'hidden' unconditionally turns the border off.

The following rules determine which border style "wins" in case ofa conflict:

  1. Borders with the'border-style' of 'hidden' take precedence over all other conflicting borders. Any border with this value suppresses all borders at this location.
  2. Borders with a style of 'none' have the lowest priority. Only if the border properties of all the elements meeting at this edge are 'none' will the border be omitted (but note that 'none' is the default value for the border style.)
  3. If none of the styles are 'hidden' and at least one of them is not 'none', then narrow borders are discarded in favor of wider ones. If several have the same'border-width' then styles are preferred in this order: 'double', 'solid', 'dashed', 'dotted', 'ridge', 'outset', 'groove', and the lowest: 'inset'.
  4. If border styles differ only in color, then a style set on a cell wins over one on a row, which wins over a row group, column, column group and, lastly, table. When two elements of the same type conflict, then the one further to the left (if the table's 'direction' is 'ltr'; right, if it is 'rtl') and further to the top wins.

Example(s):

The following example illustrates the application of theseprecedence rules. This style sheet:

table          { border-collapse: collapse;                 border: 5px solid yellow; }*#col1         { border: 3px solid black; }td             { border: 1px solid red; padding: 1em; }td.cell5       { border: 5px dashed blue; }td.cell6       { border: 5px solid green; }

with this HTML source:

<TABLE><COL id="col1"><COL id="col2"><COL id="col3"><TR id="row1">    <TD> 1    <TD> 2    <TD> 3</TR><TR id="row2">    <TD> 4     <TD> 5    <TD> 6</TR><TR id="row3">    <TD> 7    <TD> 8    <TD> 9</TR><TR id="row4">    <TD> 10    <TD> 11    <TD> 12</TR><TR id="row5">    <TD> 13    <TD> 14    <TD> 15</TR></TABLE>

would produce something like this:

An example of a  table with collapsed borders   [D]

An example of a table with collapsed borders.

Example(s):

Here is an example of hidden collapsing borders:

Table  with two omitted borders   [D]

Table with two omitted internal borders.

HTML source:

<TABLE><TR><TD>foo</TD>    <TD>bar</TD></TR><TR><TD>foo</TD>    <TD>bar</TD></TR></TABLE>

17.6.3Border styles

Some of the values of the'border-style' havedifferent meanings in tables than for other elements. In the listbelow they are marked with an asterisk.

none
No border.
*hidden
Same as 'none', but in thecollapsing border model, also inhibits any other border (see the section onborder conflicts).
dotted
The border is a series of dots.
dashed
The border is a series of short line segments.
solid
The border is a single line segment.
double
The border is two solid lines. The sum of the two lines and the space between them equals the value of'border-width'.
groove
The border looks as though it were carved into the canvas.
ridge
The opposite of 'groove': the border looks as though it were coming out of the canvas.
*inset
In theseparated borders model, the border makes the entire box look as though it were embedded in the canvas. In thecollapsing border model, drawn the same as 'ridge'.
*outset
In theseparated borders model, the border makes the entire box look as though it were coming out of the canvas. In thecollapsing border model, drawn the same as 'groove'.

previous  next  contents  properties  index  


[8]ページ先頭

©2009-2025 Movatter.jp