Всем привет!
Все веб-программисты сталкиваются с табличным представлением данных — это частый элемент панелей администрирования, всевозможных списков и т.п.
Очень часто необходимо, помимо данных, вывести сервисные ссылки — удаление, редактирование, статистика. И тут начинается — вывод слева, вывод справа… Кто на что горазд. Сам я использовал как тот, так и другой способы. Все бы ничего — но в условиях жесткого ограничения на размер блока, куда выводится таблица, хочется видеть чем больше информации, тем лучше. Вот тут и встал вопрос — а куда девать панель сервисных кнопок?
Ответ родился такой — можно снизу, в другую строку.
<table> <tr> <!-- Строка с данными #1 --> </tr> <tr> <!-- Строка с меню для данных #1 --> </tr> ... <tr> <!-- Строка с данными #n --> </tr> <tr> <!-- Строка с меню для данных #n --> </tr> </table>
Реализация
Под строкой с данными, скажем, в 4 ячейки, идет новая строка с одной, объединенной ячейкой. В этой ячейке находится элемент DIV, у которого свойство position установлено в relative. Внутри него, находится еще один DIV, но с position:absolute. Последний DIV — это и есть наша панель, которая находится в зависимости от позиционирования либо слева, либо справа.
<tr> <td>1</td> <td> <a href="#details/8"> <i class="icon-table"></i> Анализ АИС </a> </td> <td> <i class="icon-calendar"></i> 13/02/12, вы </td> <td>всем</td> </tr> <tr> <td class="toolpbar-holder" colspan="4"> <div class="with-toolbar"> <div class="row-toolbar big-icons"> <a href="#edit/8" title="Редактировать анкету «Анализ АИС»"> <i class="icon-edit"></i> </a> <a href="#delete/8" title="Удалить анкету «Анализ АИС»"> <i class="icon-trash"></i> </a> <a href="#results/8" title="Результаты анкеты «Анализ АИС»"> <i class="icon-list-alt"></i> </a> </div> </div> </td> </tr>
Сам стиль:
.with-toolbar{
position: relative;
text-align: right;
font-size: 11px!important;
margin: 0!important;
padding: 0 2px!important; }
.with-toolbar > div.row-toolbar{
background: none repeat scroll 0 0 #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 7px 7px 7px 7px;
box-shadow: 1px 2px 5px rgba(6, 6, 6, 0.69);
padding: 2px;
bottom: 10px;
position: absolute;
right: 5px;
display: none; }
td.toolpbar-holder {
padding:0!important;}
tr:hover + tr td .with-toolbar > div.row-toolbar,
div.row-toolbar:hover{
display: block;}
.row-toolbar.big-icons{
font-size: 22px; }
.row-toolbar.big-icons a {
display: inline-block;
margin:0 3px;}
.row-toolbar.big-icons a + a{
margin-left: 5px;}
Как это работает.
Когда мы наводим указатель на строку, срабатывает правило tr:hover + tr td .with-toolbar > div.row-toolbar и нижняя строка становится видна. Когда мы наводим указатель на сервисную панель, тогда срабатывает правило div.row-toolbar:hover. Остальные правила — просто украшательства.
Рабочий пример использует Bootstrap CSS для оформления, и в элементах ссылок. Я не великой знаток CSS, так что возможно можно сделать проще. Но я сделал пока что так. Смотреть — тут.
