我正在尝试构建一个基于css网格布局的类似Trello的UI。我遵循了Joshua Saunders (https://medium.com/better-programming/creating-trellos-ui-with-css-grid-ed1fbfcd9448)的一个非常有用的教程,最后它还没有完成,我一整天都在寻找解决方案: Trello在调整浏览器窗口大小时,它的卡片列表有一个特定的行为:如果列表还没有到达视口的底部,"+ add card"-Button总是在列表的末尾,所有的卡片都是可见的。如果卡列表对于视口来说太长,那么在视口的底部仍然可以看到"+ add card"-button,但是标题和"+ add card"-button之间的卡列表将变为可滚动。
总而言之:在任何视窗大小下,标题和每个列表的"+ add card"-button将始终可见,如果需要,卡片列表本身将变为可滚动。我想,我找到了一个使用flex布局的解决方案(还没有尝试过),但我仍然在想,是否可以使用网格布局。
以下是我的代码:
BODY {
margin:0px;
padding:0px;
}
.base {
height: 100vh;
width: 100vw;
background-color: rgb(0, 121, 191);
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Droid Sans,Helvetica Neue,sans-serif;
font-size: 14px;
display: grid;
grid-template-rows: max-content auto;
grid-gap: 10px;
}
.header {
padding:5px;
color:white;
font-size:18px;
font-weight:bold;
}
.board {
margin:5px;
height:auto;
display:grid;
grid-template-columns:max-content;
overflow:auto;
grid-auto-flow:column;
border: 1px solid yellow;
}
.lists {
height:auto;
display:grid;
grid-auto-columns:272px;
grid-auto-flow:column;
grid-gap:8px;
border:1px solid red;
}
.list {
background-color:rgb(235, 236, 240);
border-radius:3px;
padding:10px;
display:grid;
grid-template-rows:max-content auto max-content;
grid-gap:10px;
height:max-content;
align-items:stretch;
}
.list-title {
font-weight:bold;
}
.list-body {
display:grid;
grid-auto-rows:max-content;
grid-gap:10px;
height:max-content;
overflow:scroll;
}
.card {
background-color:white;
border-radius:3px;
box-shadow:0 1px 0 rgba(9, 30, 66, 0.25);
padding:10px;
}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>grid-layout trello-like UI - heightproblem</title>
<link rel="stylesheet" type="text/css" href="trello-ui.css">
</head>
<body>
<div class="base">
<div class="header">
Header
</div>
<div class="board">
<div class="lists">
<div class="list">
<div class="list-title">List 1</div>
<div class="list-body">
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
<div class="list">
<div class="list-title">List 2</div>
<div class="list-body">
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
<div class="list">
<div class="list-title">List 3</div>
<div class="list-body">
<div class="card">Card</div>
<div class="card">Card</div>
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
<div class="list">
<div class="list-title">List 4</div>
<div class="list-body">
<div class="card">Card</div>
<div class="card">Card</div>
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
<div class="list">
<div class="list-title">List 5</div>
<div class="list-body">
<div class="card">Card</div>
<div class="card">Card</div>
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
<div class="list">
<div class="list-title">List 6</div>
<div class="list-body">
</div><!--// list-body -->
<div class="list-foot">+ add card</div>
</div><!--// list -->
</div><!--// lists
</div>
</div>
</body>
</html>
发布于 2020-06-22 09:05:15
使用css方法计算可用的高度,这里是它的calc():https://developer.mozilla.org/en-US/docs/Web/CSS/calc
以下是您当前问题的解决方案
body {
margin: 0px;
padding: 0px;
}
.base {
height: 100vh;
width: 100vw;
background-color: rgb(0, 121, 191);
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Noto Sans, Ubuntu, Droid Sans, Helvetica Neue, sans-serif;
font-size: 14px;
display: grid;
grid-template-rows: max-content auto;
grid-gap: 10px;
}
.header {
padding: 5px;
color: white;
font-size: 18px;
font-weight: bold;
height: 35px;
}
.board {
margin: 5px;
height: calc(100vh - 70px);
display: grid;
grid-template-columns: max-content;
grid-auto-flow: column;
border: 1px solid yellow;
overflow-x: scroll;
overflow-y: hidden;
}
.lists {
display: grid;
grid-auto-columns: 272px;
grid-auto-flow: column;
grid-gap: 8px;
border: 1px solid red;
height: calc(100vh - 90px);
}
.list {
background-color: rgb(235, 236, 240);
border-radius: 3px;
padding: 10px;
display: grid;
grid-template-rows: max-content auto max-content;
grid-gap: 10px;
height: max-content;
align-items: stretch;
max-height: calc(100vh - 90px);
overflow: hidden;
}
.list-title {
font-weight: bold;
height: 20px;
}
.list-body {
display: grid;
grid-auto-rows: max-content;
grid-gap: 10px;
overflow: scroll;
max-height: calc(100vh - 190px);
}
.card {
background-color: white;
border-radius: 3px;
box-shadow: 0 1px 0 rgba(9, 30, 66, 0.25);
padding: 10px;
}
.list-foot {
height: 35px;
}https://stackoverflow.com/questions/62505913
复制相似问题