Как я могу указать стили для созданного Kendo.Window () элемента div, расположенного прямо над определенным? [dубликат]

Скрывать часы в текущем сеансе с помощью этой команды:

dbus-send --session --type=method_call --dest=org.gnome.Shell /org/gnome/Shell org.gnome.Shell.Eval string:'Main.panel._dateMenu.actor.hide();'
2526
задан 12 November 2016 в 03:15

24 ответа

Как уже упоминалось несколькими другими, нет способа стилизовать родительский элемент элемента, используя только CSS, но следующее работает с jQuery:

$("a.active").parents('li').css("property", "value");
76
ответ дан 15 August 2018 в 16:40
  • 1
    Селектор < не существует (проверяется с помощью jQuery 1.7.1). – Rob W 23 February 2012 в 23:53
  • 2
    Возможно, что < -syntax работал в 2009 году, но я обновил его (на 2013 год). – Alastair 2 May 2013 в 10:10
  • 3
    Еще лучше, используйте встроенный селектор :has() jQuery : $("li:has(a.active)").css("property", "value");. Он читается аналогично предложенному CSS 4 ! селектору. См. Также: :parent селектор , .parents() метод , .parent() метод . – Rory O'Kane 9 May 2013 в 03:12
  • 4
    И вместо того, чтобы использовать .css("property", "value") для стилирования выбранных элементов, вы обычно должны .addClass("someClass") и иметь в своем CSS .someClass { property: value } ( через ). Таким образом, вы можете обозначить стиль с полной мощью CSS и любыми препроцессорами, которые вы используете. – Rory O'Kane 9 May 2013 в 03:20

Короткий ответ НЕТ, на этом этапе в CSS нет parent selector, но если вы все равно не хотите менять элементы или классы, второй вариант использует JavaScript, что-то вроде этого: [ ! d0]

var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));

activeATag.map(function(x) {
  if(x.parentNode.tagName === 'LI') {
    x.parentNode.style.color = 'red'; //your property: value;
  }
});

или более короткий путь, если вы используете NO в своем приложении:

$('a.active').parents('li').css('color', 'red'); //your property: value;
3
ответ дан 15 August 2018 в 16:40

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

a.active h1 {color:red;}

a.active:hover h1 {color:green;}

a.active h2 {color:blue;}

a.active:hover h1 {color:yellow;}

Таким образом вы можете изменить стиль во множестве внутренних тегов на основе опрокидывания родительского элемента.

39
ответ дан 15 August 2018 в 16:40
  • 1
    сделав элемент display: block, вы можете его стиль, чтобы он соответствовал всей области li. если вы можете объяснить, какой стиль вы ищете, возможно, я смогу помочь с решением. – Josh 19 June 2009 в 02:53
  • 2
    Это верно, но ограничивает код разметки в теге a только для определенных элементов, если вы хотите соответствовать стандартам XHTML. Например, вы не можете использовать div внутри a, не получая предупреждения о нарушении схемы. – Ivaylo Slavov 24 July 2012 в 23:22
  • 3
    Тотали справа Ивайло! & Quot; & Quot; является неблокирующим элементом, поэтому он не может использовать в нем элементы блока. – riverstorm 13 December 2012 в 04:34
  • 4
    В HTML5 прекрасно вставлять элементы блока внутри ссылок. – Matthew James Taylor 6 April 2014 в 12:47
  • 5
    @MatthewJamesTaylor и семантически это совершенно неправильно – Vangel Tzo 10 April 2014 в 19:39
  • 6
    ... если бы это было семантически неправильно, они бы не допустили его в HTML5, где это было не раньше. – BoltClock♦ 28 December 2015 в 19:54
  • 7
    это на самом деле простое и изящное решение, и во многих случаях имеет смысл установить класс в родительском. – Ricardo 19 March 2016 в 03:17

Селектор CSS «General Sibling Combinator» может быть использован для того, что вам нужно:

E ~ F {
    property: value;
}

Это соответствует любому элементу F, которому предшествует элемент E.

26
ответ дан 15 August 2018 в 16:40
  • 1
    Это неправильный ответ, но спасибо, что напомнили нам об этом селекторе – Dan 23 September 2011 в 00:25
  • 2
    Это просто селектор, он не является дочерним, родительским ... на самом деле не отвечает на вопрос помощника – Alireza 16 June 2017 в 21:08

