Свойство и граница-collapse:collapse радиуса границы CSS3 не смешиваются. Как я могу использовать радиус границы для составления свернутой таблицы со скругленными углами?

См. Здесь https://github.com/developit/preact-cli/issues/672#issuecomment-440985092 и мои правки выше.

Понижение styled-components с v4 до v3 «исправляет» проблему.

303
задан 16 revs, 4 users 65% 2 February 2017 в 18:38
поделиться

5 ответов

Я понял это. Просто необходимо использовать некоторые специальные селекторы.

проблема с округлением углов таблицы состояла в том, что td элементы также не стали округленными. Можно решить это путем выполнения чего-то вроде этого:

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

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

Теперь все округляется правильно, за исключением того, что существует все еще проблема border-collapse: collapse повреждение всего. Обходное решение должно установить cellspacing="0" в HTML вместо этого (спасибо, Joel).

221
ответ дан 7 revs, 7 users 62% 23 November 2019 в 01:23
поделиться

Насколько я знаю единственный способ, которым Вы могли сделать это, будет состоять в том, чтобы изменить все ячейки как так:

table td {
  border-right-width: 0px;
  border-bottom-width: 0px;
}

И затем получить границу в нижней части и назад

table tr td:last-child {
  border-right-width: 1px;
}
table tr:last-child td {
  border-bottom-width: 1px;
}

:last-child не допустимо в ie6, но если Вы используете border-radius, я предполагаю, что Вы не заботитесь.

РЕДАКТИРОВАНИЕ:

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

толстые серые границы, которые Вы видите, являются на самом деле фоном таблицы (Вы видите это ясно при изменении цвета рамки на красный). Если Вы обнуляете cellspacing (или эквивалентно: td, th { margin:0; }), серые "границы" исчезнут.

РЕДАКТИРОВАНИЕ 2:

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

7
ответ дан Igor Ivancha 23 November 2019 в 01:23
поделиться

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

рабочий проект определяет, что border-radius не относится к элементам таблицы, когда значение border-collapse collapse.

23
ответ дан fish2000 23 November 2019 в 01:23
поделиться

Лучшее решение до сих пор прибывает из Вашего собственного решения, и оно идет как это:

table, tr, td, th{
  border: 1px solid; 
  text-align: center;
}

table{
	border-spacing: 0;
  width: 100%;
  display: table;
}

table tr:last-child td:first-child, tr:last-child, table {
    border-bottom-left-radius: 25px;
}

table tr:last-child td:last-child, tr:last-child, table {
    border-bottom-right-radius: 25px;
}


table tr:first-child th:first-child, tr:first-child, table {
    border-top-left-radius: 25px;
}

table tr:first-child th:last-child, tr:first-child, table {
    border-top-right-radius: 25px;
}
<table>
  <tr>
    <th>Num</th><th>Lett</th><th>Lat</th>
  </tr>
  <tr>
    <td>1</td><td>A</td><td>I</td>
  </tr>
  <tr>
    <td>2</td><td>B</td><td>II</td>
  </tr>
  <tr>
    <td>3</td><td>C</td><td>III</td>
  </tr>
</table>
0
ответ дан 23 November 2019 в 01:23
поделиться

Следующий метод работает (протестирован в Chrome) с использованием box-shadow с разбросом 1px вместо «реальной» границы.

table {
    border-collapse: collapse;
    border-radius: 30px;
    border-style: hidden; /* hide standard table (collapsed) border */
    box-shadow: 0 0 0 1px #666; /* this draws the table border  */ 
}

td {
    border: 1px solid #ccc;
}
78
ответ дан 23 November 2019 в 01:23
поделиться