Border conflict-resolution
In the collapsing border model, borders at every edge of every cell may be specified by border properties on a variety of elements that meet at that edge (cells, rows, row groups, columns, column groups, and the table itself), and these borders may vary in width, style, and color. 17.6.2.1 Border conflict resolution rules determine which border style "wins" in case of a conflict. (A part of the explanation of this sample is quoted from the relevant site.)
border-collapse: collapse
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.
border: 5pt solid;
|
border: 5pt hidden;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt hidden;
|
border: 5pt solid;
|
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.)
border: 5pt solid;
|
border: 5pt none;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 5pt none;
|
border: 5pt solid;
|
border: 5pt none;
|
border: 5pt solid;
|
border: 5pt none;
|
border: 5pt solid;
|
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.
border: 5pt solid;
|
border: 10pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 15pt solid;
|
border: 5pt solid;
|
border: 5pt solid;
|
border: 1pt solid;
|
border: 5pt solid;
|
border: 1pt solid;
|
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'.
double
|
solid
|
dashed
|
dotted
|
ridge
|
outset
|
groove
|
inset
|
inset
|
groove
|
outset
|
ridge
|
dotted
|
dashed
|
solid
|
double
|
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.
In the following example, border="5pt solid yellow" is specified to fo:table, border="3pt solid black" is specified to <fo:table-column> of column-number="1", other <fo:table-cell> has the different border value.
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
5pt dashed blue
|
5pt solid green
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
The value ‘collapse-with-precedence’ selects the collapsing borders model and the use of the border precedence properties for conflict resolution. border-before-precedence/border-after-precedence/border-start-precedence/border-end-precedence property has ‘force’, ‘<integer>’, or ‘inherit’ as the value. When ‘force’ is specified, the precedence is higher than any ‘<integer>’. The initial value are different for every table object: fo:table: 6, fo:table-cell: 5, fo:table-column: 4, fo:table-row: 3, fo:table-body: 2, fo:table-header: 1, fo:table-footer: 0.
border-collapse: collapse-with-precedence;
border-collapse: collapse;
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
5pt dashed blue
|
5pt solid green
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
border-collapse: collapse-with-precedence;
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
5pt dashed blue
|
5pt solid green
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
fo:table-column column-number="1" border="3pt solid black" border-before-precedence="10" border-after-precedence="10" border-start-precedence="10" border-end-precedence="10"
1pt solid red
|
1pt solid red
|
1pt solid red
|
1pt solid red
|
5pt dashed blue
|
5pt solid green
|
1pt solid red
|
1pt solid red
|
1pt solid red
|