Lo que quiero hacer es que cuando un cierto div
está suspendido, afectaría las propiedades de otro div
.
Por ejemplo, en esta demostración de JSFiddle , cuando pasa el mouse sobre #cube
él, cambia, background-color
pero lo que quiero es que cuando pase el mouse #container
, #cube
se vea afectado.
div {
outline: 1px solid red;
}
#container {
width: 200px;
height: 30px;
}
#cube {
width: 30px;
height: 100%;
background-color: red;
}
#cube:hover {
width: 30px;
height: 100%;
background-color: blue;
}
<div id="container">
<div id="cube">
</div>
</div>
~
para 'el cubo está en algún lugar después del contenedor en el DOM y comparte un padre'#container
está al lado#cube
, es decir,#container
sigue#cube
?En este ejemplo particular, puede usar:
Este ejemplo solo funciona ya que
cube
es hijo decontainer
. Para escenarios más complicados, necesitaría usar CSS diferente o JavaScript.fuente
El uso del selector de hermanos es la solución general para diseñar otros elementos al pasar el mouse sobre uno determinado, pero solo funciona si los otros elementos siguen al dado en el DOM . ¿Qué podemos hacer cuando los otros elementos deberían estar realmente antes que el que está suspendido? Digamos que queremos implementar un widget de calificación de barra de señal como el siguiente:
En realidad, esto se puede hacer fácilmente usando el modelo CSS flexbox, estableciéndolo
flex-direction
enreverse
, para que los elementos se muestren en el orden opuesto al que están en el DOM. La captura de pantalla anterior es de dicho widget, implementado con CSS puro.Flexbox es muy compatible con el 95% de los navegadores modernos.
Mostrar fragmento de código
fuente
.rating div
, elimine el margen y agregueborder-right: 4px solid white;
¡Muchas gracias a Mike y Robertc por sus útiles publicaciones!
Si tiene dos elementos en su HTML y desea
:hover
superar uno y orientar un cambio de estilo en el otro, los dos elementos deben estar directamente relacionados: padres, hijos o hermanos. Esto significa que los dos elementos deben estar uno dentro del otro o ambos deben estar contenidos dentro del mismo elemento más grande.Quería mostrar las definiciones en un cuadro en el lado derecho del navegador mientras mis usuarios leen mi sitio y
:hover
sobre los términos resaltados; por lo tanto, no quería que el elemento 'definición' se mostrara dentro del elemento 'texto'.Casi me doy por vencido y acabo de agregar JavaScript a mi página, ¡pero este es el futuro! ¡No deberíamos tener que aguantar el back sass de CSS y HTML diciéndonos dónde tenemos que colocar nuestros elementos para lograr los efectos que queremos! Al final nos comprometimos.
Si bien los elementos HTML reales en el archivo deben estar anidados o contenidos en un solo elemento para ser
:hover
objetivos válidos entre sí, elposition
atributo css se puede usar para mostrar cualquier elemento donde lo desee. Usé position: fixed para colocar el objetivo de mi:hover
acción donde lo quería en la pantalla del usuario, independientemente de su ubicación en el documento HTML.El html:
El css:
En este ejemplo, el objetivo de un
:hover
comando de un elemento dentro#explainBox
debe ser#explainBox
o también dentro#explainBox
. Los atributos de posición asignados a #definiciones lo obligan a aparecer en la ubicación deseada (fuera#explainBox
) a pesar de que técnicamente se encuentra en una posición no deseada dentro del documento HTML.Entiendo que se considera una mala forma usar lo mismo
#id
para más de un elemento HTML; sin embargo, en este caso, las instancias de#light
pueden describirse independientemente debido a sus respectivas posiciones en#id
elementos 'd únicos . ¿Hay alguna razón para no repetirloid
#light
en este caso?fuente
ID
varias veces. Solo usa aclass
.Solo esto funcionó para mí:
¿Dónde
.cube
está CssClass de la#cube
.Probado en Firefox , Chrome y Edge .
fuente
Aquí hay otra idea que le permite afectar a otros elementos sin tener en cuenta ningún selector específico y utilizando solo el
:hover
estado del elemento principal.Para esto, confiaré en el uso de propiedades personalizadas (variables CSS). Como podemos leer en la especificación :
La idea es definir propiedades personalizadas dentro del elemento principal y usarlas para diseñar elementos secundarios y dado que estas propiedades se heredan, simplemente necesitamos cambiarlas dentro del elemento principal al pasar el mouse sobre ellas.
Aquí hay un ejemplo:
¿Por qué esto puede ser mejor que usar un selector específico combinado con el desplazamiento?
Puedo proporcionar al menos 2 razones que hacen que este método sea bueno para considerar:
border
,linear-gradient
,background-color
,box-shadow
etc. Esto nos reseting evitar todas estas propiedades en vuelo estacionario.Aquí hay un ejemplo más complejo:
Como podemos ver arriba, solo necesitamos una declaración CSS para cambiar muchas propiedades de diferentes elementos.
fuente