Mi código es:
p {
position: relative;
background-color: blue;
}
p:before {
content: '';
position: absolute;
left:100%;
width: 10px;
height: 100%;
background-color: red;
}
Por favor vea este violín: http://jsfiddle.net/ZWw3Z/5/
Me gustaría activar un evento de clic solo en el pseudo-elemento (el bit rojo). Es decir, no quiero que el evento click se active en el bit azul.
javascript
jquery
css
Randomblue
fuente
fuente
Respuestas:
Esto no es posible; los pseudo-elementos no son parte del DOM en absoluto, por lo que no puede vincular ningún evento directamente a ellos, solo puede vincular a sus elementos principales.
Si debe tener un controlador de clics solo en la región roja, debe crear un elemento secundario, como un
span
, colocarlo justo después de la<p>
etiqueta de apertura , aplicar estilos enp span
lugar dep:before
y vincularlo.fuente
pointer-events
valores para el elemento en sí y su pseudo elemento: jsfiddle.net/ZWw3Z/70pointer-events
no parece hacer el truco para IE9, según el jsfiddel que publicó Ilya.En realidad, es posible. Puede verificar si la posición en la que se hizo clic estaba fuera del elemento, ya que esto solo sucederá si se hizo clic
::before
o::after
se hizo clic en ella.Este ejemplo solo verifica el elemento a la derecha, pero eso debería funcionar en su caso.
JSFiddle
fuente
:after
, debe verificarif (e.clientX > span.offsetLeft + span.offsetHeight)
ya que estos navegadores no tienen lae.offsetX
propiedad. Fiddle: jsfiddle.net/Noitidart/wC2p7/18$('a:after').on('click', fn)
pero realmente no veo que eso suceda: p::before
o::after
está posicionado dentro del elemento.En los navegadores modernos , puede probar con la propiedad css de puntero-eventos (pero conduce a la imposibilidad de detectar eventos del mouse en el nodo primario):
Cuando el objetivo del evento es su elemento "p", sabe que es su "p: antes".
Si aún necesita detectar eventos del mouse en la p principal, puede considerar la posibilidad de modificar su estructura HTML. Puede agregar una etiqueta span y el siguiente estilo:
Los objetivos del evento ahora son los elementos "span" y "p: before".
Ejemplo sin jquery: http://jsfiddle.net/2nsptvcu/
Ejemplo con jquery: http://jsfiddle.net/0vygmnnb/
Aquí está la lista de navegadores que admiten eventos de puntero: http://caniuse.com/#feat=pointer-events
fuente
Mi respuesta funcionará para cualquiera que quiera hacer clic en un área definitiva de la página. Esto funcionó para mí en mi posición absoluta: después
Gracias a este artículo , me di cuenta (con jQuery) que puedo usar
e.pageY
y ene.pageX
lugar de preocuparmee.offsetY/X
ye.clientY/X
emitir problemas entre los navegadores.Me gustó esta
event.pageY
idea porque siempre sería la misma, ya que era relativa al documento . Puedo compararlo con el elemento principal de: after usando offset (), que devuelve sus X e Y también en relación con el documento.Por lo tanto, puedo crear un rango de región "cliqueable" en toda la página que nunca cambia.
Aquí está mi demo en codepen .
o si es demasiado vago para codepen, aquí está el JS:
* Solo me importaban los valores Y para mi ejemplo.
fuente
Esto funciona para mi:
fuente
Respuesta corta:
Lo hice. Escribí una función para uso dinámico para todas las personas pequeñas ...
Ejemplo de trabajo que se muestra en la página
Ejemplo de trabajo de inicio de sesión en la consola
Respuesta larga:
... Todavía lo hice.
Me tomó un tiempo hacerlo, ya que un elemento psuedo no está realmente en la página. Si bien algunas de las respuestas anteriores funcionan en ALGUNOS escenarios, TODOS no pueden ser dinámicos y funcionan en un escenario en el que un elemento tiene un tamaño y una posición inesperados (como elementos de posición absoluta que se superponen a una parte del elemento principal). La mía no.
Uso:
Cómo funciona:
Toma las posiciones de alto, ancho, superior e izquierda (según la posición alejada del borde de la ventana) del elemento principal y toma las posiciones de alto, ancho, superior e izquierda (según el borde del contenedor principal) ) y compara esos valores para determinar dónde está el elemento psuedo en la pantalla.
Luego compara dónde está el mouse. Mientras el mouse esté en el rango de variables recién creado, devuelve verdadero.
Nota:
Es aconsejable colocar el elemento padre en una posición RELATIVA. Si tiene un elemento psuedo posicionado de forma absoluta, esta función solo funcionará si se posiciona en función de las dimensiones del padre (por lo que el padre tiene que ser relativo ... tal vez pegajoso o fijo también funcionaría ...
Código:
Apoyo:
No sé ... parece que es tonto y a veces le gusta devolver auto como un valor calculado. Parece funcionar bien en todos los navegadores si las dimensiones se establecen en CSS. Entonces ... establezca su altura y ancho en sus elementos psuedo y solo muévalos con la parte superior e izquierda. Recomiendo usarlo en cosas en las que está de acuerdo con que no funcione. Como una animación o algo así. Chrome funciona ... como siempre.
fuente
event
se pasa a través de una función de controlador de eventos cada vez que se dispara un evento. Como hacer clic o escribir. Cuando usamos la.click()
función, estamos esperando el evento de clic. Podríamos especificar y decir.click(function(e){...})
que el evento sea,e
pero también es aceptable usarloevent
.event
no está definido.event
está definido. Sin embargo, funciona en Chrome y Edge.Agregar condición en el evento Click para restringir el área en la que se puede hacer clic.
MANIFESTACIÓN
fuente
Esta es la respuesta editada por Fasoeu con el último CSS3 y JS ES6
Demo editada sin usar JQuery.
El ejemplo más corto de código:
Explicación:
pointer-events
controla la detección de eventos, elimina los eventos de recepción del objetivo, pero sigue recibiendo de pseudoelementos que hacen posible hacer clic::before
y::after
siempre sabrás en qué estás haciendo clic en el pseudo-elemento, sin embargo, si aún necesitas hacer clic, pones todo el contenido en el elemento anidado (span
en el ejemplo), pero debido a que no queremos aplicar ningún estilo adicional,display: contents;
conviértase en una solución muy útil y es compatible con la mayoría de los navegadores .pointer-events: none;
como ya se mencionó en la publicación original, también es ampliamente compatible .La parte de JavaScript también se usa ampliamente
Array.from
yfor...of
, sin embargo, no es necesario usarla en el código.fuente
Ninguna de estas respuestas es confiable, y la mía no será mucho más confiable.
Dejando de lado las advertencias, si ingresa al escenario de la suerte en el que el elemento en el que intenta hacer clic no tiene relleno (de modo que todo el espacio "interno" del elemento esté completamente cubierto por subelementos), entonces usted puede verificar el destino del evento de clic en el contenedor mismo. Si coincide, eso significa que ha hecho clic en un elemento: before o: after.
Obviamente, esto no sería factible con ambos tipos (antes y después), sin embargo, lo he implementado como un truco / corrección de velocidad y está funcionando muy bien, sin un montón de verificación de posición, que puede ser inexacto dependiendo de aproximadamente un millón de factores diferentes .
fuente
No, pero puedes hacer así
En el archivo html agregue esta sección
En css puedes hacer así
} Espero que te ayude
fuente