【问题标题】:CSS Grid Layout Sidebar toggleCSS 网格布局侧边栏切换
【发布时间】:2017-11-03 03:40:35
【问题描述】:

这是关于最近添加到 CSS 网络标准中的新 CSS 网格系统的问题。这是我尝试使用的布局示例:

html,body{
  height: 100vh;
  width: 100wh;
  padding: 0;
  margin: 0;
  color: #e6e6e6;
}

body{
  display: grid;
  grid-template-columns: 9fr 300px;
  grid-template-rows: 50px auto 50px;
  grid-template-areas: "header header" 
                      "main chat"
                      "footer footer";
}

.chat{
  grid-area: chat;
  background-color: brown; 
  overflow: auto;
}
.header{
  grid-area: header;
  background-color: black;
}

.main{
  grid-area: main;
  background-color: maroon;
}

.footer{
  grid-area: footer;
  background-color: #222;
}
<div class="header">
    header
  </div>
  <div class="main">
    main
  </div>
  <div class="chat">
   chat
  </div>
  <div class="footer">
    footer
  </div>

Codepen example

现在我需要切换聊天侧边栏,使主 div 占据剩余空间。我已经知道如何在 flexbox 和 JavaScript 中做到这一点。不过,我想尝试使用 CSS Grids。

一种方法是这样做:grid-template-columns: 1fr 0;

但我希望聊天侧边栏能够平滑切换(如 CSS 过渡)而不是突然消失。

【问题讨论】:

    标签: html css css-grid


    【解决方案1】:

    使网格自动适应,并更改 .chat 宽度

    html,body{
      height: 100vh;
      width: 100wh;
      padding: 0;
      margin: 0;
      color: #e6e6e6;
    }
    
    body{
      display: grid;
      grid-template-columns: 9fr auto;
      grid-template-rows: 50px auto 50px;
      grid-template-areas: "header header" 
                          "main chat"
                          "footer footer";
    }
    
    .chat{
      grid-area: chat;
      background-color: brown; 
      overflow: auto;
      width: 300px;
      transition: all 1s;
    }
    .header{
      grid-area: header;
      background-color: black;
    }
    
    .main{
      grid-area: main;
      background-color: maroon;
    }
    
    .footer{
      grid-area: footer;
      background-color: #222;
    }
    
    body:hover .chat {
    width: 0px;  
    }
      <div class="header">
        header
      </div>
      <div class="main">
        main
      </div>
      <div class="chat">
       chat
      </div>
      <div class="footer">
        footer
      </div>

    【讨论】:

    • 并且由于fr单位代表了可用空间的一部分,所以9fr1fr在这种情况下是相同的。事实上,由于只有一列使用frany fr > 0 会做同样的事情。
    • @Michael_B 是的,使用 1fr 可能会更好。我只是保留了原始代码。
    • 不过,对于浏览器的绘图引擎来说,过渡宽度非常繁重。
    • @vals 如何在左侧做同样的事情。
    • @kano “过渡很昂贵”在很大程度上是一个非问题,多年来一直在讨论。在真实的计算机上,这不是问题,而在手机和平​​板电脑等功能较弱的移动设备上,用户很少/从不调整大小。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2021-05-20
    • 2020-10-07
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多