CSS - Граница только внутри таблицы
Я пытаюсь понять, как добавить границу только внутри таблицы. Когда я это сделаю:
table {
border: 0;
}
table td, table th {
border: 1px solid black;
}
Граница вокруг всей таблицы, а также между ячейками таблицы. Я хочу достичь границы только внутри таблицы вокруг ячеек таблицы (без внешней границы вокруг таблицы).
Вот разметка, которую я использую для таблиц (хотя я думаю, что это не важно):
<table>
<tr>
<th>Heading 1</th>
<th>Heading 2</th>
</tr>
<tr>
<td>Cell (1,1)</td>
<td>Cell (1,2)</td>
</tr>
<tr>
<td>Cell (2,1)</td>
<td>Cell (2,2)</td>
</tr>
<tr>
<td>Cell (3,1)</td>
<td>Cell (3,2)</td>
</tr>
</table>
И вот некоторые основные стили, применяемые к большинству моих таблиц:
table {
border-collapse: collapse;
border-spacing: 0;
}
Ответы
Ответ 1
Если вы делаете то, что, как я полагаю, вы пытаетесь сделать, вам понадобится нечто вроде этого:
table {
border-collapse: collapse;
}
table td, table th {
border: 1px solid black;
}
table tr:first-child th {
border-top: 0;
}
table tr:last-child td {
border-bottom: 0;
}
table tr td:first-child,
table tr th:first-child {
border-left: 0;
}
table tr td:last-child,
table tr th:last-child {
border-right: 0;
}
jsFiddle Demo
Проблема заключается в том, что вы устанавливаете "полную границу" вокруг всех ячеек, что делает ее видимой, как будто у вас есть граница вокруг всей таблицы.
Приветствия.
EDIT: немного больше информации об этих псевдоклассах можно найти на quirksmode, и, как и следовало ожидать, вы в значительной степени SOL с точки зрения поддержки IE.
Ответ 2
это работает для меня:
table {
border-collapse: collapse;
border-style: hidden;
}
table td, table th {
border: 1px solid black;
}
просмотреть пример...
тестируется в FF 3.6 и Chromium 5.0, IE не имеет поддержки; от W3C:
Границы с "пограничным стилем" "скрытых" имеют приоритет над всеми другими конфликтующими границами. Любая граница с этим значением подавляет все границы в этом месте.
Ответ 3
Пример очень простого способа для достижения желаемого эффекта:
<table border="1" frame="void" rules="all">
<tr>
<td>1111</td>
<td>2222</td>
<td>3333</td>
</tr>
<tr>
<td>4444</td>
<td>5555</td>
<td>6666</td>
</tr>
</table>
Ответ 4
Из-за совместимости с mantain с ie7, ie8, я предлагаю использовать для этого первый-ребенок, а не последний-ребенок:
table tr td{border-top:1px solid #ffffff;border-left:1px solid #ffffff;}
table tr td:first-child{border-left:0;}
table tr:first-child td{border-top:0;}
Вы можете узнать о псевдоязыках CSS 2.1:
http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx
Ответ 5
Для обычной табличной разметки здесь короткое решение, которое работает на всех устройствах/браузерах на браузере, кроме IE 7 и ниже:
table { border-collapse: collapse; }
td + td,
th + th { border-left: 1px solid; }
tr + tr { border-top: 1px solid; }
Для поддержки IE 7 добавьте следующее:
tr + tr > td,
tr + tr > th { border-top: 1px solid; }
Здесь можно увидеть тестовый пример: http://codepen.io/dalgard/pen/wmcdE
Ответ 6
это должно работать:
table {
border:0;
}
table td, table th {
border: 1px solid black;
border-collapse: collapse;
}
изменить:
Я просто попробовал, без границы стола. но если я устанавливаю границу таблицы, она устраняется путем краха.
это тестовый файл:
<html>
<head>
<style type="text/css">
table {
border-collapse: collapse;
border-spacing: 0;
}
table {
border: 0;
}
table td, table th {
border: 1px solid black;
}
</style>
</head>
<body>
<table>
<tr>
<th>Heading 1</th>
<th>Heading 2</th>
</tr>
<tr>
<td>Cell (1,1)</td>
<td>Cell (1,2)</td>
</tr>
<tr>
<td>Cell (2,1)</td>
<td>Cell (2,2)</td>
</tr>
<tr>
<td>Cell (3,1)</td>
<td>Cell (3,2)</td>
</tr>
</table>
</body>
</html>
Ответ 7
который сделает все это без css
<TABLE BORDER=1 RULES=ALL FRAME=VOID>
код из: учебник HTML-кода
Ответ 8
Добавьте границу в каждую ячейку следующим образом:
table > tbody > tr > td { border: 1px solid rgba(255, 255, 255, 0.1); }
Удалите верхнюю границу всех ячеек в первой строке:
table > tbody > tr:first-child > td { border-top: 0; }
Удалите левую границу из ячеек в первом столбце:
table > tbody > tr > td:first-child { border-left: 0; }
Удалите правую границу из ячеек в последнем столбце:
table > tbody > tr > td:last-child { border-right: 0; }
Удалите нижнюю границу из ячеек в последней строке:
table > tbody > tr:last-child > td { border-bottom: 0; }
http://jsfiddle.net/hzru0ytx/
Ответ 9
Работает для любой комбинации tbody/thead/tfoot и td/th
table.inner-border {
border-collapse: collapse;
border-spacing: 0;
}
table.inner-border > thead > tr > th,
table.inner-border > thead > tr > td,
table.inner-border > tbody > tr > th,
table.inner-border > tbody > tr > td,
table.inner-border > tfoot > tr > th,
table.inner-border > tfoot > tr > td {
border-bottom: 1px solid black;
border-right: 1px solid black;
}
table.inner-border > thead > tr > :last-child,
table.inner-border > tbody > tr > :last-child,
table.inner-border > tfoot > tr > :last-child {
border-right: 0;
}
table.inner-border > :last-child > tr:last-child > td,
table.inner-border > :last-child > tr:last-child > th {
border-bottom: 0;
}
<table class="inner-border">
<thead>
<tr>
<th>head1,1</th>
<td>head1,2</td>
<td>head1,3</td>
</tr>
<tr>
<td>head2,1</td>
<td>head2,2</td>
<th>head2,3</th>
</tr>
</thead>
<tr>
<td>1,1</td>
<th>1,2</th>
<td>1,3</td>
</tr>
<tr>
<td>2,1</td>
<td>2,2</td>
<td>2,3</td>
</tr>
<tr>
<td>3,1</td>
<td>3,2</td>
<td>3,3</td>
</tr>
<thead>
<tr>
<th>foot1,1</th>
<td>foot1,2</td>
<td>foot1,3</td>
</tr>
<tr>
<td>foot2,1</td>
<th>foot2,2</th>
<th>foot2,3</th>
</tr>
</thead>
</table>