Alt öğelere CSS Stili uygulama


232

Stilleri yalnızca belirli bir sınıfla DIV içindeki tabloya uygulamak istiyorum:

Not: Alt öğeler için bir css seçici kullanmayı tercih ederim.

# 1 neden çalışıyor ve # 2 çalışmıyor?

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>

Neyi yanlış yapıyorum?


IE6 ve altı için>, + ve [] seçicilerinin kullanılamadığını unutmayın.
— Erick

Yanıtlar:


309

Bu kod " div.test th, td, caption {padding:40px 100px 40px 50px;}" , tüm öğelere ve tüm öğelere ek olarak, sınıfı thbulunan bir divöğenin içerdiği tüm öğelere kural uygulartest td caption öğelere .

Bu aynı değildir "Tüm td, thve captionelemanları bir tarafından bulunan divbir sınıf ile eleman test". Bunun için seçicilerinizi değiştirmeniz gerekir:

' >' bazı eski tarayıcılar tarafından tam olarak desteklenmiyor (sana bakıyorum, Internet Explorer).

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

div.test'i 3 kez yazmanın bir yolu var mı?
— roman m

2
@rm Hayır. Kuralların iç içe yerleştirilmesi ya da 'ile' tür gruplaması yoktur
— sblundy

2
@romanm 'div.test' yazmanın 3 kat fazla yolu var! css dosyaları yazmak için sass veya daha az çerçeve kullanarak içine bakmak! :)
— gillyb

@romanm - tekrarımı önlemek için tüm çocukları hedeflemek için * kullanarak veya tüm doğrudan çocuklar için .class> * kullanarak cevabımı görün. Zor değil.
— Richard Edwards

IE'de desteklenmemesi ile ilgili ipucu çok yardımcı oldu, iOS'ta DTCoreText için bazı CSS çalışmaları yapmaya çalışıyordum ama işe yaramadı, ayrıştırıcıları IE'den daha kötü.
— Sirenler

123
.test * {padding: 40px 100px 40px 50px;}

11
* Burada .test *, her alt öğe için en spesifik kural olacağından, daha özel bir kuralla geçersiz kılamayacağınız anlamına gelir . Başka bir deyişle, içine koyduğunuz her şeyin .test *daha spesifik bir css kuralı tarafından geçersiz kılınamayacağını unutmayın, çünkü test *en spesifik kural budur.
— vadasambar

81

> selektör direkt çocukları değil, yalnızca soyundan eşleşir.

İstediğiniz

div.test th, td, caption {}

veya daha olası

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

Düzenle:

İlki diyor

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

İkinci ise

  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">  */

Orijinalinizde div.test > thdiyor ki any <th> which is a **direct** child of <div class="test">, bu eşleşecek <div class="test"><th>this</th></div>ancak eşleşmeyecek<div class="test"><table><th>this</th></table></div>


fwiw, çünkü bu seçicideki td ve altyazı "aptal" - div.test'e bakmaksızın herhangi bir th / altyazıyla eşleşecekler. Bu tür kör hedefleme nadiren CSS'de en genel stiller dışında herhangi bir şey için istediğiniz şeydir.
— annakata

@annakata: bu css çerçevesinin bir parçası, yerel olarak uygulamaya çalışıyorum
— roman m

10

Tüm alt öğelere stil eklemek istiyorsanız ve html etiketi için herhangi bir belirtim yoksa kullanın.

Üst etiket div.parent

div.parent gibi içindeki alt etiketi <a>, <input>,<label> vb

kod: div.parent * {color: #045123!important;}

Ayrıca önemli kaldırabilirsiniz, gerekli değildir


7

İşte son zamanlarda yazdığım bazı kod. Sınıf / kimlik isimlerini sahte sınıflarla birleştirmenin temel bir açıklaması olduğunu düşünüyorum.

.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>


CSS, gibi tek satırlı yorumlara izin vermez //. Bkz. Stackoverflow.com/questions/4656546/…
— Volker E.

4
div.test td, div.test caption, div.test th 

benim için çalışıyor.

Alt seçici> IE6'da çalışmaz.


2

Bunu bildiğim kadarıyla:

div[class=yourclass] table {  your style here; } 

veya sizin durumunuzda bile:

div.yourclass table { your style here; }

(ancak bu öğeler yourclassolmayabilir div) için çalışır, sadece içindeki tabloları etkiler yourclass. Ken'in dediği gibi,> her yerde desteklenmez (ve div[class=yourclass]sınıflar için nokta gösterimini kullanın).


0

Bu kod, SCSS sözdizimini kullanarak hile yapabilir

.parent {
  & > * {
    margin-right: 15px;
    &:last-child {
      margin-right: 0;
    }
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.