TransWikia.com

Cambiar propiedades del elemento anterior solamente con CSS

Stack Overflow en español Asked by Juaqui on December 5, 2021

Tengo dos elementos div, lo que quiero conseguir es que al pasar con el ratón sobre el primer elemento se cambie el color del segundo, y al pasar sobre el segundo se cambie el color del primero. No se si se puede hacer con pseudo clases.

Este es el código que tengo

#div1
{
  position: absolute;
  top: 10px;
  left: 10px;
}

#div1:hover
{
  color: red;
}

#div2
{
  position: absolute;
  top: 30px;
  left: 10px;
}
<body>

  <div id="div1">Div número 1</div>
  <div id="div2">Div número 2</div>

</body>

¿Se puede indicar de alguna manera con CSS que al pasar sobre el div número 1 se cambie el color del div número 2 o viceversa?

2 Answers

Respuesta corta: No se puede ya que al estar al mismo nivel y declarar la propiedad hover en un div solo puedes aplicar estilos a lo que se sitúe en un nivel inferior a dicho div

Respuesta extendida: Puedes hacerlo mediante JavaScript asignando una clase a tu div2 al hacer hover en tu div1 y viceversa:

document.getElementById('div1').onmouseover = function(){
  document.getElementById('div2').classList.add('hover');
}
document.getElementById('div1').onmouseout = function(){
  document.getElementById('div2').classList.remove('hover');
}
document.getElementById('div2').onmouseover = function(){
  document.getElementById('div1').classList.add('hover');
}
document.getElementById('div2').onmouseout = function(){
  document.getElementById('div1').classList.remove('hover');
}
#div1.hover{
  color: red;
}
#div2.hover{
  color: blue
}
<div id="div1">Div número 1</div>
<div id="div2">Div número 2</div>

Answered by David on December 5, 2021

Probando, por puro interés académico y cabezonería, me negaba a creer que no hubiese una manera de hacer lo que necesitas. Y a grandes rasgos no existe una manera de seleccionar un elemento anterior en CSS pero se me ocurrió un truquillo para aparentar que lo estás haciendo en este caso en específico.

Envolviendo tus dos <div> con otro, podemos seleccionar el <div> en el que se está haciendo un hover y dentro de este buscar el <div> al que no se le esté haciendo un hover y a ese aplicarle el cambio de color.

#div1 {
  position: absolute;
  top: 10px;
  left: 10px;
}

#div2 {
  position: absolute;
  top: 30px;
  left: 10px;
}

div:hover div:nth-child(1):not(:hover) {
  color: blue;
}

div:hover div:nth-child(2):not(:hover) {
  color: red;
}
<div>
  <div id="div1">Div número 1</div>
  <div id="div2">Div número 2</div>
</div>

Answered by phpMyGuel on December 5, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP