Как сделать скруглённую рамку таблицы?
Из-за большого многообразия вариантов оформления таблиц не существует какого-то одного решения, как у таблицы скруглить рамку. Поэтому рассмотрим несколько типовых таблиц.
Рамка вокруг таблицы
Само скругление уголков рамки делается через свойство border-radius, его значением выступает радиус уголка. Добавляя его вместе со свойством border получим рамку вокруг таблицы и без линий внутри ячеек (пример 1).
Пример 1. Использование border-radius
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Таблица</title> <style> table { width: 80%; /* Ширина таблицы */ margin: auto; /* Выравниваем таблицу по центру */ border: 1px solid #4C594F; /* Параметры рамки */ border-radius: 10px; /* Радиус скругления */ border-spacing: 0; /* Расстояние между ячейками */ } th, td { padding: 5px; /* Расстояние от текста до края ячейки */ } thead th { border-bottom: 1px solid #4C594F; /* Линия снизу */ text-align: left; /* Выравнивание по левому краю */ } </style> </head> <body> <table> <thead> <tr><th>Имя</th><th>Оружие</th></tr> </thead> <tbody> <tr><td>Леонардо</td><td>Катаны</td></tr> <tr><td>Рафаэль</td><td>Кинжалы-сай</td></tr> <tr><td>Донателло</td><td>Шест-бо</td></tr> <tr><td>Микеланджело</td><td>Нунчаки</td></tr> </tbody> </table> </body> </html> Таблица с цветным фоном
Схожим образом делается таблица, залитая однотонным цветом или с фоновым изображением, вроде градиента. Для этого мы используем свойство background совместно с функцией linear-gradient(), как показано в примере 2.
Пример 2. Использование background
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Таблица</title> <style> table { width: 80%; /* Ширина таблицы */ margin: auto; /* Выравниваем таблицу по центру */ background: linear-gradient(to bottom, #90C057, #017138); /* Градиент */ color: #fff; /* Цвет текста */ border-radius: 10px; /* Радиус скругления */ border-spacing: 0; /* Расстояние между ячейками */ } th, td { padding: 5px; /* Расстояние от текста до края ячейки */ } thead th { border-bottom: 1px solid #fff; /* Линия снизу */ text-align: left; /* Выравнивание по левому краю */ } </style> </head> <body> <table> <thead> <tr><th>Имя</th><th>Оружие</th></tr> </thead> <tbody> <tr><td>Леонардо</td><td>Катаны</td></tr> <tr><td>Рафаэль</td><td>Кинжалы-сай</td></tr> <tr><td>Донателло</td><td>Шест-бо</td></tr> <tr><td>Микеланджело</td><td>Нунчаки</td></tr> </tbody> </table> </body> </html> Рамка вокруг ячеек
Если требуется сделать рамку вокруг каждой ячейки, тогда свойство border пишется для селекторов th и td, перечисляя их через запятую.
th, td { border: 1px solid #333; /* Цвет фона ячеек */ }
Радиус скругления придётся указывать для каждой из четырёх угловых ячеек индивидуально. Сперва нам понадобятся псевдоклассы :first-child и :last-child.
- tr:first-child — первая строка таблицы;
- tr:last-child — последняя строка таблицы;
- td:first-child — первая ячейка в строке таблицы;
- tr:last-child — последняя ячейка в строке таблицы.
Комбинируя между собой разные селекторы определяем стиль конкретных ячеек.
- tr:first-child td:first-child — первая ячейка первой строки (левая верхняя);
- tr:first-child td:last-child — последняя ячейка первой строки (правая верхняя);
- tr:last-child td:first-child — первая ячейка последней строки (левая нижняя);
- tr:last-child td:last-child — последняя ячейка последней строки (правая нижняя).
Для ячеек заголовка вместо td подставляем th — th:first-child и th:last-child.
Свойство border-radius достаточно универсально, оно может устанавливать радиус скругления со всех сторон или отдельных уголков.
- border-radius: 10px 0 0 0 — левый верхний уголок;
- border-radius: 0 10px 0 0 — правый верхний уголок;
- border-radius: 0 0 10px 0 — правый нижний уголок;
- border-radius: 0 0 0 10px — левый нижний уголок.
Вместо border-radius допустимо использовать специальные свойства, определяющие радиус скругления конкретного уголка.
- border-top-left-radius — левый верхний уголок;
- border-top-right-radius — правый верхний уголок;
- border-bottom-left-radius — левый нижний уголок;
- border-bottom-right-radius — правый нижний уголок.
В примере 3 показан результат использования этих свойств в сочетании с комбинацией селекторов.
Пример 3. Ячейки с рамкой
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Таблица</title> <style> table { width: 80%; /* Ширина таблицы */ margin: auto; /* Выравниваем таблицу по центру */ –r: 10px; /* Радиус скругления */ border-spacing: 3px; /* Расстояние между ячейками */ } th, td { border: 1px solid #333; /* Параметры рамки */ padding: 5px; /* Расстояние от текста до края ячейки */ } tr:first-child th:first-child { border-top-left-radius: var(–r); /* Левый верхний угол */ } tr:first-child th:last-child { border-top-right-radius: var(–r); /* Правый верхний угол */ } tr:last-child td:first-child { border-bottom-left-radius: var(–r); /* Левый нижний угол */ } tr:last-child td:last-child { border-bottom-right-radius: var(–r); /* Правый нижний угол */ } </style> </head> <body> <table> <thead> <tr><th>Имя</th><th>Оружие</th></tr> </thead> <tbody> <tr><td>Леонардо</td><td>Катаны</td></tr> <tr><td>Рафаэль</td><td>Кинжалы-сай</td></tr> <tr><td>Донателло</td><td>Шест-бо</td></tr> <tr><td>Микеланджело</td><td>Нунчаки</td></tr> </tbody> </table> </body> </html>
Обратите внимание, что между ячейками остаётся небольшой промежуток, величину которого можно регулировать через свойство border-spacing.
Базовая таблица
Если в предыдущем примере установить нулевое значение border-spacing, то часть линий окажутся двойными (рис. 1).
Рис. 1. Двойные линии между ячейками
Для устранения подобного эффекта предназначено свойство border-collapse со значением collapse. Однако оно не совместимо с border-radius и заодно убирает и скругление уголков (рис. 2).
Рис. 2. Результат действия border-collapse
Чтобы добиться желаемого оформления таблицы рамку нужно делать не вокруг каждой ячейки, а, к примеру, только сверху и слева.
th, td { border-top: 1px solid #333; /* Линия сверху */ border-left: 1px solid #333; /* Линия слева */ }
Для самых нижних ячеек и самых правых ячеек придётся добавить дополнительные линии.
/* Ячейки последней строки таблицы */ tr:last-child td { border-bottom: 1px solid #333; /* Линия снизу */ } /* Последние ячейки в каждой строке */ th:last-child, td:last-child { border-right: 1px solid #333; /* Линия справа */ }
Чтобы не повторять несколько раз параметры линии, в примере 4 она вынесена в переменную –b.
Пример 4. Таблица с рамкой
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Таблица</title> <style> table { width: 80%; /* Ширина таблицы */ margin: auto; /* Выравниваем таблицу по центру */ –r: 10px; /* Радиус скругления */ –b: 1px solid #333; /* Параметры линии */ border-spacing: 0; /* Расстояние между ячейками */ } th, td { border-top: var(–b); /* Линия сверху */ border-left: var(–b); /* Линия слева */ padding: 5px; /* Расстояние от текста до края ячейки */ } tr:last-child td { border-bottom: var(–b); /* Линия снизу */ } th:last-child, td:last-child { border-right: var(–b); /* Линия справа */ } tr:first-child th:first-child { border-top-left-radius: var(–r); /* Левый верхний угол */ } tr:first-child th:last-child { border-top-right-radius: var(–r); /* Правый верхний угол */ } tr:last-child td:first-child { border-bottom-left-radius: var(–r); /* Левый нижний угол */ } tr:last-child td:last-child { border-bottom-right-radius: var(–r); /* Правый нижний угол */ } </style> </head> <body> <table> <thead> <tr><th>Имя</th><th>Оружие</th></tr> </thead> <tbody> <tr><td>Леонардо</td><td>Катаны</td></tr> <tr><td>Рафаэль</td><td>Кинжалы-сай</td></tr> <tr><td>Донателло</td><td>Шест-бо</td></tr> <tr><td>Микеланджело</td><td>Нунчаки</td></tr> </tbody> </table> </body> </html>
Автор: Влад Мержевич
Источник: webref.ru