Выравнивание кнопок со строкой в ​​таблице с помощью CSS - PullRequest
7 голосов
/ 13 февраля 2011

Я пытаюсь разработать таблицу, которую можно использовать для редактирования информации базы данных (для пользователей, не являющихся пользователями базы данных).Вот что у меня есть (для html):

<table id="myTable" cellspacing='0'>
    <tr><th>Column 1</th><th>Column 2</th><th>Column 3</th></tr>
    <tr id='1'><td>1</td><td>1</td><td>2</td>
    <td style=" table-layout:fixed">
     <div style="width:0px;overflow:visible;position:relative">
        <a style="display:block;position:relative;left:20px">-</a>
     </div>
    </td>

    </tr>
    <tr id='2' class='even'><td>3</td><td>5</td><td>8</td></tr>
    <tr id='3'><td>13</td><td>21</td><td>34</td></tr>
    <tr id='4' class='even'><td>55</td><td>89</td><td>144</td></tr>
    <tr id='5'><td>233</td><td>377</td><td>610</td></tr>
</table>
<input class="addRow" type="button" value="+">
</table>

Вот CSS:

table {
    background: #E0F5F9;
    margin-left: 20px;
    margin-right: 20px;
    margin-top: 20px;
    margin-bottom: 0px;
    border-style: solid;
    border-width: 2px;
    border-color: #1C9CBC;  
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
}

table th {
    padding:4px 10px;
    background: #A8A8A8;
}

table td {
    background:#fff;
    padding:2px 10px 4px 10px;
}

div.editableTable {
    display: inline;
}

input.addRow {
    margin-left: 10px;
    border: solid 2px #1C9CBC;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
    padding-left: 5px;
    padding-right: 5px;
    background: #A8A8A8;

}

table tr.even td {background:#98E6F9}
table tr td {
    background: #E0F5F9;
}

table tr.editing td {
    background: #FF0000;
}

table tr.selectedEven td {
    background: #98E6F9;
    border-left-width: 0px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
}

table tr.selectedEven td:first-child {
    border-left-width: 1px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
    -moz-border-radius-topleft:10px;
    -moz-border-radius-bottomleft:10px;
    -webkit-border-bottom-left-radius:10px;
    border-bottom-left-radius:10px;
    -webkit-border-top-left-radius:10px;
    border-top-left-radius:10px;
}

table tr.selectedEven td:last-child {
    border-left-width: 1px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
    -moz-border-radius-topright:10px;
    -moz-border-radius-bottomright:10px;
}

table tr.selectedEven td:last-child {
    border-left-width: 0px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 1px;
    border-style: solid;
    border-color: #03C100;
}

table tr.selected td {
    /* background: #E0F5F9; */
    border-left-width: 0px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
}

table tr.selected td:first-child {
    border-left-width: 1px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
    -moz-border-radius-topleft:10px;
    -moz-border-radius-bottomleft:10px;
    -webkit-border-bottom-left-radius:10px;
    border-bottom-left-radius:10px;
    -webkit-border-top-left-radius:10px;
    border-top-left-radius:10px;
}

table tr.selected td:last-child {
    border-left-width: 1px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 0px;
    border-style: solid;
    border-color: #03C100;
    -moz-border-radius-topright:10px;
    -moz-border-radius-bottomright:10px;
}

table tr.selected td:last-child {
    border-left-width: 0px;
    border-top-width: 1px;
    border-bottom-width: 1px;
    border-right-width: 1px;
    border-style: solid;
    border-color: #03C100;
}

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

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

И вот как это выглядит: Table design, second try

Этохорошо, за исключением того, что кнопка удаления на правой стороне немного не в ряду.Это означает, что как только мы добавим ~ 13 или 14 строк, кнопка удаления будет удалена от той строки, которую она будет удалять.Таким образом, пользователю неясно, какая именно строка будет удалена при нажатии на кнопку удалить.

Я хотел бы найти какой-нибудь метод, который позволит мне выровнять кнопку (или, в данном случае, несколько кнопок).) с соответствующей строкой таблицы, используя CSS.Это возможно?Сначала я попытался (но безуспешно) сделать это без второй таблицы, но это привело меня к текущей ситуации, когда у меня есть таблица для выравнивания только справа от таблицы, которая фактически содержит данные.

Большая проблема, с которой я столкнулся, заключается в том, что я не могу понять, как выровнять что-то со строкой в ​​таблице.Я, вероятно, мог бы сделать это с помощью jQuery, но это похоже на то, как будто забил винт.Я признаю, что я не настолько опытен в CSS, как в программировании, и поэтому обычно склоняюсь к ответу на программирование.Может кто-нибудь помочь мне понять, как правильно расположить эти кнопки?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

Вы можете попробовать поместить кнопку внутри последней <td> в строке, а затем сместить ее вправо и обеспечить достаточно большое отрицательное правое поле, чтобы вывести ее за пределы таблицы;вам также понадобится положительное правое поле на столе, чтобы убедиться, что есть место для кнопки.

Например:

<table>
    <tbody>
        <tr>
            <td>kdsjfkdsl fds</td>
            <td><span class="killer">X</span>Appropriately architect 24/365 internal or "organic" sources after fully tested portals. Monotonectally leverage existing an expanded array of action items before resource maximizing growth strategies. Proactively drive orthogonal ROI before sustainable relationships.</td>
        </tr>
        <tr>
            <td>2193485798435</td>
            <td><span class="killer">X</span>Enthusiastically deploy team building data with e-business internal or "organic" sources. Enthusiastically negotiate diverse models for transparent communities. Intrinsicly disseminate just in time markets before vertical paradigms. Authoritatively brand performance based web-readiness for error-free growth strategies. Energistically empower customer directed markets with quality data. Distinctively productivate backward-compatible potentialities before prospective technology.</td>
        </tr>
    </tbody>
</table>

И немного CSS (с раскраской, чтобы сделатьпонятно, где все):

table {
    margin-right: 2em;
}
td {
    padding: 5px;
    border: 1px solid green;
}
span.killer {
    float: right;
    margin-right: -1.5em;
    color: red;
    font-weight: bold;
}

И jsfiddle: http://jsfiddle.net/ambiguous/RE8rK/

Я выбрал поля из воздуха, чтобы проиллюстрировать эффект, я оставлю вычисление правильных значенийдо вас.

0 голосов
/ 13 февраля 2011

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

РЕДАКТИРОВАТЬ: Код ниже может позволить вам сохранить ваши закругленные углы.

<tr>
  <td>data</td>
  <td>data</td>
  <td style="width:1px">
     <div style="width:1px;overflow:visible;position:relative">
        <a style="display:block;position:relative;left:20px">-</a>
     </div>
  </td>
</tr>

CSS

table {
  table-layout: fixed;
}
table td:last-child, table th:last-child {
  width: 0;
  padding: 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...