Як додати радіус кордону на рядок таблиці


108

Хтось знає, як стилізувати тр так, як нам подобається?

Я використав обвалення кордону на столі, після цього tr може відобразити суцільну межу 1px, яку я їм даю.

Однак коли я спробував -moz-border-radius, це не працює. Навіть простий запас не працює.

Відповіді:


221

Ви можете застосовувати радіус межі лише до td, а не до tr або таблиці. Я обминув це питання круглими кутовими столами, використовуючи наступні стилі:

table { border-collapse: separate; }
td { border: solid 1px #000; }
tr:first-child td:first-child { border-top-left-radius: 10px; }
tr:first-child td:last-child { border-top-right-radius: 10px; }
tr:last-child td:first-child { border-bottom-left-radius: 10px; }
tr:last-child td:last-child { border-bottom-right-radius: 10px; }

Обов’язково введіть усі префікси постачальника. Ось приклад цього в дії .


Правильно. Якщо ви хочете закруглені кути в IE, вам доведеться використовувати зображення та дивну розмітку.
theazureshadow

6
@Henson: Ні , це буде не тому , що CSS3 не підтримуються в IE <9 , проте, ви можете використовувати CSS3PIE , щоб змусити його працювати в IE , включаючи IE6: css3pie.com
Sarfraz

31
Попередження: якщо ви пропустите, border-collapse: separate;це не спрацює.
Кевін Бордерс

@KevinBorders, що невірно, принаймні в Chrome v39. У мене виникли проблеми з тим, щоб це працювало, коли я застосував кольоровий фон до самого столу. Мабуть, це має бути на елементах tr або td.
Big McLargeHuge

1
separateпотрібен для Chrome 44.
Х'ю Гвіней

38

Фактичний інтервал між рядками

Це стара нитка, але я помітив, читаючи коментарі з ОП щодо інших відповідей, які, мабуть, первісну мету мали border-radiusна рядах та прогалини між рядками. Не здається, що нинішні рішення саме так і роблять. Відповідь theazureshadow спрямовується в правильному напрямку, але, здається, потрібно трохи більше.

Для тих, хто цікавиться такими, ось загадка, яка розділяє рядки і застосовує радіус до кожного ряду. (ПРИМІТКА. Наразі Firefox має помилку у відображенні / відсіканні background-colorна прикордонних радіусах .)

Код такий (і як зазначалося theazureshadow, для попередньої підтримки браузера border-radiusдодані різні префікси постачальника для потреби).

table { 
    border-collapse: separate; 
    border-spacing: 0 10px; 
    margin-top: -10px; /* correct offset on first border spacing if desired */
}
td {
    border: solid 1px #000;
    border-style: solid none;
    padding: 10px;
    background-color: cyan;
}
td:first-child {
    border-left-style: solid;
    border-top-left-radius: 10px; 
    border-bottom-left-radius: 10px;
}
td:last-child {
    border-right-style: solid;
    border-bottom-right-radius: 10px; 
    border-top-right-radius: 10px; 
}

3
Шлях краще, ніж відповідь вище.
Exzile

12

Інформація про бонус: border-radiusне впливає на таблиці з border-collapse: collapse;та встановлені рамки на tds. І не має значення , чи він border-radiusувімкнено table, trабо td- це ігнорується.

http://jsfiddle.net/Exe3g/


У jsfiddle є закруглені кути на Firefox.
Jukka K. Korpela

4
@ JukkaK.Korpela Так, якщо кордон-крах: колапс; не встановлено, натисніть кнопку перемикання і перегляньте, як відбувається магія.
Ронні Егеріс Перссон

3

Елемент tr дійсно враховує радіус кордону. Може використовувати чисті HTML та CSS, без JavaScript.

Посилання JSFiddle: http://jsfiddle.net/pflies/zL08hqp1/10/

tr {
    border: 0;
    display: block;
    margin: 5px;
}
.solid {
    border: 2px red solid;
    border-radius: 10px;
}
.dotted {
    border: 2px green dotted;
    border-radius: 10px;
}
.dashed {
    border: 2px blue dashed;
    border-radius: 10px;
}

td {
    padding: 5px;
}
<table>
    <tr>
        <td>01</td>
        <td>02</td>
        <td>03</td>
        <td>04</td>
        <td>05</td>
        <td>06</td>
    </tr>
    <tr class='dotted'>
        <td>07</td>
        <td>08</td>
        <td>09</td>
        <td>10</td>
        <td>11</td>
        <td>12</td>
    </tr>
    <tr class='solid'>
        <td>13</td>
        <td>14</td>
        <td>15</td>
        <td>16</td>
        <td>17</td>
        <td>18</td>
    </tr>
    <tr class='dotted'>
        <td>19</td>
        <td>20</td>
        <td>21</td>
        <td>22</td>
        <td>23</td>
        <td>24</td>
    </tr>
    <tr class='dashed'>
        <td>25</td>
        <td>26</td>
        <td>27</td>
        <td>28</td>
        <td>29</td>
        <td>30</td>
    </tr>
</table>


4
Зміна властивості відображення TR на "блокувати", швидше за все, зіпсує макет таблиці. Зокрема, якщо у вашій таблиці є кілька рядків, що містять різну довжину вмісту, комірки таблиці не вирівнюватимуться.
Джесс

2

Я думаю, що руйнувати ваші кордони - це неправильно робити в цьому випадку. Згортання їх в основному означає, що межа між двома сусідніми клітинками стає спільною. Це означає, що незрозуміло, в якому напрямку він повинен кривитись із заданим радіусом.

Натомість ви можете надати прикордонний радіус двом лівим кутам першої ТД та двом правого кута останнього. Ви можете використовувати first-childта last-childселектори, як це запропоновано theazureshadow, але вони можуть погано підтримувати старіші версії IE. Можливо, буде простіше просто визначити класи, такі як .first-columnі .last-columnслужити цьому.


Я згортаю межу, щоб тр міг відображати стиль, який я надаю. Я спробую метод класу. а як щодо маржі? Я спробував використовувати граничний простір для відображення поля між рядками, але я вважаю, що це не найкращий спосіб зробити це.
Henson

Не може бути меж між рядками, якщо вони ділять кордон - тобто коли кордон згортається. Я припускаю, що ви намагаєтеся зробити так, щоб ваші TR мали колір тла із закругленими кутами? Якщо це так,
розв’язання

насправді більш актуальною справою є відображення поля між рядками з рамками. Хоча на кордоні не обов'язково повинні бути закруглені кути
Henson

2

Згідно з Opera, стандарт CSS3 не визначає використання border-radiusTD. Мій досвід полягає в тому, що Firefox і Chrome підтримують його, але Opera цього не робить (не знаю про IE). Вирішення проблеми полягає в загортанні вмісту td у діві, а потім застосуванні border-radiusдо div.


2

Не намагаючись брати жодних кредитів тут, весь кредит надсилається до @theazureshadow за його відповідь, але мені особисто довелося адаптувати його для таблиці, в якій є декілька, <th>а не <td>для комірок першого ряду.

Я просто розміщую тут модифіковану версію на випадок, якщо хтось із вас хоче скористатися рішенням @ theazureshadow, але, як і я, <th>у першій є <tr>. Клас "reportTable" повинен застосовуватися лише до самої таблиці.

table.reportTable {
    border-collapse: separate;
    border-spacing: 0;
}

table.reportTable td {
    border: solid gray 1px;
    border-style: solid none none solid;
    padding: 10px;
}

table.reportTable td:last-child {
    border-right: solid gray 1px;
}

table.reportTable tr:last-child td{
    border-bottom: solid gray 1px;
}

table.reportTable th{
    border: solid gray 1px;
    border-style: solid none none solid;
    padding: 10px;
}

table.reportTable th:last-child{
    border-right: solid gray 1px;
    border-top-right-radius: 10px;
}

table.reportTable th:first-child{
    border-top-left-radius: 10px;
}

table.reportTable tr:last-child td:first-child{
    border-bottom-left-radius: 10px;
}   

table.reportTable tr:last-child td:last-child{
    border-bottom-right-radius: 10px;
}

Не соромтесь коригувати прокладки, радіуси тощо, відповідно до ваших потреб. Сподіваюся, що допомагає людям!


1

Я виявив, що додавання радіуса кордону до таблиць, trs та tds, здається, не працює на 100% в останніх версіях Chrome, FF та IE. Що я роблю замість цього, я загортаю таблицю з дівом і кладу на неї радіус межі.

<div class="tableWrapper">
  <table>
    <tr><td>Content</td></tr>
  <table>
</div>

.tableWrapper {
  border-radius: 4px;
  overflow: hidden;
}

Якщо вашого столу немає width: 100%, ви можете зробити свою обгортку float: left, просто пам’ятайте, щоб очистити її.


просте і елегантне рішення
ufk

1

Використовуйте кордон-колапс: окремо; і граничний інтервал: 0; але використовуйте лише межі праворуч і кордон внизу для tds, при цьому кордон зверху застосовується до th, а лівий прикордонний застосовується лише до tr td: nth-child (1).

Потім можна застосувати радіус кордону до кутових tds (використовуючи nth-child для їх пошуку)

https://jsfiddle.net/j4wm1f29/

<table>
  <tr>
    <th>title 1</th>
    <th>title 2</th>
    <th>title 3</th>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
  <tr>
    <td>item 1</td>
    <td>item 2</td>
    <td>item 3</td>
  </tr>
</table>
table {
  border-collapse: seperate;
  border-spacing: 0;
}

tr th,
tr td {
  padding: 20px;
  border-right: 1px solid #000;
  border-bottom: 1px solid #000;
}

tr th {
  border-top: 1px solid #000;
}

tr td:nth-child(1),
tr th:nth-child(1) {
  border-left: 1px solid #000;
}

/* border radius */
tr th:nth-child(1) {
  border-radius: 10px 0 0 0;
}

tr th:nth-last-child(1) {
  border-radius: 0 10px 0 0;
}

tr:nth-last-child(1) td:nth-child(1) {
  border-radius: 0 0 0 10px;
}

tr:nth-last-child(1) td:nth-last-child(1) {
  border-radius: 0 0 10px 0;
}


0

Усі відповіді занадто довгі. Найпростіший спосіб додати радіус межі до елемента таблиці, який приймає кордон як властивість, - це радіус межі з переповненням: приховано.

border: xStyle xColor xSize;
border-collapse: collapse;
border-radius: 1em;
overflow: hidden;

@ypresto в верхній відповіді #theazureshadow згадується, що радіус кордону не працює для tr, але причина в тому, що ви навіть не можете застосувати до нього межу, але таблиця працює :( Я не знаю, чому, але ця відповідь - з 2013 року .
E Alexis MT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.