CSS Table Styling - PullRequest
       18

CSS Table Styling

6 голосов
/ 12 ноября 2008

Мне нужно оформить таблицу так, чтобы она имела закругленные углы.

Я просто смотрю, как лучше это сделать:

Обычно, когда я делаю div для скругленных углов, я использую 2 div с пустыми комментариями вверху и внизу и применяю к ним CSS для определения размера и фона.

Однако таблица имеет внутренние границы, поэтому мне нужно аккуратно выровнять вертикальные линии в угловых изображениях, чтобы они соответствовали истинным границам ячеек.

Это ясно, так далеко?

Так что мне было интересно, как другие подойдут к этому. Я думаю, что лучшее, что я могу сделать, это просто использовать одно полное фоновое изображение фиксированного размера, границы и все, и наложить поверх таблицы без полей сверху. В конце концов, таблица всегда будет одного размера.

Кто-нибудь может придумать лучший способ?

Ответы [ 6 ]

4 голосов
/ 12 ноября 2008

25 способов сделать это .... http://www.cssjuice.com/25-rounded-corners-techniques-with-css/

На самом деле, есть слишком много способов сделать это.

3 голосов
/ 12 ноября 2008

Лучше сделать фоновое изображение только с углами, а не с границами. Примените класс к верхней левой, верхней правой, нижней левой и нижней правой ячейке, чтобы определить, что следует использовать фоновое изображение углов.

И стиль границ с CSS. Не помещайте их в фоновое изображение.

При вашем подходе вы всегда будете иметь вертикальные линии на фоновом изображении, которые не соответствуют границам фактических ячеек таблицы.

2 голосов
/ 12 ноября 2008

Вы пробовали http://www.roundedcornr.com/?

1 голос
/ 12 ноября 2008

Воспользовавшись своей оригинальной идеей, вы можете добавить класс в каждую угловую ячейку, эффективно отключая их оскорбительные границы. Затем можно использовать фоновое изображение полной ширины в элементах

и для учета закругленных углов.

Остальные ячейки могут иметь свои границы, и линии будут выстроены правильно.

Единственная оставшаяся проблема - учет этой взорванной тени. Это другое упражнение.

1 голос
/ 12 ноября 2008

Сделай что-нибудь подобное ...