Я знаю, что OP искал CSS-решение, но его легко достичь с помощью jQuery. В моем случае мне нужно было найти родительский тег <ul> для тега <span>, содержащегося в дочернем <li>. В jQuery есть селектор :has, поэтому можно определить родителя для его дочерних элементов:

$("ul:has(#someId)")

выберет элемент ul с дочерним элементом с id someId. Или, чтобы ответить на исходный вопрос, что-то вроде следующего должно сделать трюк (непроверенный):

$("li:has(.active)")
17
ответ дан 15 August 2018 в 16:40
  • 1
    Или используйте $yourSpan.closest("ul"), и вы получите родительский UL вашего элемента span. Тем не менее, ваш ответ полностью оффтопический имхо. Мы можем ответить на все вопросы, связанные с CSS, с помощью решения jQuery. – Robin van Baalen 18 July 2013 в 22:40
  • 2
    Как указано в других ответах, нет способа сделать это с помощью CSS 2. Учитывая это ограничение, ответ, который я дал, является тем, который я знаю, является эффективным и является самым простым способом ответа на вопрос, используя javascript imho. – David Clarke 19 December 2015 в 23:27
  • 3
    С учетом ваших приоритетов некоторые люди согласны с вами. Но единственный ответ остается принятым; простой и простой ", он не может быть выполнен так, как вы этого хотите". Если вопрос заключается в том, как архивировать 60 миль в час на велосипеде, и вы отвечаете «простым»; садиться в машину и попадать в газ. ", это еще не ответ. Отсюда мой комментарий. – Robin van Baalen 19 December 2015 в 23:36
  • 4
    Такой подход сделал бы почти бесполезным. Я ищу SO для решения проблем, а не для поиска «только ответа». не решает проблему. Вот почему SO так потрясающе, потому что всегда есть несколько способов кожи кошки. – David Clarke 20 December 2015 в 22:35

По крайней мере, вплоть до CSS3 и включая CSS3, вы не можете выбрать это. Но это может быть сделано довольно легко в настоящее время в JS, вам просто нужно добавить немного ванильного JavaScript, обратите внимание, что код довольно короткий.

      cells = document.querySelectorAll('div');
              [].forEach.call(cells, function (el) {
              //console.log(el.nodeName)
                if (el.hasChildNodes() && el.firstChild.nodeName=="A") {
                console.log(el)};
            });
            <div>Peter</div>
            <div><a href="#">Jackson link</a></div>
            <div>Philip</div>
            <div><a href="#">Pullman link</a></div>

0
ответ дан 15 August 2018 в 16:40

Это наиболее обсуждаемый аспект спецификации Selectors Level 4. С помощью этого селектора будет возможность стилизовать элемент в соответствии с его дочерним элементом, используя восклицательный знак после данного селектора (!).

Например:

body! a:hover{
   background: red;
}

установит красный цвет фона, если пользователь наводится на любой якорь.

