Como posso selecionar todos os tr
elementos, exceto o primeiro tr
de uma tabela com CSS?
Eu tentei usar esse método, mas achei que não funcionava.
<tr>
e uma classe diferente para o restante.
Como posso selecionar todos os tr
elementos, exceto o primeiro tr
de uma tabela com CSS?
Eu tentei usar esse método, mas achei que não funcionava.
<tr>
e uma classe diferente para o restante.
Respostas:
Adicionando uma classe ao primeiro tr
ou ao tr
s subsequente . Não existe uma maneira entre navegadores de selecionar as linhas que você deseja apenas com CSS.
No entanto, se você não se importa com o Internet Explorer 6, 7 ou 8:
tr:not(:first-child) {
color: red;
}
tr:not(:first-of-type)
como uma solução em potencial, se você está procurando a primeira instância de um seletor específico e não o primeiro filho generalizado.
Estou surpreso que ninguém tenha mencionado o uso de combinadores de irmãos, suportados pelo IE7 e posterior:
tr + tr /* CSS2, adjacent sibling */
tr ~ tr /* CSS3, general sibling */
Ambos funcionam exatamente da mesma maneira (no mesmo contexto das tabelas HTML) como:
tr:not(:first-child)
elem + elem
é uma ótima solução geral para quando os elementos que você deseja segmentar não são os únicos filhos. Por exemplo, se a <h2>
for seguido por várias <p>
tags, o primeiro <p>
não será o primeiro filho nesse caso.
solução ideal, mas não suportada no IE
tr:not(:first-child) {css}
a segunda solução seria estilizar todos os trs e substituir o css pelo primeiro filho:
tr {css}
tr:first-child {override css above}
parece que a 'primeira linha' da qual você está falando é o cabeçalho da tabela - então você deve realmente pensar em usar thead
e tbody
em sua marcação ( clique aqui ) o que resultaria em uma marcação 'melhor' (semanticamente correta, útil para itens como leitores de tela) ) e possibilidades mais fáceis e compatíveis com vários navegadores para seleção de css ( table thead ... { ... }
)
Embora a pergunta já tenha uma resposta decente, só quero enfatizar que a :first-child
tag segue o tipo de item que representa os filhos.
Por exemplo, no código:
<div id"someDiv">
<input id="someInput1" />
<input id="someInput2" />
<input id="someInput2" />
</div
Se você deseja afetar apenas os dois segundos elementos com uma margem, mas não o primeiro, você faria:
#someDiv > input {
margin-top: 20px;
}
#someDiv > input:first-child{
margin-top: 0px;
}
isto é, como input
s são filhos, você colocaria first-child
na parte de entrada do seletor.
Desculpe, eu sei que isso é antigo, mas por que não estilizar todos os elementos tr da maneira que você deseja, exceto o primeiro e usar a classe psuedo: first-child, em que você revoga o que especificou para todos os elementos tr.
Melhor descrito por este exemplo:
tr {
border-top: 1px solid;
}
tr:first-child {
border-top: none;
}
/ Patrik
Outra opção:
tr:nth-child(n + 2) {
/* properties */
}
Pode ser que alguém possa se beneficiar, abaixo está o que eu usei
ol li:not(:first-child) {
background: black;
color: white;
}
Você também pode usar um seletor de pseudo classe no seu CSS assim:
.desc:not(:first-child) {
display: none;
}
Isso não aplicará a classe ao primeiro elemento da classe .desc.
Aqui está um JSFiddle com um exemplo: http://jsfiddle.net/YYTFT/ , e esta é uma boa fonte para explicar os seletores de pseudo classe: http://css-tricks.com/pseudo-class-selectors/
first-child
ignora classes.
Você pode criar uma classe e usá-la quando definir todos os seus futuros que deseja (ou não deseja) que sejam selecionados pelo CSS.
Isso seria feito escrevendo
<tr class="unselected">
e depois no seu css com as linhas (e usando o comando text-align como exemplo):
unselected {
text-align:center;
}
selected {
text-align:right;
}