Template:Sticky table start/styles.css
/* Template:Pp-template */ /**
* Classes to make row N or thead top sticky, and/or column N left sticky. * Reverse collapsible behavior: * - Show (not mw-collapsed): Enabled w/ scroll and sticky. * - Hide (mw-collapsed): Disabled w/o scroll or sticky. * * Div classes: * - sticky-table-collapsible: Adds collapsible; contains scroll div. * - sticky-table-scroll: Adds scroll; contains table. * * Table classes: * - sticky-table-head: Top sticky thead rows. * - sticky-table-row1: Top sticky first row. * - sticky-table-row2: Top sticky second row. * - sticky-table-col1: Left sticky first column. * - sticky-table-col2: Left sticky second column. * * Cell classes: * - sticky-table-none: Cell not sticky to fix span issues. * - sticky-table-left: Cell left sticky to fix span issues. * * Notes: * - Sortable moves to thead any header rows and (after sort) sorttop rows. * - Sticky gadget (.mw-sticky-header) moves to thead any wikitable header rows. * - Collapsible states reversed due to anchor links removing "mw-collapsed". * Also reverses the "aria-expanded" attribute's true/false value. */
@media screen {
/** * Div containers with collapsible and restricted height/width + scroll. */ .sticky-table-collapsible { margin-bottom: 1em; /* Moved from table. */ margin-top: 1em; /* Moved from table. */ } .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-scroll { max-height: 75vh; max-width: max-content; /* Vertical scroll next to div. */ min-width: 50px; /* In case another element floats right. */ overflow-y: auto; } .sticky-table-collapsible table { margin-bottom: 0; /* Move to div. */ margin-top: 0; /* Move to div. */ } .sticky-table-collapsible table > caption { text-align: left; /* Fix narrow, centered caption hidden on wide table. */ }
/** * Modify collapsible. */ /* Button. */ .sticky-table-collapsible > .mw-collapsible-toggle { float: none; /* Was "right". */ padding-left: 0; /* Was "0.2em". */ padding-right: 0; /* Was "0.2em". */ display: none; /* Was "inline-block". Hide. Below shows on mobile. */ } @media (max-width: 639px), (max-height: 639px) { .sticky-table-collapsible > .mw-collapsible-toggle { display: inline-block; /* Reset. */ } } .sticky-table-collapsible .mw-collapsible-text { font-size: 88%; } /* Disabled. */ .sticky-table-collapsible.mw-collapsed .mw-collapsible-content { display: block !important; /* Was "none". */ }
/** * Make top sticky. */ .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row1:not(.sticky-table-row2):not(.sticky-table-head) > thead > tr:nth-child(1), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row1:not(.sticky-table-row2):not(.sticky-table-head) > caption + tbody > tr:nth-child(1), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row1:not(.sticky-table-row2):not(.sticky-table-head) > tbody:first-child > tr:nth-child(1), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row2:not(.sticky-table-row1):not(.sticky-table-head) > thead > tr:nth-child(2), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row2:not(.sticky-table-row1):not(.sticky-table-head) > caption + tbody > tr:nth-child(2), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-row2:not(.sticky-table-row1):not(.sticky-table-head) > tbody:first-child > tr:nth-child(2), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-head:not(.sticky-table-row1):not(.sticky-table-row2) > thead { position: sticky; /* Was "static". */ top: 0; z-index: 10; }
/** * Make left sticky. */ .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-col1:not(.sticky-table-col2) > * > tr > :nth-child(1):not(.sticky-table-none), .sticky-table-collapsible:not(.mw-collapsed) .sticky-table-col2:not(.sticky-table-col1) > * > tr > :nth-child(2):not(.sticky-table-none), .sticky-table-collapsible:not(.mw-collapsed) table > * > tr > .sticky-table-left { position: sticky; /* Was "static". */ left: 0; z-index: 9; }
/** * Fix scrolling data shows through sticky's transparent background. * * Note: ":not(.mw-collapsed)" removed so "row hover highlight" hover works. */ .sticky-table-collapsible table:not(.wikitable) { background-color: white; } .sticky-table-collapsible table > thead, .sticky-table-collapsible table > tbody, .sticky-table-collapsible table > tfoot, .sticky-table-collapsible table > * > tr, .sticky-table-collapsible table > * > tr > td, .sticky-table-collapsible :not(.wikitable) > * > tr > th { background-color: inherit; }
/** * Fix missing borders due to sticky position and wikitable collapsed borders. * https://bugs.webkit.org/show_bug.cgi?id=128486 * * Skip rare plain table separated borders, which sometimes shows scrolling * data through sticky's 2px "border-spacing". * * Skip very rare Timeless plain table ".mw-datatable" collapsed boarders. * * Note: Template:Static row numbers border separating header/sorttop from numbers * missing and may not be fixable until Wikipedia supports newer CSS. */ .sticky-table-collapsible:not(.mw-collapsed) .wikitable { border-collapse: separate; /* Was "collapse". */ border-spacing: 0; border-width: 1px 0 0 1px; } .sticky-table-collapsible:not(.mw-collapsed) .wikitable > * > tr > td, .sticky-table-collapsible:not(.mw-collapsed) .wikitable > * > tr > th { border-width: 0 1px 1px 0; } /* Adjust Template:Static row numbers borders. */ .sticky-table-collapsible:not(.mw-collapsed) .static-row-numbers.wikitable > * > tr::before { border-right-width: 1px; } /* .sticky-table-collapsible:not(.mw-collapsed) .static-row-numbers.wikitable > * > .sorttop:not(:has(~ .sorttop))::before, */ .sticky-table-collapsible:not(.mw-collapsed) .static-row-numbers.wikitable > tbody > tr:last-child::before, .sticky-table-collapsible:not(.mw-collapsed) .static-row-numbers.wikitable > tfoot > tr:last-child::before { border-bottom-width: 1px; } .sticky-table-collapsible:not(.mw-collapsed) .static-row-numbers.wikitable > tbody > tr:not(.static-row-header)::before { border-top-width: 0 !important; border-left-width: 0 !important; }
/** * Fix Timeless skin very wide tables not sticky. */ body.skin-timeless .sticky-table-collapsible:not(.mw-collapsed) .overflowed, body.skin-timeless .sticky-table-collapsible:not(.mw-collapsed) .overflowed .content-table { overflow: visible; /* Reset. */ } body.skin-timeless .sticky-table-collapsible:not(.mw-collapsed) .overflowed { margin-top: 0; /* Was "1em". */ margin-bottom: 0; /* Was "1em". */ } body.skin-timeless .sticky-table-collapsible:not(.mw-collapsed) .scroll-right.overflowed .content-table-right { box-shadow: none; /* Reset. */ border-left: none; /* Reset. */ } body.skin-timeless .sticky-table-collapsible:not(.mw-collapsed) .wikitable { padding: 0; }
/** * Fix skins width <=639px (mobile) not sticky. */ @media (max-width: 639px) { body.skin-minerva .sticky-table-collapsible:not(.mw-collapsed) table, body.skin-monobook .sticky-table-collapsible:not(.mw-collapsed) table, body.skin-vector-legacy .sticky-table-collapsible:not(.mw-collapsed) table, body.skin-vector-2022 .sticky-table-collapsible:not(.mw-collapsed) table { display: table; /* Was "block". */ } body.skin-minerva .sticky-table-collapsible:not(.mw-collapsed) table > caption { display: table-caption; /* Was "block". */ } }
/** * Fix "Sticky Table Headers" gadget styles causing sticky issues. */ .sticky-table-collapsible:not(.mw-collapsed) .jquery-tablesorter > thead, .sticky-table-collapsible:not(.mw-collapsed) .mw-sticky-header > thead { top: 0 !important; /* Was value based on skin and max/min width. */ } .sticky-table-collapsible:not(.mw-collapsed) .jquery-tablesorter > tfoot, .sticky-table-collapsible:not(.mw-collapsed) .mw-sticky-header > tfoot { position: static; /* Was "sticky". */ bottom: auto; /* Was "0". */ }
}
@media all {
/* Set important to override template parameter. */ .sticky-table-collapsible.mw-collapsed .sticky-table-scroll { max-height: none !important; /* Default. */ max-width: none !important; /* Default. */ }
}