Но нам нужно ждать реализации браузеров: (

15
ответ дан 15 August 2018 в 16:40
  • 1
    К сожалению, но теперь эта функция не соответствует спецификации, как я знаю ... – Qwertiy 20 November 2015 в 16:06
a ~ li {
    background: red
}

В css3 добавлен новый селектор, поэтому, если html выглядит так:

<ul>
  <li>
    <a>Some text</a>
  </li>
</ul>

Фактически вы можете воздействовать на родителя элемента «a», который является «li «

0
ответ дан 15 August 2018 в 16:40
  • 1
    Он работает по-другому. Ваш css выбирает все элементы 'li', которым предшествует элемент 'a' на том же уровне. Поэтому 'a' получает красный фон только в этом примере: & lt; ul & gt; & Lt; & Li GT; & Lt; & Li GT; & эль л; / & Li GT; & lt; a & gt; Некоторый текст & lt; / a & gt; & Л; / & Li GT; & Lt; / мкл & GT; – indreed 22 May 2018 в 12:47

Нет, вы не можете выбрать родителя только в css.

Но поскольку у вас уже есть класс .active, не было бы легче перенести этот класс на li (вместо этого из a)? Таким образом, вы можете получить доступ только к li и a только через css.

0
ответ дан 15 August 2018 в 16:40

Попробуйте переключить a на block дисплей, а затем используйте любой желаемый стиль. Элемент a заполнит элемент li, и вы сможете изменить его внешний вид по своему желанию. Не забудьте установить li padding на 0.

li {
  padding: 0;
  overflow: hidden;
}
a {
  display: block;
  width: 100%;
  color: ..., background: ..., border-radius: ..., etc...
}
a.active {
  color: ..., background: ...
}
25
ответ дан 15 August 2018 в 16:40

Кто-нибудь предложил что-то подобное? Просто идея горизонтального меню ...

часть HTML

<div class='list'>
  <div class='item'>
    <a>Link</a>
  </div>
  <div class='parent-background'></div>
  <!-- submenu takes this place -->
</div>

часть CSS

/* hide parent backgrounds... */
.parent-background {
  display: none; }

/* ... and show it when hover on children */
.item:hover + .parent-background {
  display: block;
  position: absolute;
  z-index: 10;
  top: 0;
  width: 100%; }

Обновлена ​​демо-версия и остальная часть кода [ ! d3]

Обновлено демо и остальная часть кода как использовать его с текстовыми входами - выберите родительский набор полей

9
ответ дан 15 August 2018 в 16:40
  • 1
    Мне не совсем ясно, как вы хотите обобщить это на некоторые / многие / большинство случаев использования родительского селектора или даже на то, какие именно части этого CSS делают. Можете ли вы добавить подробное объяснение? – Nathan Tuggy 28 October 2015 в 11:57
  • 2
    Я не пытался применять это в реальных сценариях, поэтому я говорю «Не для производства». Но я думаю, что он может применяться к 2-уровневому меню только с фиксированной шириной элемента. & quot; какие части этого CSS делают то, что & quot; - .test-sibling - это фактически фон родительского элемента (последняя строка CSS). – Ilya B. 28 October 2015 в 12:08
  • 3
    Добавлено объяснение (css-раздел jsfiddle, начиная с «ГЛАВНАЯ ЧАСТЬ») ... И я ошибся - может быть любое количество подуровней. – Ilya B. 28 October 2015 в 16:59

Я не думаю, что вы можете выбрать родителя только в css.

Но поскольку у вас уже есть класс .active, не было бы легче перенести этот класс на li (вместо a)? Таким образом, вы можете получить доступ только к li и a только через css.

120
ответ дан 15 August 2018 в 16:40
  • 1
    Вы не можете переместить псевдоселектор в элемент списка, так как он не является настраиваемым элементом. Он использует активный переключатель, поэтому, когда он активен, он хочет, чтобы элемент списка был затронут. Элементы списка никогда не будут в активном состоянии. В стороне, к сожалению, такой селектор не существует. Получение чистого CSS-меню, которое будет полностью доступным для клавиатуры, кажется невозможным без него (с помощью селекторов для сиблинга вы можете создавать подменю, созданные с помощью вложенных списков, чтобы отображаться, но как только список получает фокус, он снова становится скрытым). Если есть какие-либо решения только для CSS для этой конкретной конуны – user 26 August 2011 в 18:46
  • 2
    @Dominic Aquilina Взгляните на вопрос, OP использует класс, а не псевдоселектор. – jeroen 26 August 2011 в 19:34

Вот взломать с помощью pointer-events с hover:

<!doctype html>
<html>
	<head>
		<title></title>
		<style>
/* accessory */
.parent {
	width: 200px;
	height: 200px;
	background: gray;
}
.parent, 
.selector {
	display: flex;
	justify-content: center;
	align-items: center;
}
.selector {
	cursor: pointer;
	background: silver;
	width: 50%;
	height: 50%;
}
		</style>
		<style>
/* pertinent */
.parent {
	background: gray;
	pointer-events: none;
}
.parent:hover {
	background: fuchsia;
}
.parent 
.selector {
	pointer-events: auto;
}
		</style>
	</head>
	<body>
		<div class="parent">
			<div class="selector"></div>
		</div>
	</body>
</html>

0
ответ дан 15 August 2018 в 16:40

Насколько мне известно, не в CSS 2. CSS 3 имеет более надежные селектор, но не всегда реализуется во всех браузерах. Даже с улучшенными селекторами я не верю, что он выполнит именно то, что вы указали в своем примере.

19
ответ дан 15 August 2018 в 16:40

Существует плагин, который расширяет CSS, чтобы включить некоторые нестандартные функции, которые действительно могут помочь при разработке веб-сайтов. Это называется EQCSS.

Одна из вещей, добавленных EQCSS, - это родительский селектор. Он работает во всех браузерах IE8 и выше. Вот формат:

@element 'a.active' {
  $parent {
    background: red;
  }
}

Итак, здесь мы открыли запрос элемента для каждого элемента a.active, а для стилей внутри этого запроса такие вещи, как $parent, имеют смысл, потому что есть контрольная точка , Браузер может найти родителя, потому что он очень похож на parentNode в JavaScript.

EQCSS и еще одна демонстрация $parent, которая работает в IE8, а также скриншот в Если у вас нет IE8 для тестирования.

EQCSS также включает в себя еще одну демонстрацию $parent, которая работает в IE8 $prev для элемента перед выбранным элементом, $this только для тех элементов, которые соответствуют запросу элемента и т. д.

10
ответ дан 15 August 2018 в 16:40
  • 1
    [F1] определяется требованиями веб-разработчиков, независимо от того, будет ли он в спецификации решаться другими факторами. – nicodemus13 15 May 2014 в 14:04

Вы можете использовать этот скрипт.

*! > input[type=text] { background: #000; }

Это выберет любого родителя текстового ввода. Но подождите, еще многое. Если вы хотите, вы можете выбрать указанного родителя:

.input-wrap! > input[type=text] { background: #000; }

или выбрать его, когда он активен:

.input-wrap! > input[type=text]:focus { background: #000; }

Посмотрите этот HTML:

<div class="input-wrap">
    <input type="text" class="Name"/>
    <span class="help hide">Your name sir</span>
</div>

вы можете выбрать span.help, когда активен input и показать его:

.input-wrap! .help > input[type=text]:focus { display: block; }

Есть еще много возможностей; просто проверьте документацию плагина.

BTW, он работает в IE.

100
ответ дан 15 August 2018 в 16:40
  • 1
    предположим, что использование jquery patent() будет быстрее. Однако это тестирование потребности – Dan 23 September 2011 в 00:30
  • 2
    @Idered Не удается, если у вас есть объявление CSS объекта Selector без родительского селектора (только #a! вызывает ошибку, #a! p работает), поэтому другие не будут работать ни из-за Uncaught TypeError: Cannot call method 'split' of undefined: см. [D0] jsfiddle.net/HerrSerker/VkVPs – HerrSerker 16 April 2013 в 20:33
  • 3
    @HerrSerker Я думаю #a! является недопустимым селектором, что он должен выбрать? – Idered 17 April 2013 в 18:41
  • 4
    @Idered, я не знаю. Спецификация не говорит, что это незаконно. #a! должен выбрать сам. По крайней мере, у них не должно быть ошибок в JavaScript – HerrSerker 17 April 2013 в 20:31
  • 5
    По моему комментарию к принятому ответу, похоже, что полиполк может потребоваться даже в ближайшем будущем, потому что предметный индикатор никогда не может быть реализован браузерами в CSS. – BoltClock♦ 2 May 2013 в 20:35

Технически нет прямого способа сделать это, однако вы можете сортировать это с помощью jquery или javascript.

Howeve, вы также можете сделать что-то подобное.

a.active h1 {color:blue;}
a.active p {color: green;}

jQuery

$("a.active").parents('li').css("property", "value"); 

Если вы хотите достичь этого, используя jQuery, здесь приведена ссылка для родительского селектора jQuery

7
ответ дан 15 August 2018 в 16:40

Нет родительского селектора; так же, как нет предыдущего селектора. Одна из веских причин не иметь этих селекторов заключается в том, что браузер должен пройти через всех дочерних элементов элемента, чтобы определить, следует ли применять класс. Например, если вы написали:

body:contains-selector(a.active) { background: red; }

Затем браузеру придется подождать, пока он не загрузится, и все разыгрывается до </body>, чтобы определить, должна ли страница быть красной или нет.

В этой статье Почему у нас нет родительского селектора, это подробно объясняет.

44
ответ дан 15 August 2018 в 16:40
  • 1
    поэтому сделайте браузер более быстрым. Интернет быстрее. этот селектор определенно необходим, и причина его нецелесообразности, к сожалению, потому, что мы живем в медленном, примитивном мире. – vsync 20 February 2014 в 03:33
  • 2
    Фактически, селектор сделает очень быстрый просмотр браузера медленным. – Salman A 20 February 2014 в 10:09
  • 3
    Я верю, что разработчики браузеров придумают реализацию, которая (по крайней мере) так же быстро, как версия javascript, которая в любом случае используется в любом случае. – Marc.2377 9 June 2018 в 03:15

W3C исключил такой селектор из-за огромного воздействия производительности на браузер.

6
ответ дан 15 August 2018 в 16:40
  • 1
    ложный. потому что DOM - это дерево, они должны перейти к родительскому элементу, прежде чем попасть к нему, поэтому просто верните один узел. o.o – NullVoxPopuli 10 November 2011 в 22:56
  • 2
    Селекторы CSS представляют собой queue , поэтому порядок выбора оценивается, а не иерархия документа XPath или DOM. – Paul Sweatte 18 August 2012 в 21:14
  • 3
    @rgb По крайней мере, это то, что нам сказали. – HerrSerker 16 April 2013 в 20:35

Псевдоэлемент :focus-within позволяет выбрать родителя, если у потомка есть фокус.

Элемент может быть сфокусирован, если он имеет атрибут tabindex.

Поддержка браузера для фокуса внутри

Поддержка браузера для фокусировки внутри

Пример

.click {
  cursor: pointer;
}

.color:focus-within .change {
  color: red;
}

.color:focus-within p {
  outline: 0;
}
<div class="color">
  <p class="change" tabindex="0">
    I will change color
  </p>
  <p class="click" tabindex="1">
    Click me
  </p>
</div>

8
ответ дан 15 August 2018 в 16:40
  • 1
    Это отлично работает в моем случае, спасибо! Просто нет, пример будет более иллюстративным, если вы измените цвет на родителя, а не на сестру, это заменит .color:focus-within .change на .color:focus-within. В моем случае я использую bootstrap nav-bar, которые добавляют класс к дочерним элементам, когда они активны, и я хочу добавить класс в родительский .nav-bar. Я думаю, что это довольно распространенный сценарий, когда у меня есть разметка, но компонент css + js является загрузочным (или другим), поэтому я не могу изменить поведение. Хотя я могу добавить tabindex и использовать этот css. Благодаря! – cancerbero 29 June 2018 в 18:13

Это возможно с помощью амперсанда в SASS:

h3
  font-size: 20px
  margin-bottom: 10px
  .some-parent-selector &
    font-size: 24px
    margin-bottom: 20px

вывод CSS:

h3 {
  font-size: 20px;
  margin-bottom: 10px;
}
.some-parent-selector h3 {
  font-size: 24px;
  margin-bottom: 20px;
}
0
ответ дан 15 August 2018 в 16:40
  • 1
    это правда, но только если вы знаете селектор заранее. – Shahar 9 August 2017 в 11:02

Хотя в настоящее время в стандартном CSS нет родительского селектора, я работаю над (личным) проектом под названием ax (то есть, расширенный синтаксический селектор CSS / ACSSSS), который среди семи новых селекторов включает в себя:

- непосредственный родительский селектор < (который позволяет противоположный выбор >) выбрать любой предка селектор ^ (который позволяет сделать противоположный выбор [SPACE])

ax в настоящее время находится на относительно ранней стадии развития BETA.

См. демонстрацию здесь:

http://rounin.co.uk/projects/axe/axe2 .html

(сравните два списка слева в стандартном селекторе и два списка справа в стиле с селекторами тонов)

1
ответ дан 15 August 2018 в 16:40
  • 1
    В настоящее время проект находится на ранней стадии Бета. Вы можете (по крайней мере в настоящее время) активировать селектор тонов в стилях CSS, включив <script src="https://rouninmedia.github.io/axe/axe.js"></script> в самом конце вашего html-документа непосредственно перед </body>. – Rounin 12 July 2017 в 19:40

В CSS мы можем каскадировать свойства по иерархии, но не в противоположном направлении. Чтобы изменить родительский стиль в дочернем событии, вероятно, используйте jQuery.

$el.closest('.parent').css('prop','value');
-1
ответ дан 15 August 2018 в 16:40

да: :has()

поддержка браузера: :has()

8
ответ дан 15 August 2018 в 16:40

Другие вопросы по тегам:

Похожие вопросы: