Как выбрать <li>
элемент, который является прямым родителем элемента привязки?
Например, мой CSS будет выглядеть примерно так:
li < a.active {
property: value;
}
Очевидно, есть способы сделать это с помощью JavaScript, но я надеюсь, что существует какой-то обходной путь, который существует нативно для уровня CSS 2.
Меню, которое я пытаюсь стилизовать, издается CMS, поэтому я не могу переместить активный элемент в <li>
элемент ... (если я не создаю тему модуля создания меню, который я бы предпочел не делать).
Любые идеи?
источник
!
сейчас:The subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
$
выглядела лучше для меня ... с добавленной!
можно пропустить легче.:has()
псевдо-псевдонимом, который все знают и любят из jQuery. Последний ED удалил все ссылки на предметный индикатор и заменил его:has()
псевдо. Я не знаю точных причин, но CSSWG провела опрос некоторое время назад, и результаты должны были повлиять на это решение. Скорее всего, это для совместимости с jQuery (так что он может использовать qSA без изменений), а также потому, что синтаксис индикатора объекта оказался слишком запутанным.Я не думаю, что вы можете выбрать родителя только в CSS.
Но поскольку у вас уже есть
.active
класс, было бы легче переместить этот класс вli
(вместоa
). Таким образом, вы можете получить доступ к какli
иa
через только CSS.источник
Вы можете использовать этот скрипт :
Это выберет любого родителя текстового ввода. Но подождите, есть еще много чего. Если вы хотите, вы можете выбрать указанного родителя:
Или выберите его, когда он активен:
Проверьте этот HTML:
Вы можете выбрать его,
span.help
когдаinput
он активен, и показать его:Есть много других возможностей; просто ознакомьтесь с документацией плагина.
Кстати, это работает в Internet Explorer.
источник
patent()
будет быстрее. Это нужно проверить, однако#a!
один выдает ошибку,#a! p
работает), и поэтому другие не будут работать также из-заUncaught TypeError: Cannot call method 'split' of undefined
: см. Jsfiddle.net/HerrSerker/VkVPsКак уже упоминалось несколькими другими, не существует способа стилизовать родительский (ие) элемент, используя только CSS, но с jQuery работает следующее :
источник
<
Селектор не существует (проверено с помощью JQuery 1.7.1).<
-syntax работал в 2009 году, но я обновил его (на 2013 год).:has()
селектор :$("li:has(a.active)").css("property", "value");
. Он читается аналогично предложенному CSS 4!
селектору. Смотрите также::parent
селектор ,.parents()
метод ,.parent()
метод ..css("property", "value")
для стиля выбранные элементы, вы обычно должны.addClass("someClass")
иметь в своем CSS.someClass { property: value }
( через ). Таким образом, вы можете записать стиль с полной мощью CSS и любых используемых вами препроцессоров.Да:
:has()
Поддержка браузера: нет
источник
Нет родительского селектора; просто так нет предыдущего селектора родного брата. Одна из веских причин отсутствия этих селекторов заключается в том, что браузер должен пройти через все дочерние элементы элемента, чтобы определить, следует ли применять класс. Например, если вы написали:
Затем браузеру придется подождать, пока он загрузится, и проанализировать все до тех пор, пока не
</body>
определится, должна ли страница быть красной или нет.В статье « Почему у нас нет родительского селектора» это подробно объясняется.
источник
В CSS 2 нет способа сделать это. Вы можете добавить класс к
li
и ссылаться наa
:источник
Попробуйте переключиться
a
наblock
отображение, а затем используйте любой стиль, который вы хотите.a
Элемент заполняетli
элемент, и вы будете иметь возможность изменять свой внешний вид , как вы хотите. Не забудьте установитьli
отступы на 0.источник
Селектор CSS « General Sibling Combinator » может быть использован для того, что вы хотите:
Это соответствует любому
F
элементу, которому предшествуетE
элемент.источник
Не в CSS 2, насколько я знаю. CSS 3 имеет более надежные селекторы, но не всегда реализован во всех браузерах. Даже с улучшенными селекторами, я не верю, что это достигнет того, что вы указали в своем примере.
источник
Я знаю, что OP искал решение CSS, но этого легко добиться с помощью jQuery. В моем случае мне нужно было найти
<ul>
родительский тег для<span>
тега, содержащегося в дочернем элементе<li>
. У jQuery есть:has
селектор, поэтому можно определить родителя по дочерним элементам, которые он содержит:выберет
ul
элемент, который имеет дочерний элемент с идентификатором someId . Или, чтобы ответить на исходный вопрос, нужно выполнить что-то вроде следующего (не проверено):источник
$yourSpan.closest("ul")
и вы получите родительский UL вашего элемента span. Тем не менее ваш ответ полностью оффтопный imho. Мы можем ответить на все вопросы, связанные с CSS, с помощью решения jQuery.Псевдоэлемент
:focus-within
позволяет выбрать родителя, если у потомка есть фокус.Элемент может быть сфокусирован, если у него есть
tabindex
атрибут.Поддержка браузера для фокусировки внутри
TabIndex
пример
источник
.color:focus-within .change
на.color:focus-within
. В моем случае я использую навигационную панель начальной загрузки, которая добавляет класс к дочерним элементам, когда активен, и я хочу добавить класс к родительской .nav-панели. Я думаю, что это довольно распространенный сценарий, когда я владею разметкой, но компонент css + js является загрузочным (или другим), поэтому я не могу изменить поведение. Хотя я могу добавить tabindex и использовать этот CSS. Спасибо!Это наиболее обсуждаемый аспект спецификации Selectors Level 4 . При этом селектор сможет стилизовать элемент в соответствии с его дочерним элементом, используя восклицательный знак после данного селектора (!).
Например:
установит красный фоновый цвет, если пользователь наводит курсор на любой якорь.
Но мы должны ждать реализации браузеров :(
источник
Вы можете попытаться использовать гиперссылку в качестве родителя, а затем изменить внутренние элементы при наведении курсора. Нравится:
Таким образом, вы можете изменить стиль в нескольких внутренних тегах в зависимости от ролловера родительского элемента.
источник
a
тега только определенными элементами, если вы хотите соответствовать стандартам XHTML. Например, вы не можете использоватьdiv
внутриa
, не получив предупреждение о нарушении схемы.В настоящее время нет родительского селектора, и он даже не обсуждается ни в одном из обсуждений W3C. Вам нужно понять, как браузер оценивает CSS, чтобы понять, нужен он нам или нет.
Здесь много технических объяснений.
Джонатан Снук объясняет, как оценивается CSS .
Крис Койер о беседах родительского селектора .
Гарри Робертс снова о написании эффективных селекторов CSS .
Но у Николь Салливан есть некоторые интересные факты о положительных тенденциях .
Все эти люди высшего класса в области разработки интерфейса.
источник
need
определяется требованиями веб-разработчиков, зависит ли наличие этого в спецификации от других факторов.Просто идея для горизонтального меню ...
Часть HTML
Часть CSS
Обновленная демоверсия и остальной код
Другой пример, как использовать его с вводом текста - выбрать родительский набор полей
источник
Вот взлом с
pointer-events
помощьюhover
:источник
Есть плагин, который расширяет CSS, чтобы включать некоторые нестандартные функции, которые действительно могут помочь при разработке сайтов. Это называется EQCSS .
EQCSS добавляет родительский селектор. Он работает во всех браузерах, Internet Explorer 8 и выше. Вот формат:
Итак, здесь мы открыли запрос элемента
a.active
для каждого элемента , и для стилей внутри этого запроса такие вещи, как$parent
смысл, имеют смысл, потому что есть точка отсчета. Браузер может найти родителя, потому что он очень похож наparentNode
JavaScript.Вот демонстрация
$parent
и еще одна$parent
демонстрация, которая работает в Internet Explorer 8 , а также снимок экрана, если у вас нет Internet Explorer 8 для тестирования с .EQCSS также включает мета-селекторы :
$prev
для элемента перед выбранным элементом и$this
только для тех элементов, которые соответствуют запросу элемента, и многое другое.источник
Сейчас 2019 год, и в последнем проекте модуля вложенности CSS на самом деле есть что-то вроде этого. Введение
@nest
в правила.(Скопируйте и вставьте из URL выше).
Пример допустимых селекторов согласно этой спецификации:
источник
Технически нет прямого способа сделать это. Однако вы можете разобраться с этим либо с помощью jQuery, либо с помощью JavaScript.
Тем не менее, вы можете сделать что-то подобное.
JQuery
Если вы хотите добиться этого с помощью jQuery, то вот ссылка на родительский селектор jQuery .
источник
W3C исключил такой селектор из-за огромного влияния производительности на браузер.
источник
Краткий ответ НЕТ ; мы не имеем
parent selector
на данном этапе в CSS, но если вы не должны менять местами элементы или классы в любом случае, второй вариант использует JavaScript. Что-то вроде этого:Или более короткий путь, если вы используете jQuery в своем приложении:
источник
Хотя в стандартном CSS в настоящее время нет родительского селектора, я работаю над (персональным) проектом, который называется ax (т.е. расширенный синтаксис селектора CSS / ACSSSS ), который среди 7 новых селекторов включает в себя оба:
<
(который позволяет выбрать противоположный>
)^
(который позволяет выбрать противоположный[SPACE]
)В настоящее время топор находится на относительно ранней стадии развития бета-версии.
Смотрите демо здесь:
http://rounin.co.uk/projects/axe/axe2.html
(сравните два списка слева в стиле стандартных селекторов и два списка справа в стиле топоров)
источник
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
в самый конец HTML-документа, непосредственно перед этим</body>
.По крайней мере, до CSS 3 включительно, вы не можете так выбрать. Но сейчас это можно сделать довольно легко в JavaScript, вам просто нужно добавить немного ванильного JavaScript, обратите внимание, что код довольно короткий.
источник
CSS 4 будет интересен, если он добавит несколько хуков в ход назад . До тех пор можно (хотя и не желательно) использовать
checkbox
и / илиradio
input
s, чтобы нарушить обычный способ, которым вещи связаны, и через это также позволяет CSS работать за пределами своей обычной области ...... довольно грубо , но только с помощью CSS и HTML можно коснуться и снова коснуться всего, кроме
body
и:root
где угодно, связав свойстваid
и / с и триггеры ; Скорее всего, кто-то покажет, как снова прикоснуться к ним.for
radio
checkbox
input
label
Я не уверен насчет других
:
селекторов, но я:checked
для pre-CSS 3. Если я правильно помню, это было что-то вроде,[checked]
поэтому вы можете найти его в приведенном выше коде, например,... но для таких вещей, как
::after
и:hover
, я совсем не уверен, в какой версии CSS они впервые появились.Это все заявлено, пожалуйста, никогда не используйте это в производстве, даже в гневе. Как шутка, или, другими словами, просто потому, что что-то можно сделать, не всегда означает, что это должно быть сделано .
источник
Нет, вы не можете выбрать родителя только в CSS.
Но поскольку у вас уже есть
.active
класс, было бы легче переместить этот класс вli
(вместоa
). Таким образом, вы можете получить доступ к какli
иa
через только CSS.источник
Изменение родительского элемента на основе дочернего элемента в настоящее время может произойти только тогда, когда у нас есть
<input>
элемент внутри родительского элемента. Когда ввод получает фокус, его соответствующий родительский элемент может быть затронут с помощью CSS.Следующий пример поможет вам понять использование
:focus-within
CSS.источник
Это возможно с помощью амперсанда в Sass :
CSS-вывод:
источник
h3
родителя, который был целью. Это выберетh3
s, которые являются потомками.some-parent-selector
.Я бы нанял немного кода JavaScript, чтобы сделать это. Например, в React, когда вы выполняете итерацию по массиву, добавьте другой класс к родительскому компоненту, который указывает, что он содержит ваши дочерние элементы:
А потом просто:
источник
Отсутствует родительский селектор css (и, следовательно, в препроцессорах css) из-за того, что «Основные причины, по которым рабочая группа CSS ранее отклоняла предложения для родительских селекторов, связаны с производительностью браузера и проблемами с добавочным рендерингом».
источник