Meu código é:
p {
position: relative;
background-color: blue;
}
p:before {
content: '';
position: absolute;
left:100%;
width: 10px;
height: 100%;
background-color: red;
}
Por favor, veja este violino: http://jsfiddle.net/ZWw3Z/5/
Gostaria de acionar um evento de clique apenas no pseudoelemento (o bit vermelho). Ou seja, não quero que o evento click seja acionado no bit azul.
javascript
jquery
css
Randomblue
fonte
fonte
Respostas:
Isso não é possível; os pseudoelementos não fazem parte do DOM, portanto, você não pode vincular nenhum evento diretamente a eles, apenas os elementos pai.
Se você precisar ter um manipulador de cliques apenas na região vermelha, precisará criar um elemento filho, como a
span
, colocá-lo logo após a<p>
tag de abertura , aplicar estilos aop span
invés dep:before
e vincular a ele.fonte
pointer-events
valores para o próprio e seu elemento pseudo elemento: jsfiddle.net/ZWw3Z/70pointer-events
não parece fazer o truque para o IE9, de acordo com o jsfiddel publicado por Ilya.Na verdade, é possível. Você pode verificar se a posição clicada estava fora do elemento, pois isso só acontecerá se
::before
ou::after
foi clicada.Este exemplo verifica apenas o elemento à direita, mas isso deve funcionar no seu caso.
JSFiddle
fonte
:after
é necessário, verifique seif (e.clientX > span.offsetLeft + span.offsetHeight)
esses navegadores não possuem ae.offsetX
propriedade. Fiddle: jsfiddle.net/Noitidart/wC2p7/18$('a:after').on('click', fn)
, mas eu realmente não vejo isso acontecendo: p::before
ou::after
estiver posicionado dentro do elemento.Nos navegadores modernos, você pode tentar com a propriedade css pointer-events (mas leva à impossibilidade de detectar eventos do mouse no nó pai):
Quando o destino do evento é o seu elemento "p", você sabe que é o seu "p: antes".
Se você ainda precisar detectar eventos de mouse no p principal, considere a possibilidade de modificar sua estrutura HTML. Você pode adicionar uma tag de extensão e o seguinte estilo:
Os destinos do evento agora são os elementos "span" e "p: before".
Exemplo sem jquery: http://jsfiddle.net/2nsptvcu/
Exemplo com jquery: http://jsfiddle.net/0vygmnnb/
Aqui está a lista de navegadores que suportam eventos-ponteiro: http://caniuse.com/#feat=pointer-events
fonte
Minha resposta funcionará para quem quiser clicar em uma área definitiva da página. Isso funcionou para mim no meu absolutamente posicionado: depois
Graças a este artigo , percebi (com jQuery) que posso usar
e.pageY
e, eme.pageX
vez de me preocupare.offsetY/X
ee.clientY/X
emitir problemas entre navegadores.Gostei dessa
event.pageY
ideia, porque sempre seria a mesma, pois era relativa ao documento . Posso compará-lo ao meu elemento pai my: after usando offset (), que retorna seu X e Y também em relação ao documento.Portanto, posso criar um intervalo de região "clicável" em toda a página que nunca muda.
Aqui está minha demo no codepen .
ou se tiver preguiça de codificar, aqui está o JS:
* Eu só me importei com os valores Y do meu exemplo.
fonte
Isso funciona para mim:
fonte
Resposta curta:
Eu fiz isso. Eu escrevi uma função para uso dinâmico para todas as pessoas pequenas por aí ...
Exemplo de trabalho que é exibido na página
Exemplo de Trabalho Registrando no Console
Resposta longa:
... Ainda fiz isso.
Levei um tempo para fazê-lo, pois um elemento psuedo não está realmente na página. Embora algumas das respostas acima funcionem em ALGUNS cenários, TODAS elas não são dinâmicas e funcionam em um cenário no qual um elemento é inesperado em tamanho e posição (como elementos posicionados absolutos sobrepondo uma parte do elemento pai). O meu não.
Uso:
Como funciona:
Ele agarra as posições de altura, largura, superior e esquerda (com base na posição da borda da janela) do elemento pai e agarra as posições de altura, largura, parte superior e esquerda (com base na borda do contêiner pai ) e compara esses valores para determinar onde o elemento psuedo está na tela.
Em seguida, ele compara onde está o mouse. Enquanto o mouse estiver no intervalo de variáveis recém-criado, ele retornará verdadeiro.
Nota:
É aconselhável colocar o elemento pai em RELATIVO. Se você tiver um elemento psuedo posicionado absoluto, essa função funcionará apenas se for posicionada com base nas dimensões do pai (portanto, o pai deve ser relativo ... talvez fixo ou fixo funcione também ... eu não sei).
Código:
Apoio, suporte:
Eu não sei .... parece, ou seja, é burro e gosta de retornar auto como um valor calculado às vezes. Parece funcionar bem em todos os navegadores, se as dimensões estiverem definidas em CSS. Então ... defina sua altura e largura nos seus elementos psuedo e mova-os apenas com a parte superior e a esquerda. Eu recomendo usá-lo em coisas que você não concorda. Como uma animação ou algo assim. Chrome funciona ... como de costume.
fonte
event
é passado por uma função de manipulador de eventos toda vez que um evento é disparado. Como clicar ou digitar. Quando usamos a.click()
função, estamos aguardando o evento click. Poderíamos especificar e dizer.click(function(e){...})
para tornar o evento,e
mas também é aceitável usar apenasevent
.event
é indefinido.event
é definido. Porém, ele funciona no Chrome e Edge.Adicionar condição no evento Click para restringir a área clicável.
DEMO
fonte
Esta é uma resposta editada por Fasoeu com as últimas CSS3 e JS ES6
Demonstração editada sem usar o JQuery.
Exemplo mais curto de código:
Explicação:
pointer-events
detecção de eventos de controle, removendo receber eventos de alvo, mas continue a receber a partir de pseudo-elementos tornam possível clicar::before
e::after
e você sempre saberá o que você está clicando no pseudo-elemento, no entanto, se você ainda precisa clicar, você coloca todos os conteúdos no elemento aninhado (span
no exemplo), mas como não queremos aplicar estilos adicionais,display: contents;
torne-se uma solução muito útil e suportada pela maioria dos navegadores .pointer-events: none;
como já mencionado no post original, também amplamente suportado .A parte JavaScript também usou amplamente o suporte
Array.from
efor...of
, no entanto, não é necessário usar o código.fonte
Nenhuma dessas respostas é confiável e a minha não será muito mais confiável.
Advertências à parte, se você entrar no cenário de sorte em que o elemento que está tentando clicar não possui preenchimento (de modo que todo o espaço "interno" do elemento seja completamente coberto por subelementos), então você pode verificar o destino do evento click no próprio contêiner. Se corresponder, significa que você clicou no elemento: before ou: after.
Obviamente, isso não seria viável nos dois tipos (antes e depois), mas eu o implementei como correção de velocidade / hack e está funcionando muito bem, sem muitas verificações de posição, que podem ser imprecisas dependendo de um milhão de fatores diferentes .
fonte
Não, mas você pode fazer assim
No arquivo html, adicione esta seção
Em css você pode fazer assim
} Espero que ajude você
fonte