2011-02-12 28 views
5

Üst liste öğesine uygulamak için CSS stili almaya çalışıyorum ancak istenen şekilde uygulanacak kuralları alamıyorum. Aşağıdaki örnekte ilk li öğesinin üst kenarlığını kaldırmaya çalışıyorum. LocationMenuTopItem öğesinde style="border-top: none;" satır içi koyarsam çalışır, ancak bunu bir stil bloğu ile yapmalıyım.CSS kuralı Stili ilk liste öğesi

#locationMenu li neden #locationMenuTopItem bloğunu engelliyor? Çünkü CSS specificity ait

<html> 
<head> 
<style> 
#locationMenu li { 
    border-top: 1px solid #e1e1e1;  
} 

#locationMenuTopItem { 
    border-top: none; 
} 
</style> 
</head> 
<body> 
<ul id="locationMenu"> 
    <li id="locationMenuTopItem"><a href="#">Top Menu</a> 
     <ul> 
      <li><a href="#">Sub Menu 1</a></li> 
      <li><a href="#">Sub Menu 2</a></li> 
      <li><a href="#">Sub Menu 3</a></li> 
     </ul> 
    </li> 
    <li><a href="#">Top Menu 2</a></li> 
    <li><a href="#">Top Menu 3</a></li> 
    </ul> 
</body> 

cevap

1

- seçici #locationMenu lidaha spesifik #locationMenuTopItem den olduğunu. #locationMenu #locationMenuTopItem'u kullanarak burada çalışacak. Neden "#locationMenu li" blok #locationMenuTopItem bloğu zorluyordu edilir http://www.stuffandnonsense.co.uk/archives/css_specificity_wars.html

+0

Bağlantı için thx. Bu onu temizledi. Ben sormadan önce W3C bağlantısını okudum ama bunu çözmek için çok geç oldu. – sipwiz

13

:

İşte yardımcı olacaktır Andy Clarke gelen bir grafik rehber?

Daha specific

#locationMenu > li:first-child 

ek kimlikleri eklemek zorunda kalmadan işi yapmalıyım.

5

(değil IE6 rağmen) Bu, olası bir cevap olabilir: #locationMenu li yalnız #locationMenuTopItem daha derin olduğu için

#locationMenu li, 
#locationMenu li:first-child ul li 
{ 
    border-top: 1px solid #e1e1e1;  
} 

#locationMenu li:first-child 
{ 
    border-top:none; 
} 

Bu overrulie olduğunu. Bir satırdaki daha fazla ifade, daha derin.