Lo que quiero hacer es que cuando un cierto divestá 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-colorpero lo que quiero es que cuando pase el mouse #container, #cubese 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'#containerestá al lado#cube, es decir,#containersigue#cube?En este ejemplo particular, puede usar:
Este ejemplo solo funciona ya que
cubees 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-directionenreverse, 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
:hoversuperar 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
:hoversobre 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
:hoverobjetivos válidos entre sí, elpositionatributo css se puede usar para mostrar cualquier elemento donde lo desee. Usé position: fixed para colocar el objetivo de mi:hoveracció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
:hovercomando de un elemento dentro#explainBoxdebe ser#explainBoxo 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
#idpara más de un elemento HTML; sin embargo, en este caso, las instancias de#lightpueden describirse independientemente debido a sus respectivas posiciones en#idelementos 'd únicos . ¿Hay alguna razón para no repetirloid#lighten este caso?fuente
IDvarias veces. Solo usa aclass.Solo esto funcionó para mí:
¿Dónde
.cubeestá 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
:hoverestado 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-shadowetc. 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