Skip to content Skip to sidebar Skip to footer

One Div Gets Bigger While The Other Gets Smaller

I'm new to javascript, I'm wondering how to get .contact from a 30% width to 40% when I go with my mouse over .contact. This works, but while .contact gets bigger I want .div to ge

Solution 1:

You can do this with only CSS

.contact {
  background-color: red;
  width: 30%;
  float: left;
  transition:1s linear;
}

.div {
  background-color: blue;
  width: 70%;
  float: right;
  transition:1s linear;
}

.contact:hover {
  width: 40%;
}

.contact:hover + .div{
  width: 60%;
}
<divclass="content"><divclass="contact"id="contact"><h3> Text</h3><p>More textt</p></div><divclass="div"><h3> Text</h3><p>More textt</p></div></div>

And for a more flexible way you can consider flexbox where you only need to change the hover element and the other one will shrink by default

.content {
  display: flex;
}

.contact {
  background-color: red;
  flex-basis: 30%;
  transition: 0.5s linear;
}

.div {
  background-color: blue;
  flex-grow:1;
}

.contact:hover {
  flex-basis: 40%;
}
<divclass="content"><divclass="contact"id="contact"><h3> Text</h3><p>More textt</p></div><divclass="div"><h3> Text</h3><p>More textt</p></div></div>

UPDATE

If you want a permanent change you can try animation:

.content {
  display: flex;
}

.contact {
  background-color: red;
  flex-basis: 30%;
  transition: 0.5s linear;
  animation:big 0.5s linear forwards;
  animation-play-state:paused;
}

.div {
  background-color: blue;
  flex-grow:1;
}

.contact:hover {
  animation-play-state:running;
}
@keyframes big{
  to {flex-basis: 40%;}
}
<divclass="content"><divclass="contact"id="contact"><h3> Text</h3><p>More textt</p></div><divclass="div"><h3> Text</h3><p>More textt</p></div></div>

Solution 2:

You don't need javascript for this, sibling selector works. Or in javascript, shrink the div on the right while expanding the div on the left.

var width = 30;

var maxWidth = 40;

var interval = null;

var contact = document.getElementById("contact");
var div = document.getElementById("div");
functionmyMove() {
  interval = setInterval(function() {
    if (width>= maxWidth){
      returnclearInterval(interval);
    }
    contact.style.width = ++width + "%";
    div.style.width = (100-width) + "%";
  },5);
}
.contact{
    background-color:red;
    width:30%;
    float:left;
}
.div{
    background-color: blue;
    width: 70%;
    float: right;  
}
<divclass="content"><divclass="contact"id="contact"onmouseover="myMove()"><h3> Text</h3><p>More textt</p></div><divclass="div"id="div"><h3> Text</h3><p>More textt</p></div></div>

Solution 3:

You can do it with Flexbox

flex: 1 makes .contact expand to the rest of the available space.

You would then only need to define the width for .div and its width when .contact is hovered.

.content {
  display: flex;
}

.contact{
  background-color:red;
  flex: 1
}

.div {
  width: 70%;
  background-color: blue;  
}

.contact:hover + .div {
  width: 60%
}
<divclass="content"><divclass="contact"id="contact"><h3> Text</h3><p>More textt</p></div><divclass="div"><h3> Text</h3><p>More textt</p></div></div>

Post a Comment for "One Div Gets Bigger While The Other Gets Smaller"