Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a DIV expand up instead of down?

On hovering a div, it should pop over the background-image above and show additional text. In addition, the background-image changes.

At the moment the DIV seems to only want to expand downward, but I really would like it to expand upward. But here is the kicker, I can not use position: fixed because the element needs to scroll with the page and not stick to the bottom.

Here is what I have so far:

  $('#hover-01').on('mouseenter', function() {
    $('#hover-change').css('background-image', 'url(http://www.w3schools.com/css/trolltunga.jpg)');
  });
  $('#hover-01').on('mouseleave', function() {
    $('#hover-change').css('background-image', 'url(https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4)');
  });

  $('#hover-02').on('mouseenter', function() {
    $('#hover-change').css('background-image', 'url(http://www.w3schools.com/css/trolltunga.jpg)');
  });
  $('#hover-02').on('mouseleave', function() {
    $('#hover-change').css('background-image', 'url(https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4)');
  });

  $('#hover-03').on('mouseenter', function() {
    $('#hover-change').css('background-image', 'url(http://www.w3schools.com/css/trolltunga.jpg)');
  });
  $('#hover-03').on('mouseleave', function() {
    $('#hover-change').css('background-image', 'url(https://www.nasa.gov/sites/default/files/styles/image_card_4x3_ratio/public/thumbnails/image/leisa_christmas_false_color.png?itok=Jxf0IlS4)');
  });
.wrapper {
  position: relative;
}

#hover-change {
  width: 100%;
  height: 300px;
  background-image: url("http://www.w3schools.com/css/trolltunga.jpg");
  background-repeat: no-repeat;
}

@import url(https://fonts.googleapis.com/css?family=Merriweather);

* {
  box-sizing: border-box;
}

body {
  font-family: 'Merriweather', serif;
  padding: 20px;
}

a {
  color: #f06d06;
  text-decoration: none;
}

.box {
  padding: 2em;
  border: 1px solid #ccc;
  display: block;
  width: 33%;
  height: 150px;
  float: left;
  margin: -1px 0 0 -1px;
  color: black;
  background: linear-gradient(white, white 50%, #333 50%, #333);
  background-size: 100% 202%;
  transition: all 0.2s ease;
  animation: down-bump 0.4s ease;
  position: absolute;
  margin-top: -150px;
  overflow: hidden;


}

.box h2 {
  font-weight: 400;
  letter-spacing: -1.5px;
  line-height: 1.2;
}

.box h3 {
  font: 0.8em "Lucida Grande", serif;
}

.box:hover {
  background-position: 100% 100%;
  animation: up-bump 0.4s ease;
  height: 400px;
}

.box:hover h2 {
  color: #48ad26;
}

.box:hover h2 span {
  color: white;
}

.box:hover h3 {
  color: #999;
}



.box2 {
  padding: 2em;
  border: 1px solid #ccc;
  display: block;
  width: 33%;
  height: 150px;
  float: right;
  margin: -1px 0 0 -1px;
  color: black;
  background: linear-gradient(white, white 50%, #333 50%, #333);
  background-size: 100% 202%;
  transition: all 0.2s ease;
  animation: down-bump 0.4s ease;
  position: absolute;
  margin-top: -150px;
  margin-left: 33%;
  overflow: hidden;


}

.box2 h2 {
  font-weight: 400;
  letter-spacing: -1.5px;
  line-height: 1.2;
}

.box2 h3 {
  font: 0.8em "Lucida Grande", serif;
}

.box2:hover {
  background-position: 100% 100%;
  animation: up-bump 0.4s ease;
  height: 400px;
}

.box2:hover h2 {
  color: #48ad26;
}

.box2:hover h2 span {
  color: white;
}

.box2:hover h3 {
  color: #999;
}

.box3 {
  padding: 2em;
  border: 1px solid #ccc;
  display: block;
  width: 33%;
  height: 150px;
  float: right;
  margin: -1px 0 0 -1px;
  color: black;
  background: linear-gradient(white, white 50%, #333 50%, #333);
  background-size: 100% 202%;
  transition: all 0.2s ease;
  animation: down-bump 0.4s ease;
  position: absolute;
  margin-top: -150px;
  margin-left: 66%;
  overflow: hidden;


}

.box3 h2 {
  font-weight: 400;
  letter-spacing: -1.5px;
  line-height: 1.2;
}

.box3 h3 {
  font: 0.8em "Lucida Grande", serif;
}

.box3:hover {
  background-position: 100% 100%;
  animation: up-bump 0.4s ease;
  height: 400px;
}

.box3:hover h2 {
  color: #48ad26;
}

.box3:hover h2 span {
  color: white;
}

.box3:hover h3 {
  color: #999;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="wrapper">

</div>
<div class="responsive-section-image" id="hover-change">
  <div class="overlay"></div>
</div>
<div class="box">
  <a id="hover-01" class="open-project" href="#">
    <h2><span>Lunch -</span> is delicious anytime</h2>
    <h3>Even after dinner</h3>
    <p>
      test content test content
      test content test content
      test content test content
      test content test content
    </p>
  </a>
</div>
<div class="box2">
  <a id="hover-02" class="open-project" href="#">
    <h2><span>Lunch -</span> is delicious anytime</h2>
    <h3>Even after dinner</h3>
    <p>
      test content test content
      test content test content
      test content test content
      test content test content
    </p>
  </a>
</div>
<div class="box3">
  <a id="hover-03" class="open-project" href="#">
    <h2><span>Lunch -</span> is delicious anytime</h2>
    <h3>Even after dinner</h3>
    <p>
      test content test content
      test content test content
      test content test content
      test content test content
    </p>
  </a>
</div>

</div>
like image 479
Melle van der Kolk Avatar asked Dec 11 '19 12:12

Melle van der Kolk


People also ask

How do I make divs expand upwards?

Use absolute positioning and instead of setting the offset with top use bottom . With this property you can ensure the position of the bottom edge of your div - any change in size will force the div to expand upwards.

How do I bring a div to the top?

In order to pull an html element out of the natural flow of how the elements are layed out on the screen you need to use position: absolute. This will allow the element to become a layer above the other elements (assuming that the z-index value is greater than all other's).

How do you expand a div in html?

You set that div with a height that matches the div on the left, then add a child div that is scrollable and expands to 100%. See this fiddle. You can try to fine tune the effect you want to achieve by replacing height by either max-height or min-height . Hope it helps.


1 Answers

Another solution would be to use flexbox. This way you can make the items stick to the bottom of the container and make them "pop upwards" on hover.

Add display:flex; to the container element and align-self:flex-end; to the boxes.

HTML

<div class="wrap">
    <div class="item">Text</div>
    <div class="item">Text</div>
</div>

CSS

.wrap {
   width:50%;
   height:80vh;
   display:flex;
}

.item {
   width:50%;
   height:30%;
   align-self:flex-end;
}

.item:hover {
   height:50%;
}

For a working example click here

like image 159
Sjoerd Avatar answered Sep 28 '22 07:09

Sjoerd