Freezing/Fixing the Top Header Row of a table

后端 未结 2 1116
说谎
说谎 2020-12-06 05:34

\"enterI need your help. I am unsure as to how to freeze or have the top row of my table, whic

2条回答
  •  感情败类
    2020-12-06 05:38

    I have a pure CSS scrolling table design that's a bit more refined than most of the others I've seen. It has a simple, polished appearance and renders perfectly in the popular desktop browsers, including Internet Explorer back to version 8. One of its nicer features is the option to let the content determine the width of the table and columns instead of setting them to predetermined values. That's the default behavior for tables, but I've seen a lot of CSS scrolling tables that require fixed or percent widths on the columns, the table, or both.

    Here are some fiddles you can check out:

    • Fluid Width and Height (adapts to screen size): jsFiddle (Note that the scrollbar only shows up when needed in this configuration, so you may have to shrink the frame to see it)

    • Auto Width, Fixed Height (easier to integrate with other content): jsFiddle

    The second one is probably useful in more situations, so I'll post the code for it below...

    /*the following html and body rule sets are required only if using a % width or height*/
    /*html {
      width: 100%;
      height: 100%;
    }*/
    body {
      box-sizing: border-box;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0 20px 0 20px;
      text-align: center;
      background: white;
    }
    .scrollingtable {
      box-sizing: border-box;
      display: inline-block;
      vertical-align: middle;
      overflow: hidden;
      width: auto; /*if you want a fixed width, set it here, else set to auto*/
      min-width: 0/*100%*/; /*if you want a % width, set it here, else set to 0*/
      height: 188px/*100%*/; /*set table height here; can be fixed value or %*/
      min-height: 0/*104px*/; /*if using % height, make this large enough to fit scrollbar arrows + caption + thead*/
      font-family: Verdana, Tahoma, sans-serif;
      font-size: 15px;
      line-height: 20px;
      padding: 20px 0 20px 0; /*need enough padding to make room for caption*/
      text-align: left;
    }
    .scrollingtable * {box-sizing: border-box;}
    .scrollingtable > div {
      position: relative;
      border-top: 1px solid black;
      height: 100%;
      padding-top: 20px; /*this determines column header height*/
    }
    .scrollingtable > div:before {
      top: 0;
      background: cornflowerblue; /*header row background color*/
    }
    .scrollingtable > div:before,
    .scrollingtable > div > div:after {
      content: "";
      position: absolute;
      z-index: -1;
      width: 100%;
      height: 100%;
      left: 0;
    }
    .scrollingtable > div > div {
      min-height: 0/*43px*/; /*if using % height, make this large enough to fit scrollbar arrows*/
      max-height: 100%;
      overflow: scroll/*auto*/; /*set to auto if using fixed or % width; else scroll*/
      overflow-x: hidden;
      border: 1px solid black; /*border around table body*/
    }
    .scrollingtable > div > div:after {background: white;} /*match page background color*/
    .scrollingtable > div > div > table {
      width: 100%;
      border-spacing: 0;
      margin-top: -20px; /*inverse of column header height*/
      /*margin-right: 17px;*/ /*uncomment if using % width*/
    }
    .scrollingtable > div > div > table > caption {
      position: absolute;
      top: -20px; /*inverse of caption height*/
      margin-top: -1px; /*inverse of border-width*/
      width: 100%;
      font-weight: bold;
      text-align: center;
    }
    .scrollingtable > div > div > table > * > tr > * {padding: 0;}
    .scrollingtable > div > div > table > thead {
      vertical-align: bottom;
      white-space: nowrap;
      text-align: center;
    }
    .scrollingtable > div > div > table > thead > tr > * > div {
      display: inline-block;
      padding: 0 6px 0 6px; /*header cell padding*/
    }
    .scrollingtable > div > div > table > thead > tr > :first-child:before {
      content: "";
      position: absolute;
      top: 0;
      left: 0;
      height: 20px; /*match column header height*/
      border-left: 1px solid black; /*leftmost header border*/
    }
    .scrollingtable > div > div > table > thead > tr > * > div[label]:before,
    .scrollingtable > div > div > table > thead > tr > * > div > div:first-child,
    .scrollingtable > div > div > table > thead > tr > * + :before {
      position: absolute;
      top: 0;
      white-space: pre-wrap;
      color: white; /*header row font color*/
    }
    .scrollingtable > div > div > table > thead > tr > * > div[label]:before,
    .scrollingtable > div > div > table > thead > tr > * > div[label]:after {content: attr(label);}
    .scrollingtable > div > div > table > thead > tr > * + :before {
      content: "";
      display: block;
      min-height: 20px; /*match column header height*/
      padding-top: 1px;
      border-left: 1px solid black; /*borders between header cells*/
    }
    .scrollingtable .scrollbarhead {float: right;}
    .scrollingtable .scrollbarhead:before {
      position: absolute;
      width: 100px;
      top: -1px; /*inverse border-width*/
      background: white; /*match page background color*/
    }
    .scrollingtable > div > div > table > tbody > tr:after {
      content: "";
      display: table-cell;
      position: relative;
      padding: 0;
      border-top: 1px solid black;
      top: -1px; /*inverse of border width*/
    }
    .scrollingtable > div > div > table > tbody {vertical-align: top;}
    .scrollingtable > div > div > table > tbody > tr {background: white;}
    .scrollingtable > div > div > table > tbody > tr > * {
      border-bottom: 1px solid black;
      padding: 0 6px 0 6px;
      height: 20px; /*match column header height*/
    }
    .scrollingtable > div > div > table > tbody:last-of-type > tr:last-child > * {border-bottom: none;}
    .scrollingtable > div > div > table > tbody > tr:nth-child(even) {background: gainsboro;} /*alternate row color*/
    .scrollingtable > div > div > table > tbody > tr > * + * {border-left: 1px solid black;} /*borders between body cells*/
    Top Caption
    Column 4
    Column 4
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Lorem ipsumDolorSitAmet consectetur
    Faux bottom caption

提交回复
热议问题