2009-02-26 2 views
2

Скажите, что у меня есть таблица <> с определенным классом css (< table class = "x">), и я хочу изменить свойство «color» только первого уровня < td> , возможно ли это с помощью css без установки классов по соответствующему < td>?CSS: Каскад всего один уровень

I.e.

<table class="x"> 
    <tr> 
     <td> 
      xxxx 
      <table><tr><td>yyy</td><tr></table> 
     </td> 
    </tr> 
<table> 

Я только хочу, чтобы ххое изменить цвет - так .x td{color:red;} будет в настоящее время применяются к ххому и ггггу, когда я только хочу XXXX целенаправленного, но предпочли бы не дать ххого TD имени класса

+0

У вас есть определенный браузер в виду или просто вообще? Различные браузеры поддерживают абсолютно разные уровни функциональности, поэтому это влияет на то, что будет работать и что будет. – cdeszaq

ответ

8

Одним из вариантов было бы переопределить эффект каскада, установив второй уровень на то, что вы хотите, что позволит вам отменить эффекты на верхнем уровне.

Что-то вроде этого:

table.x tr td { ...} 

table.x tr td table tr td { ... } 

Первое утверждение будет применяться ко всем ТД под столом .x, а затем второе утверждение будет переопределить для внутренних уровней вложенности (и все, что под ними). Поскольку это происходит после первого утверждения, оно отменяет все, что указано в вышеприведенных утверждениях.

Это также будет работать в IE, потому что оно использует более базовую конструкцию предков/потомков, а не детей, которые не так хорошо поддерживаются.

+2

Второе правило отменяет первое не потому, что оно второе, а потому, что оно более конкретное. Проверьте спецификации CSS для получения дополнительной информации о специфичности и каскаде. Кроме того, эти селектора могут быть упрощены до 'table.x td {...}' и 'table.x table td {...}', соответственно. –

+0

@Ben Я согласен с тем, что спецификаторы могут быть упрощены, я просто выставляю их полностью, чтобы лучше проиллюстрировать суть. Кроме того, несмотря на то, что спецификация CSS говорит о том, что специфичность определяет, как вещи применяются, IE не всегда следует этому. По моему опыту, более поздние вещи, скорее всего, выиграют. – cdeszaq

17

Попробуйте это:

table.x > tr > td { ... } 

> является непосредственным дочерним селектором.

+0

Вы узнаете что-то новое каждый день - это классно ... –

+0

Я не думаю, что IE ответит на это ... – Ishmael

+0

IE 7 и выше поддерживают его. –

Смежные вопросы