2012-08-11 10 views
6

Google Chrome, gdy masz zarys na wiersz tabeli je dostać tylko w pierwszym rzędziecss zarys zawsze na pierwszym wierszu tabeli na chromie

więc za pomocą tego css:

tr { 
     outline:1px solid red; 
    } 

będziesz uzyskać zarys tylko w pierwszym rzędzie, można zobaczyć, że jeśli otworzysz ten link w chrome:

http://jsbin.com/enupey/27/edit

ktoś wie jakiegokolwiek obejścia/poprawkę do tego?

Dziękuję

+2

Wygląda bug do mnie, http://code.google.com/p/chromium/issues/detail ? id = 81373, ale jeśli dobrze pamiętam, nie powinieneś polegać na stylizacji 'tr' z powodu ograniczeń w przeglądarkach, aby ją stylizować. –

Odpowiedz

5

Choć wydaje się to być błąd, trochę googling i znalazłem roztwór roboczy w ramach this question

dodania:

display: block; 

wydaje się działać:

tr 
{ 
    outline:1px solid red; 
    display: block; 
} 

Edytowany wynik można zobaczyć here


I bawił się wokół z CSS nieco więcej i wymyślił to:

td 
{ 
    border-top:1px solid red; 
    border-bottom:1px solid red; 
    bottom-padding:-1px; 
} 

table 
{ 
    border-left:2px solid red; 
    border-right:2px solid red; 
    border-top:1px solid red; 
    border-bottom:1px solid red; 
    bottom-padding:-1px; 
} 

miałoby to być odpowiedni?

Uwaga: testowałem to tylko w Google Chrome na Maca.

+1

działa, ale niszczy układ tabeli (zauważalny, jeśli masz szerokość dla etykiety tabeli) – Omu

+0

Edytowana odpowiedź. Główną różnicą jest to, że użyłem granic zamiast konturów. –

+0

dodanie 'display: block' jest wystarczające, ponieważ przetestowałem – UnLoCo

1

The table tag has a rules attribute który pozwala ci określić, gdzie granice są "rządzone" w tabeli. Należy jednak pamiętać, że:

Atrybut rules jest obsługiwany we wszystkich głównych przeglądarkach.

Uwaga: Zasady atrybut nie jest obsługiwany w IE, wcześniejszej wersji 9.

Uwaga: Chrome i Safari wyświetla ten atrybut niepoprawnie: Dodają dotknięte granic poza oprócz wewnętrznych granicach.

Łącząc to z frame attribute i CSS z oryginalnego pytania, to zapewnia zapakowane kontury w każdym wierszu:

<table rules="rows" frame="box"> 

Outcome

widać tę poprawkę do JSBin here

(Przetestowano na komputerze Mac Chrome)

(Dodałem to jako oddzielną odpowiedź, ponieważ moja poprzednia odpowiedź koncentruje się na CSS, to rozwiązanie, używając tylko HTML wydaje się wystarczająco różne, aby oddzielić odpowiedzi)

+3

Zgodnie z [table page on MDN] (https://developer.mozilla.org/en-US/docs/HTML/Element/table), atrybut' rules' jest przestarzałe. Zobacz także http://w3fools.com/ – thirdender

+0

Ta pierwsza strona mówi również, aby nie używać znacznika

, ale zawiera to pytanie. –

+2

Jak podaje strona, odradza się używanie tagu 'TABLE' dla celów układu. W semantycznej teorii HTML tabele służą do wyświetlania danych tabelarycznych (liczby, liczby), a ich używanie z tego powodu jest doskonale w porządku/zachęcane. Pytanie nie określa wprost, czy cel dotyczy danych tabelarycznych, czy nie, ale atrybut 'rules' jest nadal nieaktualny. – thirdender

1

To nie jest idealna odpowiedź z kilku powodów, ale Podrzucam go jako opcję ... Ustaw border-collapse: collapse; na elemencie TABLE i ustaw granice wokół elementów każdego wiersza: TD i TH. Zobacz this JSBin dla końcowego wydruku. Ponieważ opiera się na border-collapse, nie będzie działać bez dodatkowego atrybutu HTML cellspacing w IE6/7. Może również nie dać tego samego efektu, którego szukasz, jeśli chcesz indywidualnie zarysować każdy wiersz. Rozwiązanie zależy również od użycia pseudo-selektorów :first-child i :last-child, a IE8 nie obsługuje :last-child. Można to obejść, dodając "pierwszy" i "ostatni" jako klasy na niektórych elementach, ale to mniej niż idealne.

0

To działa jak wykazano here, bez, wierzę, wszelkich poważnych skutków ubocznych:

tr 
{ 
    display: table-row-group; 
    outline:1px solid red; 
} 
+0

są efekty uboczne http://jsbin.com/enupey/23/edit – Omu

0

Można użyć kodu jak poniżej.

kod HTML dla tabeli jest

<table rules='none'> 

</table> 

i zmienić css z

tr.sel 
{ 
    border:1px solid red; 
} 

To czyni granicę na środkowym surowy w dowolnej przeglądarce.

1

Z display: block można zrobić:

HTML:

<table> 
    <tr> 
    <td>ads</td> 
    <td>azx</td> 
    <td>bbb</td> 
    </tr> 
    <tr class='sel'> 
    <td>ads</td> 
    <td>azx</td> 
    <td>bbb</td> 
    </tr> 
    <tr> 
    <td>ads</td> 
    <td>azx</td> 
    <td>bbb</td> 
    </tr> 
</table> 

CSS:

tr 
{ 
display: block; 
} 

tr.sel 
{ 
    outline: 1px solid red; 
} 

a wyjście jest: http://jsbin.com/enupey/79/edit

-1

ya, jego błąd

spróbować granicę zamiast zarysie, i dać stylu tabeli border-collapse:collapse

żadnych zmian w HTML, CSS teraz

tr.sel 
{ 
    border:1px solid red; 

} 
table{ 
    border-collapse:collapse; 
} 

Demo

fiddle, jsbin

+0

co jeśli używam obramowania, a ja chcę obrysować ten widok: – Omu

0

Fix do Twojego problemu: Zmień CSS do.

tr 
{ 
    outline:1px solid red; 
    display:inherit; 
} 

LUB

tr 
    { 
    outline:1px solid red; 
    display:block; 
    } 

Jeśli jesteś concerned with table layout następnie trzeba walczyć z przestrzeni przez ustawienie margin do jakiejś wartości ujemnej. zobacz tutaj:

http://css-tricks.com/fighting-the-space-between-inline-block-elements/

błąd został już zgłoszony śledzić link: http://code.google.com/p/chromium/issues/detail?id=81373&q=outline&colspec=ID%20Pri%20Mstone%20ReleaseBlock%20OS%20Area%20Feature%20Status%20Owner%20Summary

+0

display: dziedziczy lub blokuje zrujnowanie układu – Omu

Powiązane problemy