Aplicar o estilo CSS aos elementos-filhos

quero aplicar estilos apenas na tabela dentro do DIV com uma classe em particular:

Nota: prefiro usar um selector de css para elementos infantis.

Porque é que o número 1 funciona e o número 2 não?

1:

div.test th, div.test td, div.test caption {padding:40px 100px 40px 50px;}

2:

div.test th, td, caption {padding:40px 100px 40px 50px;}

HTML:

<html>
    <head>
        <style>
            div.test > th, td, caption {padding:40px 100px 40px 50px;}
        </style>
    </head>
    <body>
        <div>
            <table border="2">
                <tr><td>some</td></tr>
                <tr><td>data</td></tr>
                <tr><td>here</td></tr>
            </table>
        </div>
        <div class="test">
            <table  border="2">
                <tr><td>some</td></tr>
                <tr><td>data</td></tr>
                <tr><td>here</td></tr>
            </table>
        </div>
    </body>
</html>
O que estou a fazer de errado?

Author: YakovL, 2009-03-10

7 answers

Este código "div.test th, td, caption {padding:40px 100px 40px 50px;} " aplica uma regra a todos os elementos th que estão contidos num elemento div com uma classe chamada test, para além de Todos td elementos e Todos caption elementos.

Não é o mesmo que "todos".td, th e caption elementos que estão contidos num elemento div com uma classe de test". Para conseguir isso você precisa mudar seus seletores:

'>' não é totalmente suportado por alguns navegadores mais antigos (estou olhando para você, navegador).

div.test th,
div.test td,
div.test caption {
    padding: 40px 100px 40px 50px;
}
 264
Author: Ken Browning, 2009-03-10 20:37:52
.test * {padding: 40px 100px 40px 50px;}
 96
Author: Richard Edwards, 2012-05-24 19:23:46

A > o selector corresponde apenas a crianças directas, não a Descendentes.

Queres

div.test th, td, caption {}

Ou mais provável

div.test th, div.test td, div.test caption {}

Editar:

O primeiro diz:
  div.test th, /* any <th> underneath a <div class="test"> */
  td,          /* or any <td> anywhere at all */
  caption      /* or any <caption> */

Considerando que o segundo diz

  div.test th,     /* any <th> underneath a <div class="test"> */
  div.test td,     /* or any <td> underneath a <div class="test"> */
  div.test caption /* or any <caption> underneath a <div class="test">  */

No seu original o div.test > th diz any <th> which is a **direct** child of <div class="test">, o que significa que vai corresponder <div class="test"><th>this</th></div> mas não vai corresponder <div class="test"><table><th>this</th></table></div>

 66
Author: Greg, 2009-03-10 20:32:40

Se quiser adicionar estilo em todas as crianças e sem especificações para a marca html, use-a.

Marca parental div.parent

Etiqueta de criança dentro do div.pais como <a>, <input>, <label> etc.

Código : div.parent * {color: #045123!important;}

Você também pode remover importante, não é necessário

 9
Author: user1369111, 2014-03-25 13:09:18
Aqui está um código que escrevi recentemente. Eu acho que ele fornece uma explicação básica de combinar nomes de classe/ID com pseudoclasses.

.content {
  width: 800px;
  border: 1px solid black;
  border-radius: 10px;
  box-shadow: 0 0 5px 2px grey;
  margin: 30px auto 20px auto;
  /*height:200px;*/

}
p.red {
  color: red;
}
p.blue {
  color: blue;
}
p#orange {
  color: orange;
}
p#green {
  color: green;
}
<!DOCTYPE html>
<html>

<head>
  <title>Class practice</title>
  <link href="wrench_favicon.ico" rel="icon" type="image/x-icon" />
</head>

<body>
  <div class="content">
    <p id="orange">orange</p>
    <p id="green">green</p>
    <p class="red">red</p>
    <p class="blue">blue</p>
  </div>
</body>

</html>
 4
Author: Mark, 2016-09-28 02:22:19
div.test td, div.test caption, div.test th 
Por mim, tudo bem.

O selector de crianças > não funciona na IE6.

 3
Author: Traingamer, 2009-03-10 20:32:18
Até onde sei isto:
div[class=yourclass] table {  your style here; } 

Ou, no teu caso, até isto:

div.yourclass table { your style here; }

(mas isto irá funcionar para elementos com yourclass que podem não ser div irão afectar apenas as tabelas dentro yourclass. E, como Ken diz, O > não é suportado em todos os lugares (e div[class=yourclass] também, então use a notação de ponto para classes).

 2
Author: tunnuz, 2009-03-10 20:30:14