admin管理员组

文章数量:1278979

I need to make the first two columns sticky in a table having n number of columns each of dynamic width.

I had tried the below CSS

td:nth-child(1), td:nth-child(2){
   position:sticky;
   left:0px;
}

And then I had set the left position of second column in JS by calculating the width of first column

var width = $("table tr > td:nth-child(1)").outerWidth();
$("table.matrix_class tr > td:nth-child(2)").css('left', width);

Now I need to do all the stuff in CSS not in JS. How do I do that in pure CSS?

Additionally, how do you do this when the first column width is dynamic?

I need to make the first two columns sticky in a table having n number of columns each of dynamic width.

I had tried the below CSS

td:nth-child(1), td:nth-child(2){
   position:sticky;
   left:0px;
}

And then I had set the left position of second column in JS by calculating the width of first column

var width = $("table tr > td:nth-child(1)").outerWidth();
$("table.matrix_class tr > td:nth-child(2)").css('left', width);

Now I need to do all the stuff in CSS not in JS. How do I do that in pure CSS?

Additionally, how do you do this when the first column width is dynamic?

Share Improve this question edited Mar 4, 2021 at 5:50 Vicky asked Nov 28, 2017 at 12:42 VickyVicky 2,0682 gold badges12 silver badges20 bronze badges 1
  • Well can you make codepen, jsbin with your full code ? – Zvezdas1989 Commented Nov 28, 2017 at 12:59
Add a ment  | 

1 Answer 1

Reset to default 3

You can do sticky header with using this css.

live working demo

<div class="zui-wrapper">
    <div class="zui-scroller">
        <table class="zui-table">
            <thead>
                <tr>
                    <th class="zui-sticky-col">Name</th>
                    <th class="zui-sticky-col2">Number</th>
                    <th>Position</th>
                    <th>Height</th>
                    <th>Born</th>
                    <th>Salary</th>
                    <th>Prior to NBA/Country</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="zui-sticky-col">DeMarcus Cousins</td>
                    <td class="zui-sticky-col2">15</td>
                    <td>C</td>
                    <td>6'11"</td>
                    <td>08-13-1990</td>
                    <td>$4,917,000</td>
                    <td>Kentucky/USA</td>
                </tr>
                <tr>
                    <td class="zui-sticky-col">Isaiah Thomas</td>
                    <td class="zui-sticky-col2">22</td>
                    <td>PG</td>
                    <td>5'9"</td>
                    <td>02-07-1989</td>
                    <td>$473,604</td>
                    <td>Washington/USA</td>
                </tr>
                <tr>
                    <td class="zui-sticky-col">Ben McLemore</td>
                    <td class="zui-sticky-col2">16</td>
                    <td>SG</td>
                    <td>6'5"</td>
                    <td>02-11-1993</td>
                    <td>$2,895,960</td>
                    <td>Kansas/USA</td>
                </tr>
                <tr>
                    <td class="zui-sticky-col">Marcus Thornton</td>
                    <td class="zui-sticky-col2">23</td>
                    <td>SG</td>
                    <td>6'4"</td>
                    <td>05-05-1987</td>
                    <td>$7,000,000</td>
                    <td>Louisiana State/USA</td>
                </tr>
                <tr>
                    <td class="zui-sticky-col">Jason Thompson</td>
                    <td class="zui-sticky-col2">34</td>
                    <td>PF</td>
                    <td>6'11"</td>
                    <td>06-21-1986</td>
                    <td>$3,001,000</td>
                    <td>Rider/USA</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
.zui-table {
    border: none;
    border-right: solid 1px #DDEFEF;
    border-collapse: separate;
    border-spacing: 0;
    font: normal 13px Arial, sans-serif;
}
.zui-table thead th {
    background-color: #DDEFEF;
    border: none;
    color: #336B6B;
    padding: 10px;
    text-align: left;
    text-shadow: 1px 1px 1px #fff;
    white-space: nowrap;
}
.zui-table tbody td {
    border-bottom: solid 1px #DDEFEF;
    color: #333;
    padding: 10px;
    text-shadow: 1px 1px 1px #fff;
    white-space: nowrap;
}
.zui-wrapper {
    position: relative;
}
.zui-scroller {
    margin-left: 230px;
    overflow-x: scroll;
    overflow-y: visible;
    padding-bottom: 5px;
    width: 300px;
}
.zui-table .zui-sticky-col {
    border-left: solid 1px #DDEFEF;
    left: 0;
    position: absolute;
    top: auto;
    width: 120px;
}
.zui-table .zui-sticky-col2 {
    border-right: solid 1px #DDEFEF;
    left: 140px;
    position: absolute;
    top: auto;
    width: 70px;
}

本文标签: javascriptMake first two columns sticky in a tableStack Overflow