2

I have a html:

<div id="container">
    <div id="child1"></div>
    <div id="child2">
        <div id="fullpage"></div>
    </div>
    <div id="child3"></div>
</div>

and css:

#container {
    display:grid;
    grid-template-rows: minmax(0, auto) auto minmax(0,75px);
}

The empty child1 will have height filling the gap between the top screen and child2. I thought minmax(0, auto) will push child 1 into 0px height?

What I want is when the child is empty or the element inside it are hidden, the height should be 0.

How can I achieve this?


EDITED

#container-wrapper {
  display:grid;
  grid-template-rows: auto minmax(0,75px);
  height:100vh;
}
<div id="container-wrapper">
        <div id="pageContainer" style="background-color:red">
          <div>test</div>
        </div>
        <div id="tab-navigation" style="background-color:green">
          <!-- This should be 0px -->
        </div>
    </div>

The 2nd child should be height 0px. But this is wrong.

4
  • In your example, when #child1 is empty, the first row does get 0px in height. Can you tell a bit more about the undesired result you're getting?
    – isacvale
    Commented Jan 23, 2021 at 6:47
  • When the child is empty, it will not set the height into 0. It is set to fill the gap between the top and the 2nd child (it can be like 300px). Same thing applies to the 3rd child. If its empty, it is set to 75 px. What i want is to set it to 0 when it is empty. Commented Jan 23, 2021 at 7:01
  • Sorry, I honestly still don't quite get it, maybe a working pen or snippet might help. But if you want child1 to take 0px if empty, you can give its grid-template-row be 0px, or minmax(0, min-content). Then child3 would take up to 75px of the remainder space (is this what you want?), and child2 will take whatever is left.
    – isacvale
    Commented Jan 23, 2021 at 7:20
  • I just updated my code, please kindly check it. Commented Jan 23, 2021 at 8:56

1 Answer 1

2

do it like below:

#container {
  display: grid;
  height:200px;
  margin:10px;
  border:1px solid red;
  grid-template-rows: auto 1fr auto;
}

#container  > * {
  border:1px solid;
}
#child3 {
  max-height:75px;
}

#fullpage {
  height:100%;
  background:green;
}
<div id="container">
  <div id="child1"></div>
  <div id="child2">
    <div id="fullpage"></div>
  </div>
  <div id="child3"></div>
</div>

<div id="container">
  <div id="child1"> some content <br> here</div>
  <div id="child2">
    <div id="fullpage"></div>
  </div>
  <div id="child3"></div>
</div>

<div id="container">
  <div id="child1"> some content <br> here</div>
  <div id="child2">
    <div id="fullpage"></div>
  </div>
  <div id="child3"> and also here </div>
</div>

1

Not the answer you're looking for? Browse other questions tagged or ask your own question.