Border around specific rows in a table?

后端 未结 10 1550
轮回少年
轮回少年 2020-12-02 08:10

I\'m trying to design some HTML/CSS that can put a border around specific rows in a table. Yes, I know I\'m not really supposed to use tables for layout but I don\'t know en

相关标签:
10条回答
  • 2020-12-02 08:37

    Group rows together using the <tbody> tag and then apply style.

    <table>
      <tr><td>No Style here</td></tr>
      <tbody class="red-outline">
        <tr><td>Style me</td></tr>
        <tr><td>And me</td></tr>
      </tbody>
      <tr><td>No Style here</td></tr>
    </table>  
    

    And the css in style.css

    .red-outline {
      outline: 1px solid red;
    }
    
    0 讨论(0)
  • 2020-12-02 08:47

    An easier way is to make the table a server side control. You could use something similar to this:

    Dim x As Integer
    table1.Border = "1"
    
    'Change the first 10 rows to have a black border
     For x = 1 To 10
         table1.Rows(x).BorderColor = "Black"
     Next
    
    'Change the rest of the rows to white
     For x = 11 To 22
         table1.Rows(x).BorderColor = "White"
     Next
    
    0 讨论(0)
  • 2020-12-02 08:48

    Thank you to all that have responded! I've tried all of the solutions presented here and I've done more searching on the internet for other possible solutions, and I think I've found one that's promising:

    tr.top td {
      border-top: thin solid black;
    }
    
    tr.bottom td {
      border-bottom: thin solid black;
    }
    
    tr.row td:first-child {
      border-left: thin solid black;
    }
    
    tr.row td:last-child {
      border-right: thin solid black;
    }
    <html>
    
    <head>
    </head>
    
    <body>
    
      <table cellspacing="0">
        <tr>
          <td>no border</td>
          <td>no border here either</td>
        </tr>
        <tr class="top row">
          <td>one</td>
          <td>two</td>
        </tr>
        <tr class="bottom row">
          <td>three</td>
          <td>four</td>
        </tr>
        <tr>
          <td colspan="2">once again no borders</td>
        </tr>
        <tr class="top bottom row">
          <td colspan="2">hello</td>
        </tr>
        <tr>
          <td colspan="2">world</td>
        </tr>
      </table>
    
    </body>
    
    </html>

    Output:

    enter image description here

    Instead of having to add the top, bottom, left, and right classes to every <td>, all I have to do is add top row to the top <tr>, bottom row to the bottom <tr>, and row to every <tr> in between. Is there anything wrong with this solution? Are there any cross-platform issues I should be aware of?

    0 讨论(0)
  • 2020-12-02 08:49

    I was just playing around with doing this too, and this seemed to be the best option for me:

    <style>
        tr { 
            display: table;            /* this makes borders/margins work */
            border: 1px solid black;
            margin: 5px;
        }
    </style>
    

    Note that this will prevent the use of fluid/automatic column widths, as cells will no longer align with those in other rows, but border/colour formatting still works OK. The solution is to give the TR and TDs a specified width (either px or %).

    Of course you could make the selector tr.myClass if you wanted to apply it only to certain rows. Apparently display: table doesn't work for IE 6/7, however, but there's probably other hacks (hasLayout?) that might work for those. :-(

    0 讨论(0)
  • 2020-12-02 08:50

    Based on your requirement that you want to put a border around an arbitrary block of MxN cells there really is no easier way of doing it without using Javascript. If your cells are fixed with you can use floats but this is problematic for other reasons. what you're doing may be tedious but it's fine.

    Ok, if you're interested in a Javascript solution, using jQuery (my preferred approach), you end up with this fairly scary piece of code:

    <html>
    <head>
    
    <style type="text/css">
    td.top { border-top: thin solid black; }
    td.bottom { border-bottom: thin solid black; }
    td.left { border-left: thin solid black; }
    td.right { border-right: thin solid black; }
    </style>
    <script type="text/javascript" src="jquery-1.3.1.js"></script>
    <script type="text/javascript">
    $(function() {
      box(2, 1, 2, 2);
    });
    
    function box(row, col, height, width) {
      if (typeof height == 'undefined') {
        height = 1;
      }
      if (typeof width == 'undefined') {
        width = 1;
      }
      $("table").each(function() {
        $("tr:nth-child(" + row + ")", this).children().slice(col - 1, col + width - 1).addClass("top");
        $("tr:nth-child(" + (row + height - 1) + ")", this).children().slice(col - 1, col + width - 1).addClass("bottom");
        $("tr", this).slice(row - 1, row + height - 1).each(function() {
          $(":nth-child(" + col + ")", this).addClass("left");
          $(":nth-child(" + (col + width - 1) + ")", this).addClass("right");
        });
      });
    }
    </script>
    </head>
    <body>
    
    <table cellspacing="0">
      <tr>
        <td>no border</td>
        <td>no border here either</td>
      </tr>
      <tr>
        <td>one</td>
        <td>two</td>
      </tr>
      <tr>
        <td>three</td>
        <td>four</td>
      </tr>
      <tr>
        <td colspan="2">once again no borders</td>
      </tr>
    </tfoot>
    </table>
    </html>
    

    I'll happily take suggestions on easier ways to do this...

    0 讨论(0)
  • 2020-12-02 08:53

    The only other way I can think of to do it is to enclose each of the rows you need a border around in a nested table. That will make the border easier to do but will potentially creat other layout issues, you'll have to manually set the width on table cells etc.

    Your approach may well be the best one depending on your other layout rerquirements and the suggested approach here is just a possible alternative.

    <table cellspacing="0">  
        <tr>    
            <td>no border</td>    
            <td>no border here either</td>  
        </tr>  
        <tr>
            <td>
                 <table style="border: thin solid black">
                      <tr>    
                            <td>one</td>    
                            <td>two</td>  
                      </tr>  
                      <tr>    
                          <td>three</td>    
                          <td>four</td>  
                      </tr>  
                 </table>
             </td>
        </tr>
        <tr>    
             <td colspan="2">once again no borders</td>  
        </tr>  
        <tr>
            <td>
                 <table style="border: thin solid black">
                      <tr>    
                            <td>hello</td>  
                       </tr>
                 </table>
             </td>
        </tr>
        <tr>    
             <td colspan="2">world</td>  
        </tr>
    </table>
    
    0 讨论(0)
提交回复
热议问题