Centrowanie przycisku w komórce tabeli w pionie za pomocą Twittera Bootstrap

90

Używam Twitter Bootstrap i próbuję wyśrodkować przycisk w komórce tabeli. Naprawdę potrzebuję tylko wyśrodkowania w pionie.

<table class="table table-bordered table-condensed">
  <tbody>
    <tr>
      <td><a href="#" class="btn btn-primary"><i class="icon-check icon-white"></i></a></td>
      <td><a href="#">Todo Item One</a><br /><span class="label label-success">One thing</span></td>
    </tr>
  </tbody>
</table>

Proszę zajrzeć do mojego JSFiddle dla problemu. Wypróbowałem kilka sztuczek z centrowaniem stołu, o których wiem, ale żadna z nich nie działa poprawnie. Jakieś pomysły? Z góry dziękuję.

AKTUALIZACJA: Tak, próbowałem vertical-align:middle;i to działa, jeśli jest wbudowane, ale nie jeśli jest w klasie, którą tdma. Zaktualizowano JSFiddle, aby to odzwierciedlić.

Ostatnia aktualizacja: jestem idiotą i nie sprawdziłem, czy został nadpisany przez plik bootstrap.css

Tim Habersack
źródło

Odpowiedzi:

159

DLA BOOTSTRAP 3.X:

Bootstrap ma teraz następujący styl dla komórek tabeli:

.table tbody > tr > td{
    vertical-align: top;
}

Najlepszym sposobem jest dodanie własnej klasy, dodając więcej szczegółów do poprzedniego selektora:

.table tbody > tr > td.vert-aligned {
    vertical-align: middle;
}

Następnie dodaj klasę do swoich td:

<tr>
    <td class="vert-aligned"></td>
    ...
</tr>

DLA BOOTSTRAP 2.X

Nie ma sposobu, aby to zrobić za pomocą Bootstrap.

W przypadku użycia w komórkach tabeli wyrównanie wertykalne robi to, czego oczekuje większość ludzi, czyli naśladuje (stary, przestarzały) atrybut valign. W nowoczesnej, zgodnej ze standardami przeglądarce te trzy fragmenty kodu robią to samo:

<td valign="middle"> <!-- but you shouldn't ever use valign --> </td>
<td style="vertical-align:middle"> ... </td>
<div style="display:table-cell; vertical-align:middle"> ... </div>

Sprawdź zaktualizowane skrzypce

Dalej

Nie możesz też odwołać się do tdklasy używając, .vertponieważ Bootstrap ma już tę klasę:

.table td {
   padding: 8px;
   line-height: 20px;
   text-align: left;
   vertical-align: top; // The problem!
   border-top: 1px solid #dddddd;
}

I przeciąża vertical-align: middleklasę in '.vert', więc musisz zdefiniować tę klasę jako td.vert.

Tom Sarduy
źródło
Dzięki za łącze do zaktualizowanego pliku jsfiddle. Nie byłem świadomy, kiedy tworzyłem instrukcję klasy w css, a jest to specyficzne dla tabeli, musisz poprzedzić element table przed nazwą klasy. W Twoim przykładzie „td.vcenter” działa, ale jeśli zmienisz go na zwykły „.vcenter”, nie zadziała.
Tim Habersack
Dzięki =) Grt pomocy bez użycia wbudowanego css, aby to naprawić!
sk8terboi87 ツ
„Wyrównanie w pionie” nigdy nie zostało udokumentowane i nie pojawia się w bieżącym wzorcu Bootstrap. Odpowiadając na takie pytania, prosimy trzymać się udokumentowanego zachowania.
Dr Jan-Philip Gehrcke,
@ Jan-PhilipGehrcke: Nie jestem pewien, co masz na myśli, ale nie mówię, że vert-alignjest to część Bootstrap, mówię o dodaniu NOWEJ klasy w głównym pliku css
Tom Sarduy
Przepraszam, naprawdę powinienem był uważniej przeczytać twoją odpowiedź, zanim wydałem tak mocne stwierdzenie.
Dr Jan-Philip Gehrcke
43

Mała aktualizacja dla Bootstrap 3.

Bootstrap ma teraz następujący styl dla komórek tabeli:

.table tbody>tr>td
{
    vertical-align: top;
}

Najlepszym sposobem jest dodanie własnej klasy z tym samym selektorem:

.table tbody>tr>td.vert-align
{
    vertical-align: middle;
}

A następnie dodaj go do swoich tds

<td class="vert-align"></td>
Gabriel G. Roy
źródło
1
Czy zmiana jest oficjalnie udokumentowana?
użytkownik
14

dodaj to do swojego css

.table-vcenter td {
   vertical-align: middle!important;
}

następnie dodaj do klasy do swojego stołu:

        <table class="table table-hover table-striped table-vcenter">
Andrzej
źródło
3
Podoba mi się ta, ponieważ wystarczy dodać klasę w jednym miejscu, zamiast dodawać ją w każdym td.
Hugo Sousa
2

Aby to naprawić, umieściłem tę klasę na stronie internetowej

<style>                        
    td.vcenter {
        vertical-align: middle !important;
        text-align: center !important;
    }
</style>

i to w moim TemplateField

<asp:TemplateField ItemStyle-CssClass="vcenter">

ponieważ klasa CSS wskazuje bezpośrednio na element td (tabledata) i ma! Important na końcu każdego ustawienia. Zmieni on reguły bootraps ustawień klas CSS.

Mam nadzieję, że to pomoże

Deviney
źródło
1

Dodaj vertical-align: middle;do tdelementu zawierającego przycisk

<td style="vertical-align:middle;">  <--add this to center vertically
  <a href="#" class="btn btn-primary">
    <i class="icon-check icon-white"></i>
  </a>
</td>
Czterdzieści dwa
źródło
1
Oto dziwna rzecz. Jeśli robię to w tekście, to działa. Jeśli utworzę klasę i ustawię w niej wyrównanie w pionie, to nie zadziała. Zaktualizowałem jsfiddle, aby to odzwierciedlić.
Tim Habersack
2
Patrząc na to w debugerze, widzę, że klasa „vert” jest zastępowana przez bootstraps css. Styl wbudowany ma pierwszeństwo przed CSS, dlatego działa.
Czterdzieści dwa
@TimHabersack: Dodałem klasę i działa, po prostu użyj td.vertzamiast tego .vert;)
Tom Sarduy
0

Dlaczego więc domyślnie td jest ustawione na vertical-align: top ;? Naprawdę jeszcze tego nie wiem. Nie odważyłbym się tego dotknąć. Zamiast tego dodaj to do swojego arkusza stylów. Zmienia przyciski w tabelach.

table .btn{
  vertical-align: top;
}
Jens Alenius
źródło