2014-01-04 2 views
2

Есть ли способ объявить объявление CSS, которое нацелено на родительский элемент элемента по id?Есть ли способ установить CSS родителя элемента?

Например, я знаю идентификатор моего элемента «element1», но я не знаю идентификатора его родителя. Я хочу объявить информацию CSS для myDiv, но я не буду знать ее идентификатор.

HTML:

<div id="myDiv"> 
    <div id="element1"> hello </div> 
</div> 

CSS:

#element1(parent) { 
    border:1px solid red; 
} 
+1

В этой теме есть ответы: http://stackoverflow.com/questions/1014861/is-there-a-css-parent-selector – Goombah

+3

Довольно старая тема @Goombah, учитывая скорость принятия новых функций браузера в эти дни - Я опубликовал текущий статус в качестве нового ответа ниже. –

ответ

5

Нет, сейчас нет. Об этом часто говорили в группах WHATWG и т. Д., Но до года или два назад разработчики браузеров отказались поддерживать какие-либо предложения для таких селекторов, потому что это слишком замедляло бы правило CSS из-за того, что DOM анализируется.

С достижениями в области синтаксического анализа двигателей DOM в настоящее время считается возможно с конца поставщика браузера, и как таковые есть предложение теперь включать некоторые вида целевой селектора в CSS4, даже с синтаксисом еще обсуждается , Прямо сейчас, нет браузера, который поддерживает любую из предложенных нотаций, и никто из них даже не готов внутренне поддерживать такую ​​функцию.

The current CSS4 Selectors draft упоминает предмета спецификатора, но даже содержит явную записку прямо сейчас, что это не определилось ли, если это предложение имеет место, то ! должно предваряться или добавляется к селектору, или если должен быть даже 2 из них ,

-1

Не с ванильным css. Вы можете попробовать scss, less или какой-нибудь другой язык генерации динамических css.

Вам нужны вложенные объявления и поддержка родительского селектора.

Вот пример, который работает как в и СКС менее:

#element1 { 
    #myDiv & { border: 1px solid red; } 
} 

Некоторые ссылки:

+0

Это решение бессмысленно, поскольку оно не отрицает тот факт, что он не знает идентификатора родителя. SCSS и LESS просто компилируются в собственный CSS, поэтому не могут поддерживать функции, которые CSS не поддерживает. Кроме того, ваше решение не эквивалентно - '#myDiv &' в этом случае просто скомпилируется в '#myDiv # element1 {rules}', который не является ни тем, что он хочет, ни хорошим решением - указание нескольких идентификаторов в одном правиле не делает ' Имеют смысл. –

1

Вы можете сделать это с JQuery, если вы не ограничены только CSS:

$(document).ready(function(){ 
    $("#element1").closest("div").css({"({"border":"1px solid red"}); 
}); 

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

1

, если вы знаете, родительский элемент это ДИВ:

div > #element1{ 
    border:1px solid red; 
} 

, но если вы не знаете, что тег является родителем вашего элемента, читать все это, прежде чем использовать этот код:

* > #element1{ 
    border:1px solid red; 
} 

Это читается как: все элементы, которые являются прямым потомком (который может быть только одним) элемента с id 'myDiv'.

Есть некоторые проблемы совместимости с браузером, но, согласно this post, парень говорит, что он совместим с IE 7, IE8, IE9 pr3, FF 3.0, FF 3.5, FF 3.6, FF 4b1, Saf 4.0 Win, Saf 5.0 Win , Chrome 4, Chrome 5, Opera 10.10, Opera 10.53 и Opera 10.60.

Но действительно плохой об этом коде - это может привести к проблемам с производительностью (хотя я и не тестировал), потому что вы заставляете браузер проходить через все элементы страницы (которые могут быть обширными) ,

Теперь, если вы хотите быть хорошим css-кодером и избегать этого, вы должны думать наоборот, как и все остальные, например, применяя классы или идентификатор к родительскому элементу. Если вы не можете связаться с ними, проверьте, возможно ли вставить новый div в вашу структуру, обертывающий ваш элемент # element1 и являющийся родителем этого элемента или даже использующий javascript.

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