No puede diseñar una pseudo-clase solo en un elemento en particular, de la misma manera que no puede tener una pseudo-clase en un atributo inline style = "..." (ya que no hay un selector).
Puede hacerlo alterando la hoja de estilo, por ejemplo agregando la regla:
#elid:hover { background: red; }
suponiendo que cada elemento que desea afectar tiene una ID única para permitir que se seleccione.
En teoría, el documento que desea es http://www.w3.org/TR/DOM-Level-2-Style/Overview.html, lo que significa que puede (dada una hoja de estilo incorporada o vinculada preexistente) utilizando una sintaxis como:
document.styleSheets[0].insertRule('#elid:hover { background-color: red; }', 0);
document.styleSheets[0].cssRules[0].style.backgroundColor= 'red';
IE, por supuesto, requiere su propia sintaxis:
document.styleSheets[0].addRule('#elid:hover', 'background-color: red', 0);
document.styleSheets[0].rules[0].style.backgroundColor= 'red';
Es probable que los navegadores antiguos y menores no admitan ninguna de las sintaxis. Rara vez se realiza una dinámica de hoja de estilo porque es bastante molesto acertar, rara vez se necesita e históricamente problemático.
function sameOrigin(url) { var loc = window.location, a = document.createElement('a'); a.href = url; return a.hostname === loc.hostname && a.port === loc.port && a.protocol === loc.protocol; }
Creé una pequeña biblioteca para esto, ya que creo que hay casos de uso válidos para manipular hojas de estilo en JS. Las razones son:
fuente
Una función para hacer frente a las cosas entre navegadores:
fuente
Simplemente coloque el CSS en una cadena de plantilla.
Luego cree un elemento de estilo y coloque la cadena en la etiqueta de estilo y adjúntela al documento.
La especificidad se encargará del resto. Luego puede eliminar y agregar etiquetas de estilo dinámicamente. Esta es una alternativa simple a las bibliotecas y jugar con la matriz de hojas de estilo en el DOM. ¡Feliz codificación!
fuente
insertAdjacentElement
requiere 2 argumentos en los principales navegadores (Chrome, Firefox, Edge), el primero de los cuales establece la posición relativa al elemento de referencia ( ver aquí ). ¿Es este un cambio reciente? (Se agregó 'beforeend' a la respuesta).Mi truco es usar un selector de atributos. Los atributos son más fáciles de configurar mediante javascript.
css
javascript
html
fuente
Hay otra alternativa En lugar de manipular las pseudo-clases directamente, cree clases reales que modelen las mismas cosas, como una clase "flotante" o una clase "visitada". Diseñe las clases con el habitual "." sintaxis y luego puede usar JavaScript para agregar o eliminar clases de un elemento cuando se active el evento apropiado.
fuente
:before
y:after
son pseudo elementos, no clases.En lugar de establecer directamente reglas de pseudo-clase con javascript, puede establecer las reglas de manera diferente en diferentes archivos CSS, y luego usar Javascript para desactivar una hoja de estilo y activar otra. Se describe un método en A List Apart (qv. Para más detalles).
Configure los archivos CSS como,
Y luego cambie entre ellos usando javascript:
fuente
Como ya se dijo, esto no es algo que los navegadores admitan.
Si no está creando los estilos dinámicamente (es decir, sacándolos de una base de datos o algo así), debería poder solucionar esto agregando una clase al cuerpo de la página.
El CSS se vería algo así como:
Y el javascript para cambiar esto sería algo como:
fuente
element.classList.add
no está bien respaldado? Sigo viendo gente haciendoelement.className +=
.Cambiar hojas de estilo dentro y fuera es la forma de hacerlo. Aquí hay una biblioteca para crear hojas de estilo dinámicamente, para que pueda establecer estilos sobre la marcha:
http://www.4pmp.com/2009/11/dynamic-css-pseudo-class-styles-with-jquery/
fuente
En jquery puede configurar fácilmente las pseudo clases flotantes.
fuente
Aquí hay una solución que incluye dos funciones: addCSSclass agrega una nueva clase css al documento y toggleClass la activa
El ejemplo muestra cómo agregar una barra de desplazamiento personalizada a un div
fuente
Si usa REACT, hay algo llamado radio . Es muy útil aquí:
fuente