htmlhtml-tabletablelayoutfixed-width

Fixed width column in HTML table with table-layout=auto


When an HTML table has it's table-layout set to auto its columns are auto-sized. Given this scenario is there a way to keep specific columns fixed width? I've tried using CSS width - doesn't seem to have any effect.


Solution

  • You can do this using CSS if you use nth-child

    CSS:

    .table {
        table-layout:auto
    }
    td, th {
        border: 1px solid #999;
        padding: 0.5rem;
    }
    .table1 th:nth-child(1), .table1 td:nth-child(1) {
        width: 200px; /*becomes 218px with padding*/
        background: hsl(150, 50%, 50%);
    }
    

    HTML:

    <h3>table 1</h3>
    
    <table class="table1">
        <thead>
            <tr>
                <th>Column 1</th>
                <th>Column 2</th>
                <th>Column 3</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>I'm 218px wide!</td>
                <td>00001</td>
                <td>Blue</td>
            </tr>
            <tr>
                <td>I'm 218px wide!</td>
                <td>00002</td>
                <td>Red</td>
            </tr>
            <tr>
                <td>I'm 218px wide!</td>
                <td>00003</td>
                <td>Green</td>
            </tr>
        </tbody>
    </table>
    
    <p>&#160;</p>
    
    <h3>table 2</h3>
    
    <table>
        <thead>
            <tr>
                <th>Column 1</th>
                <th>Column 2</th>
                <th>Column 3</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>I'm 118px wide!</td>
                <td>00001</td>
                <td>Blue</td>
            </tr>
            <tr>
                <td>I'm 118px wide!</td>
                <td>00002</td>
                <td>Red</td>
            </tr>
            <tr>
                <td>I'm 118px wide!</td>
                <td>00003</td>
                <td>Green</td>
            </tr>
        </tbody>
    </table>
    

    Here is a demo: http://jsfiddle.net/3dyhE/2/