XHTML: (извините, пришлось удалить сначала '

table id="pricing" border="0" cellpadding="0" cellspacing="0">
  <thead>
    <tr>
      <th>Incoming calls</th>
      <th>National calls</th>
      <th>Calls to US &amp; Canada</th>
      <th>Calls to other Phones</th>
      <th>Calls to other Countries</th>
      <th>SMS text messages</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Select</td>
      <td>country</td>
      <td>from</td>
      <td>dropdown</td>
      <td>list</td>
      <td>above</td>
    </tr>
  </tbody>
</table>

CSS: #pricing { начертание шрифта: жирный; выравнивания текста: центр }

  #pricing thead
  {
    background-image:url("images/pricing_top.gif");
    background-position:top;
    background-repeat:no-repeat;
    padding:10px 0 0 /* replace 10px with the height of pricing_top.gif */
  }

  #pricing th
  {
    background-image:url("images/pricing_header_bg.gif");
    background-repeat:repeat-y;
    border-bottom:1px solid #c3c2c2;
    width:100px /* replace 100px with the width of pricing_header_bg.gif */
  }

  #pricing tbody
  {
    background-image:url("images/pricing_bottom.gif");
    background-position:bottom;
    background-repeat:no-repeat;
    padding:0 0 10px /* replace 10px with the height of pricing_bottom.gif */
  }

  #pricing td
  {
    background-image:url("images/pricing_cell_bg.gif");
    background-repeat:repeat-y;
    width:100px /* replace 100px with the width of pricing_cell_bg.gif */
  }

Единственным недостатком является то, что вам нужно создать 4 изображения, но это не должно занять слишком много времени. Вам также нужно добавить класс в последнюю ячейку в каждой строке, если вы хотите добавить эту тень справа и просто соответствующим образом изменить ее свойства background-image и width.

1 голос
/ 12 ноября 2008

Лучше было бы использовать 9-сетку, где у вас есть углы фона, а верхний, нижний, левый и правый фон повторяют

Ваш столик идет в клетку 5

Редактировать

Как и некоторые размещенные в комментариях, вы не можете добиться эффекта с 9-сеткой. Вы должны сделать 12-сеточную систему (составленную мной прямо сейчас :)

Живая демоверсия

.

Код:

Внимание: это не красиво, но работает

<html>
<head>
    <style>


        .cell1 {background: #f8f8f8 url(images/cell1.gif) no-repeat left top; height: 10px; font-size: 1px;}
        .cell2 {background: #f8f8f8 url(images/cell2.gif) repeat-x top; height: 10px; font-size: 1px; border-right: solid 1px #c3c2c2; font-weight:bold;  }
        .cell3 {background: #f8f8f8 url(images/cell3.gif) no-repeat right top; height: 10px; font-size: 1px;}

        .cell4 {background: white url(images/cell4.gif) repeat-y left; border-bottom: solid 1px #c3c2c2; width: 13px; }
        .cell5 {background-color: #f8f8f8; padding: 5px; border-right: solid 1px #c3c2c2; font-weight:bold; border-bottom: solid 1px #c3c2c2; }
        .cell6 {background: white url(images/cell6.gif) repeat-y right; border-bottom: solid 1px #c3c2c2; width: 18px; }

        .cell7 {background: white url(images/cell7.gif) repeat-y left; width: 13px;}
        .cell8 {background-color: white; padding: 5px; border-right: solid 1px #c3c2c2; font-weight:normal;  }
        .cell9 {background: white url(images/cell9.gif) repeat-y right; width: 18px;}


        .cell10 {background: white url(images/cell10.gif) no-repeat left bottom; height: 17px;font-size: 1px; }
        .cell11 {background: white url(images/cell11.gif) repeat-x bottom; border-right: solid 1px #c3c2c2; height: 17px; font-size: 1px; }
        .cell12 {background: white url(images/cell12.gif) no-repeat right bottom; height: 17px;font-size: 1px; }

        .lastcolumn, th.lastcolumn, td.lastcolumn {border-right: solid 0px #c3c2c2; }

    </style>
</head>
<body>


<table id="pricing" border="0" cellpadding="0" cellspacing="0">
  <thead>
    <tr>
      <th class="cell1"></th>
      <th class="cell2">&nbsp;</th>
      <th class="cell2">&nbsp;</th>
      <th class="cell2">&nbsp;</th>
      <th class="cell2">&nbsp;</th>
      <th class="cell2">&nbsp;</th>
      <th class="cell2 lastcolumn">&nbsp;</th>
      <th class="cell3"></th>
    </tr>
    <tr>
      <th class="cell4">&nbsp;</th>
      <th class="cell5">Incoming calls</th>
      <th class="cell5">National calls</th>
      <th class="cell5">Calls to US &amp; Canada</th>
      <th class="cell5">Calls to other Phones</th>
      <th class="cell5">Calls to other Countries</th>
      <th class="cell5 lastcolumn">SMS text messages</th>
      <th class="cell6">&nbsp;</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="cell7"></td>
      <td class="cell8">Select</td>
      <td class="cell8">country</td>
      <td class="cell8">from</td>
      <td class="cell8">dropdown</td>
      <td class="cell8">list</td>
      <td class="cell8 lastcolumn">above</td>
      <td class="cell9"></td>
    </tr>
    <tr>
      <td class="cell10"></td>
      <td class="cell11">&nbsp;</td>
      <td class="cell11">&nbsp;</td>
      <td class="cell11">&nbsp;</td>
      <td class="cell11">&nbsp;</td>
      <td class="cell11">&nbsp;</td>
      <td class="cell11 lastcolumn">&nbsp;</td>
      <td class="cell12"></td>
    </tr>
  </tbody>
</table>


</body>
</html>

Примечание: есть некоторые неразрывные пробелы, которые SO удаляет из кода. Проверьте живую демонстрацию для получения дополнительной информации

Наслаждайтесь!

...