I am attempting to freeze the first two columns and last column of an HTML table that is using both horizontal and vertical scroll and haven't been successful. I don't have control of how the table html is output but it matches the way it is structured in the sample below (i.e. thead/tr/th tbody/tr/td. I tried using position absolute on the columns and data but it doesn't look right when scrolling.
I would like to know if it is possible to achieve this without the use of JavaScript.
table {
  width: 500px;
  height: 300px;
  display: block;
  overflow: auto;
  white-space: nowrap;
}<table>
  <thead>
    <tr>
      <th>Column 1</th>
      <th>Column 2</th>
      <th>Column 3</th>
      <th>Column 4</th>
      <th>Column 5</th>
      <th>Column 6</th>
      <th>Column 7</th>
      <th>Column 8</th>
      <th>Column 9</th>
      <th>Column 10</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
    <tr>
      <td>Data value 1</td>
      <td>Data value 2</td>
      <td>Data value 3</td>
      <td>Data value 4</td>
      <td>Data value 5</td>
      <td>Data value 6</td>
      <td>Data value 7</td>
      <td>Data value 8</td>
      <td>Data value 9</td>
      <td>Data value 10</td>
    </tr>
  </tbody>
</table> 
     
    