Como seleciono o <li>
elemento pai direto do elemento âncora?
Como exemplo, meu CSS seria algo como isto:
li < a.active {
property: value;
}
Obviamente, existem maneiras de fazer isso com JavaScript, mas espero que exista algum tipo de solução alternativa nativa para o CSS Nível 2.
O menu que estou tentando estilizar está sendo exibido por um CMS, por isso não posso mover o elemento ativo para o <li>
elemento ... (a menos que eu tema o módulo de criação de menus que preferiria não fazer).
Alguma ideia?
fonte
!
agora:The subject of the selector can be explicitly identified by appending an exclamation mark (!) to one of the compound selectors in a selector.
$
anexo parecia melhor para mim ... o anexo!
pode ser ignorado mais facilmente.:has()
pseudo-todo mundo que conhece e ama o jQuery. O ED mais recente removeu todas as referências ao indicador de assunto e o substituiu pelo:has()
pseudo. Não sei as razões exatas, mas o CSSWG realizou uma pesquisa há algum tempo e os resultados devem ter influenciado essa decisão. É mais provável a compatibilidade com o jQuery (para que ele possa alavancar o qSA sem modificações) e porque a sintaxe do indicador de assunto se mostrou muito confusa.Eu não acho que você pode selecionar o pai apenas em CSS.
Mas como você já parece ter uma
.active
classe, seria mais fácil movê-la para oli
(em vez dea
). Dessa forma, você pode acessar apenas o CSSli
e oa
CSS via.fonte
Você pode usar este script :
Isso selecionará qualquer pai de uma entrada de texto. Mas espere, ainda há muito mais. Se desejar, você pode selecionar um pai especificado:
Ou selecione-o quando estiver ativo:
Confira este HTML:
Você pode selecionar isso
span.help
quandoinput
estiver ativo e mostrá-lo:Existem muito mais recursos; basta verificar a documentação do plugin.
BTW, ele funciona no Internet Explorer.
fonte
patent()
seria mais rápido. Isso precisa ser testado, no entanto#a!
si só lança um erro,#a! p
funciona) e, portanto, os outros também não funcionam por causa deUncaught TypeError: Cannot call method 'split' of undefined
: consulte jsfiddle.net/HerrSerker/VkVPsConforme mencionado por alguns outros, não há como estilizar os pais de um elemento usando apenas CSS, mas o seguinte funciona com o jQuery :
fonte
<
seletor não existe (verificado usando o jQuery 1.7.1).<
sintaxe tenha funcionado em 2009, mas eu a atualizei (para 2013).:has()
seletor :$("li:has(a.active)").css("property", "value");
. É semelhante ao!
seletor proposto pelo CSS 4 . Veja também::parent
seletor ,.parents()
método ,.parent()
método ..css("property", "value")
para estilizar os elementos selecionados, você deve.addClass("someClass")
e deve ter no seu CSS.someClass { property: value }
( via ). Dessa forma, você pode anotar o estilo com todo o poder do CSS e de qualquer pré-processador que estiver usando.Sim:
:has()
Suporte do navegador: nenhum
fonte
Não há seletor pai; do jeito que não há seletor de irmãos anterior. Um bom motivo para não ter esses seletores é porque o navegador precisa percorrer todos os filhos de um elemento para determinar se uma classe deve ou não ser aplicada. Por exemplo, se você escreveu:
Em seguida, o navegador terá que esperar até carregar e analisar tudo até
</body>
determinar se a página deve estar vermelha ou não.O artigo Por que não temos um seletor pai explica isso em detalhes.
fonte
Não há uma maneira de fazer isso no CSS 2. Você pode adicionar a classe
li
e referenciara
:fonte
Tente mudar
a
parablock
exibição e, em seguida, use o estilo desejado. Oa
elemento preencherá oli
elemento e você poderá modificar sua aparência conforme desejar. Não se esqueça de definir oli
preenchimento para 0.fonte
O seletor CSS " General Sibling Combinator " pode ser usado para o que você deseja:
Isso corresponde a qualquer
F
elemento que é precedido por umE
elemento.fonte
Não no CSS 2, tanto quanto eu sei. O CSS 3 possui seletores mais robustos, mas não é implementado de forma consistente em todos os navegadores. Mesmo com os seletores aprimorados, não acredito que ele cumpra exatamente o que você especificou em seu exemplo.
fonte
Eu sei que o OP estava procurando uma solução CSS, mas é simples de conseguir usando o jQuery. No meu caso, eu precisava encontrar a
<ul>
tag pai para uma<span>
tag contida no filho<li>
. O jQuery possui o:has
seletor, portanto, é possível identificar um pai pelos filhos que ele contém:selecionará o
ul
elemento que possui um elemento filho com o ID someId . Ou, para responder à pergunta original, algo como o seguinte deve fazer o truque (não testado):fonte
$yourSpan.closest("ul")
e você obterá o UL pai do seu elemento de amplitude. No entanto, sua resposta é imho completamente offtopic. Podemos responder a todas as perguntas de CSS com uma solução jQuery.O pseudo elemento
:focus-within
permite que um pai seja selecionado se um descendente tiver foco.Um elemento pode ser focado se tiver um
tabindex
atributo.Suporte do navegador para foco dentro
Tabindex
Exemplo
fonte
.color:focus-within .change
por.color:focus-within
. No meu caso, estou usando a barra de navegação de inicialização que adiciona a classe aos filhos quando ativo e quero adicionar uma classe ao pai .nav-bar. Eu acho que esse é um cenário bastante comum, onde eu possuo a marcação, mas o componente css + js é bootstrap (ou outro), portanto não posso alterar o comportamento. Embora eu possa adicionar tabindex e usar este css. Obrigado!Esse é o aspecto mais discutido da especificação Seletores de nível 4 . Com isso, um seletor poderá estilizar um elemento de acordo com seu filho, usando um ponto de exclamação após o seletor fornecido (!).
Por exemplo:
definirá uma cor de fundo vermelha se o usuário passar o mouse sobre qualquer âncora.
Mas temos que esperar pela implementação dos navegadores :(
fonte
Você pode tentar usar o hiperlink como pai e alterar os elementos internos ao passar o mouse. Como isso:
Dessa forma, você pode alterar o estilo em várias tags internas, com base na rolagem do elemento pai.
fonte
a
tag a apenas alguns elementos, se você deseja estar em conformidade com os padrões XHTML. Por exemplo, você não pode usar umdiv
interiora
, sem receber um aviso de violação do esquema.Atualmente, não há seletor de pais e nem está sendo discutido em nenhuma das palestras do W3C. Você precisa entender como o CSS é avaliado pelo navegador para realmente entender se precisamos ou não.
Há muitas explicações técnicas aqui.
Jonathan Snook explica como o CSS é avaliado .
Chris Coyier nas conversações do seletor de pais .
Harry Roberts novamente ao escrever seletores CSS eficientes .
Mas Nicole Sullivan tem alguns fatos interessantes sobre tendências positivas .
Essas pessoas são todas de primeira classe no campo do desenvolvimento de front-end.
fonte
need
é definido pelos requisitos dos desenvolvedores da web, se a inclusão nas especificações é decidida por outros fatores.Apenas uma ideia para o menu horizontal ...
Parte do HTML
Parte do CSS
Demonstração atualizada e o restante do código
Outro exemplo de como usá-lo com entradas de texto - selecione pai fieldset
fonte
Aqui está um hack usando
pointer-events
comhover
:fonte
Há um plug-in que estende o CSS para incluir alguns recursos não-padrão que podem realmente ajudar no design de sites. Chama-se EQCSS .
Uma das coisas que o EQCSS adiciona é um seletor pai. Funciona em todos os navegadores, Internet Explorer 8 e superior. Aqui está o formato:
Então, aqui abrimos uma consulta de elemento em cada elemento
a.active
e, para os estilos dentro dessa consulta, coisas como$parent
fazem sentido, porque há um ponto de referência. O navegador pode encontrar o pai, porque é muito semelhante aoparentNode
JavaScript.Aqui está uma demonstração
$parent
e outra$parent
demonstração que funciona no Internet Explorer 8 , bem como uma captura de tela, caso você não tenha o Internet Explorer 8 para testar. .O EQCSS também inclui meta-seletores :
$prev
para o elemento antes de um elemento selecionado e$this
apenas para aqueles que correspondem a uma consulta de elemento, entre outros.fonte
Agora é 2019, e a versão mais recente do CSS Nesting Module tem algo parecido com isto. Introdução
@nest
às regras.(Copie e cole a partir do URL acima).
Exemplo de seletores válidos sob esta especificação:
fonte
Tecnicamente, não há maneira direta de fazer isso. No entanto, você pode resolver isso com jQuery ou JavaScript.
No entanto, você pode fazer algo assim também.
jQuery
Se você deseja conseguir isso usando o jQuery, aqui está a referência para o seletor pai do jQuery .
fonte
O W3C excluiu esse seletor por causa do enorme impacto no desempenho que teria em um navegador.
fonte
A resposta curta é NÃO ; não temos um
parent selector
neste estágio no CSS, mas se você não precisar trocar os elementos ou classes de qualquer maneira, a segunda opção será usar JavaScript. Algo assim:Ou uma maneira mais curta se você usar o jQuery em seu aplicativo:
fonte
Embora atualmente não exista um seletor pai no CSS padrão, estou trabalhando em um projeto (pessoal) chamado ax (ie. Sintaxe de seletor de CSS aumentada / ACSSSS ) que, entre seus 7 novos seletores, inclui ambos:
<
(que permite a seleção oposta a>
)^
(que permite a seleção oposta a[SPACE]
)ax está atualmente em um estágio BETA relativamente inicial de desenvolvimento.
Veja uma demonstração aqui:
http://rounin.co.uk/projects/axe/axe2.html
(compare as duas listas à esquerda com seletores padrão e as duas listas à direita com seletores de machados)
fonte
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
no final do seu documento html, pouco antes</body>
.Pelo menos até e incluindo o CSS 3, você não pode selecionar assim. Mas isso pode ser feito com muita facilidade hoje em dia no JavaScript, você só precisa adicionar um pouco de JavaScript vanilla, observe que o código é bastante curto.
fonte
O CSS 4 será sofisticado se adicionar alguns ganchos para andar para trás . Até então, é possível (embora não aconselhável) usar
checkbox
e / ouradio
input
s para interromper a maneira usual de conectar as coisas, e através disso também permite que o CSS opere fora do seu escopo normal ...... bastante nojento , mas com apenas CSS e HTML, é possível tocar e retocar qualquer coisa, exceto o
body
e:root
de qualquer lugar, vinculando as propriedadesid
efor
deradio
/checkbox
input
s elabel
triggers ; provavelmente alguém mostrará como retocar as pessoas em algum momento.Não tenho certeza dos outros
:
seletores, mas sim:checked
para o pré-CSS 3. Se bem me lembro, era algo parecido com o[checked]
qual você pode encontrá-lo no código acima, por exemplo,... mas para coisas como
::after
e:hover
, eu não tenho certeza de qual versão CSS as apareceu pela primeira vez.Dito isso, por favor, nunca use isso na produção, nem mesmo com raiva. Como uma piada, com certeza, ou em outras palavras, apenas porque algo pode ser feito nem sempre significa que deveria .
fonte
Não, você não pode selecionar o pai apenas em CSS.
Mas como você já parece ter uma
.active
classe, seria mais fácil movê-la para oli
(em vez dea
). Dessa forma, você pode acessar apenas o CSSli
e oa
CSS via.fonte
A alteração do elemento pai com base no elemento filho atualmente só pode acontecer quando temos um
<input>
elemento dentro do elemento pai. Quando uma entrada obtém o foco, seu elemento pai correspondente pode ser afetado usando CSS.O exemplo a seguir ajudará você a entender o uso
:focus-within
em CSS.fonte
É possível com e comercial em Sass :
Saída CSS:
fonte
h3
o pai, que era o objetivo. Isso selecionariah3
s dos quais são descendentes.some-parent-selector
.Eu contrataria algum código JavaScript para fazer isso. Por exemplo, em React ao iterar sobre uma matriz, adicione outra classe ao componente pai, o que indica que ele contém seus filhos:
E então simplesmente:
fonte
Não há seletor pai de css (e, portanto, em pré-processadores de css), devido a "Os principais motivos para o CSS Working Group rejeitar anteriormente propostas de seletores pai estão relacionados ao desempenho do navegador e a problemas de renderização incremental".
fonte