Collapsed Table Borders: CSS 2.1 §17.6.2 Conflict Resolution

A border-collapse: collapse table resolves exactly one border per shared grid line - the widest declared border wins, ties break by style priority, further ties by how specific the declaring box is (cell > row > row-group > column > column-group > table), and finally by position. Every other participant's own border at that edge is suppressed rather than separately painted.

Width, then origin, decide each edge

AB
The 8pt double border on this cell's own bottom edge outranks the row's 4pt orange border below - cell beats row regardless of which one is wider here.Where no cell states an opinion, the row's own 4pt orange border wins instead.

<col>/<colgroup> border and background participation

Column AColumn B
The colgroup's 3pt green border frames both columns; column A's own narrower red border wins the shared edge between them.Column backgrounds layer under the cells' own white background, per CSS 2.1 §17.5.1's table → column-group → column → row → cell order.

border-style: hidden suppresses an edge outright

LeftRight
No border hereor here - hidden always wins, whatever else competes for this edge

A repeated <thead>'s boundary resolves fresh on every page

Only row 1 - the header's real DOM neighbor - has the bold red top border. On the first page the header sits directly above it, so that border is what's resolved and drawn. On every later page the header repeats above a different row instead, and the boundary is re-resolved against that row - not reused from page 1 - so only the first page shows the red border.

RowNote
Row 1The first body row's own border wins here - it's the true DOM neighbor of the header.
Row 2An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 3An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 4An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 5An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 6An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 7An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 8An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 9An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 10An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 11An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 12An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 13An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 14An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 15An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 16An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 17An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 18An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 19An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 20An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 21An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 22An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 23An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.
Row 24An ordinary row - every later page's header boundary resolves against whichever row actually starts that page, not row 1's.