Mahdi
Mahdi

Reputation: 27

div is not completely hidden in an other div

I have made a div with specific width and height and make it position relative and made 3 other div as position absolute inside main div ; I have hide them with transform style.when i hover over main div all 3 divs shown; but middle div is not hidden completely before mouse hover.what can i do? I have Added Picture here. thanks.

HTML

<div class="box">
    <div class="overlay"></div>
    <div class="overlay"></div>
    <div class="overlay"></div>
</div>

CSS

.box {
        width: 350px;
        height: 350px;
        position: relative;
        background: antiquewhite;
        overflow: hidden;
    }
    .overlay:first-child{
        position: absolute;
        width: 33.34%;
        height: 100%;
        left: 0;
        top: 0;
        background: rebeccapurple;
        transform: translateY(100%);
        transition: transform 1s;
    }
    .overlay:nth-child(2){
        position: absolute;
        width: 33.3333333%;
        height: 100%;
        left: 50%;
        transform: translate(-50%,-100%);
        top: 0;
        background: firebrick;
        transition: transform 1s;
    }
    .overlay:last-child{
        position: absolute;
        width: 33.34%;
        height: 100%;
        right: 0;
        top: 0;
        background: green;
        transform: translateY(100%);
        transition: transform 1s;
    }
    .box:hover .overlay:not(:nth-child(2)){
        transform: translateY(0);
    }
    .box:hover .overlay:nth-child(2){
        transform: translate(-50%,0);
    }

enter image description here

Upvotes: 0

Views: 33

Answers (1)

Johannes
Johannes

Reputation: 67778

Your problem is not reproduceable, at least not with Firefox, where it works as expected. So it might be a browser issue.

However, to avoid that glitch, you can simply set the transformY parameter to a slightly higher value, like -101%, which should hide it completely:

.box {
  width: 350px;
  height: 350px;
  position: relative;
  background: antiquewhite;
  overflow: hidden;
}

.overlay:first-child {
  position: absolute;
  width: 33.34%;
  height: 100%;
  left: 0;
  top: 0;
  background: rebeccapurple;
  transform: translateY(100%);
  transition: transform 1s;
}

.overlay:nth-child(2) {
  position: absolute;
  width: 33.3333333%;
  height: 100%;
  left: 50%;
  transform: translate(-50%, -101%);
  top: 0;
  background: firebrick;
  transition: transform 1s;
}

.overlay:last-child {
  position: absolute;
  width: 33.34%;
  height: 100%;
  right: 0;
  top: 0;
  background: green;
  transform: translateY(100%);
  transition: transform 1s;
}

.box:hover .overlay:not(:nth-child(2)) {
  transform: translateY(0);
}

.box:hover .overlay:nth-child(2) {
  transform: translate(-50%, 0);
}
<div class="box">
  <div class="overlay"></div>
  <div class="overlay"></div>
  <div class="overlay"></div>
</div>

Upvotes: 1

Related Questions