html - 在 CSS 网格布局中切换行进出

标签 html css grid css-grid

我有以下布局,包含 2 个页眉和 3 个页脚:

.my-grid {
    display: grid;
    grid-template-areas:
        "header1"
        "header2"
        "mainAreaExpandMePlease"
        "footer1"
        "footer2"
        "footer3"
        ;
    grid-template-rows: 27px 27px 1fr 28px 28px 28px;
    height: 100%;
}

主区域将扩展以填充显示页眉和页脚后留下的空白。

我希望能够打开和关闭页脚(显示/隐藏它们),以便它们折叠。通过上面的代码,当我们隐藏页脚时,会在页脚位置留下一个间隙。

我该怎么办:

  • 拥有一个不断扩展的主要区域
  • 具有可选的页眉和页脚,隐藏时可折叠

示例:

  • 如果 header1 折叠,则 header2 应取代其位置,并且 mainAreaExpandMePlease 应展开到 header2 原来的位置是
  • 如果 header2 折叠,则 mainAreaExpandMePlease 应再向上展开 27px
  • 如果 footer3 折叠,则 footer2 取代 footer3footer1 取代 footer2mainAreaExpandMePlease 将再向下拉伸(stretch) 28px

谢谢!

fiddle :https://jsfiddle.net/jg6ho4wu/1/

html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.my-grid {
    display: grid;
    grid-template-areas:
        "header1"
        "header2"
        "mainAreaExpandMePlease"
        "footer1"
        "footer2"
        "footer3";
    grid-template-rows: 27px 27px 1fr 28px 28px 28px;
    height: 100%;
}

.header1 {
  grid-area: header1;
  background-color: yellow;
}

.header2 {
  grid-area: header2;
  background-color: magenta;
}

.mainAreaExpandMePlease {
  grid-area: mainAreaExpandMePlease;
  background-color: cyan;
}

.footer1 {
  grid-area: footer1;
  background-color: green;
}

.footer2 {
  grid-area: footer2;
  background-color: red;
}

.footer3 {
  grid-area: footer3;
  background-color: blue;
}
<div class="my-grid">
  <div class="header1"></div>
  <div class="header2"></div>
  <div class="mainAreaExpandMePlease"></div>
  <div class="footer1"></div>
  <div class="footer2" style="display:none"></div>
  <div class="footer3"></div>
</div>

最佳答案

不要在容器级别设置页眉和页脚行的高度。

设置元素的高度,并将其容器高度设置为自动

.my-grid {
  display: grid;
  height: 100vh;
  grid-template-rows: auto auto 1fr auto auto auto;
  grid-template-areas:  "header1" 
                        "header2"
                        "mainAreaExpandMePlease"
                        "footer1"
                        "footer2"
                        "footer3";
}

.header1 {
  height: 27px;
  grid-area: header1;
  background-color: yellow;
}

.header2 {
  height: 27px;
  grid-area: header2;
  background-color: magenta;
}

.mainAreaExpandMePlease {
  grid-area: mainAreaExpandMePlease;
  background-color: cyan;
}

.footer1 {
  height: 28px;
  grid-area: footer1;
  background-color: green;
}

.footer2 {
  height: 28px;
  grid-area: footer2;
  background-color: red;
}

.footer3 {
  height: 28px;
  grid-area: footer3;
  background-color: blue;
}

body {
  margin: 0;
  padding: 0;
}
<div class="my-grid">
  <div class="header1"></div>
  <div class="header2"></div>
  <div class="mainAreaExpandMePlease"></div>
  <div class="footer1"></div>
  <div class="footer2" style="display:none"></div>
  <div class="footer3"></div>
</div>

关于html - 在 CSS 网格布局中切换行进出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55867678/

相关文章:

javascript - 只选择一个元素的子元素,由他的类标识

html - Bootstrap 对齐文本和图像

javascript - 每页上的序列号相同

html - 网格格式的视频 div 背景

Extjs自定义网格行分组

c# - 表中的数据未出现在 ASP.NET 页面上

jquery - 在新窗口上书写 - 新行丢失

css - 使用 CSS 修改选项卡的 href

html - 如何使用CSS在断词中添加自动连字符

Xaml Calendar DisplayMode ="Year"与 Grid.Definitions 和 DataContext 一起使用时不起作用