Any way to synchronize table column widths with HTML + CSS?

前端 未结 9 1289
花落未央
花落未央 2020-12-24 05:05

I have a number of tables with the same columns and it would look a lot nicer if they shared the same column widths. Is such a thing possible? Putting them in the same tab

相关标签:
9条回答
  • 2020-12-24 05:59

    Luis Siquot answer is the one I used. However instead of using clientWidth, you should use jquery width() function to normalize widths between browsers, and to not calculate padding. Using clientWidth would result in the table cells expanding on ajaxpostbacks because of the padding (if padding used in the TD's). So, correct code using Luis Siquot's answer would be to replace

    var cell = $(this)[0].rows[0].cells[j];
           if(!cellWidths[j] || cellWidths[j] < cell.clientWidth) cellWidths[j] = cell.clientWidth;
    

    with

    var cell = $($(this)[0].rows[0].cells[j]);
                if (!cellWidths[j] || cellWidths[j] < cell.width()) cellWidths[j] = cell.width();   
    
    0 讨论(0)
  • 2020-12-24 05:59

    I'm almost shocked that no one has suggested column groups! With it you can give a column a specific class, width, and other helpful properties. And since it's HTML 4.01 it's supported by all browsers that support the doctype.

    0 讨论(0)
  • 2020-12-24 06:01

    To expand on Ken's answer, you can also specify the exact widths in pixels:

    td { width: 250px }
    

    or ems (width of the letter m):

    td { width: 32em }
    

    or ex or pt or whatever (well...actually %, pt, px, em, ex might be it). If you need your columns to be different widths, then the easy way is to give the table cells classes:

    <table><tr>
        <td class="col1">...</td><td class="col2">...</td>...
    </tr></table>
    

    and assign column widths to the classes:

    td.col1 { width: 48em }
    td.col2 { width: 200px }
    ...
    

    It should be sufficient to assign column widths to the first row in each table. [edit: looks like I've been scooped on that while I was writing]

    You could probably also go crazy with the CSS 2 sibling selector, and write something like

    tr > td:first-child { width:48em } /* first column */
    tr > td:first-child + td { width: 200px } /* second column */
    tr > td:first-child + td + td { width: 5% } /* third column  */
    ...
    

    but if you have more than a few columns, that could get ugly. And if you're using some sort of template system or script to generate these tables, I'm sure it'll be easier/clearer to just put the class="col#" attribute on each cell in your template once.

    0 讨论(0)
提交回复
热议问题