table with fixed left columns

Table with left columns fixed like sticky horizontally

by Rayudu Ikkurthi

HTML

<div>
<table>
        <tr>
        <td class="headcol">1</td>
        <td class="headcol2">1.1</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        </tr>
        <tr>
        <td class="headcol">2</td>
        <td class="headcol2">2.1</td>
        <td class="long">2Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        </tr>
        <tr>
        <td class="headcol">3</td>
        <td class="headcol2">3.1</td>
        <td class="long">3Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        </tr>
        <tr>
        <td class="headcol">4</td>
        <td class="headcol2">4.1</td>
        <td class="long">4Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha1</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        <td class="long">Vallabha</td>
        <td class="long">1Vallabha</td>
        </tr>
        
        
</table>
</div>

CSS

table {
  border-collapse: separate;
  border-spacing: 0;
  border-top: 1px solid grey;
}

td, th {
  margin: 0;
  border: 1px solid grey;
  white-space: nowrap;
  border-top-width: 0px;
}

div {
  width: 500px;
  overflow-x: auto;
  padding-left: 10em;
  overflow-y: auto;
  padding: 0;
}
tr td:nth-child(3){
  padding-left:10em;
}

.headcol {
  position: absolute;
  width: 5em;
  left: 0;
  top: auto;
  border-top-width: 1px;
  /*only relevant for first row*/
  margin-top: -1px;
  background:#fff;
  /*compensate for top border*/
}
.headcol2 {
  position: absolute;
  width: 5em;
  left: 5em;
  top: auto;
  border-top-width: 1px;
  /*only relevant for first row*/
  margin-top: -1px;
  background:#fff;
  /*compensate for top border*/
}

.headcol:before {
  content: 'Row ';
}
.headcol2:before {
  content: 'Row ';
}