在以下布局中,我要使绿色部分的大小可调整。调整大小后,单元格8应该占用所有剩余空间,而不会影响其他行中的任何其他单元格。
.App {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: 50px 1fr 200px 30px;
width: 100%;
height: 100%;
}
.App > div {
border: 2px solid black;
}
.nav {
background: green;
}
<div class="App">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div class="nav">7</div>
<div>8</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
大小更改将由用户完成。但是为了进行演示,请考虑将width
元素的.nav
更改为100px
。更改.nav
的大小后,8个单元格应占用剩余空间并增长。
.nav {
background: green;
width: 100px;
}
使用CSS Grid
可以进行这种行为吗?
答案 0 :(得分:1)
您无法更改nav
的宽度,只能期望它会影响它旁边的元素-它会影响整个第一列。您可以尝试在下面的演示中调整nav
的大小(使用grid-template-columns: auto 1fr 200px
)以及足够的min-width
和max-width
:
.App {
display: grid;
grid-template-columns: auto 1fr 200px; /* changed */
grid-template-rows: 50px 1fr 200px 30px;
}
.App > div {
border: 2px solid black;
}
.nav {
background: green;
width: 100px; /* default width */
max-width: calc(100vw - 260px); /* do go beyond the third column */
min-width: 25px; /* min width of nav */
resize: horizontal; /* resize the div */
overflow: hidden; /* resize works if overflow not visible */
}
<div class="App"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div class="nav">7</div><div>8</div><div>9</div><div>10</div><div>11</div><div>12</div></div>
这与当前标记所能达到的程度一样。如果您可以通过将8
和7
包装到2列网格项中并更改为flexbox来更改html,则可以达到预期的效果-请参见下面的演示:
* {
box-sizing: border-box;
}
.App {
display: grid;
grid-template-columns: 1fr 1fr 200px;
grid-template-rows: 50px 1fr 200px 30px;
}
.App > div {
border: 2px solid black;
}
.nav {
grid-column: span 2;
display: flex;
}
.nav > div:first-child {
background: green;
resize: horizontal;
overflow: hidden;
width: 50%;
}
.nav > div:last-child {
flex: 1;
width: 50%;
}
<div class="App">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div class="nav">
<div>7</div>
<div>8</div>
</div>
<div>9</div>
<div>10</div>
<div>11</div>
<div>12</div>
</div>
您可以在这些文章中了解有关具有可调整大小的滑块的Flexbox的更多信息: