【发布时间】:2020-08-18 13:53:16
【问题描述】:
我对 CSS grid 还很陌生。我做了一个简单的联系表格来试验这个系统。我的网格有 2 列和 5 行。我在左列中放置了 4 个inputs,在右列中放置了 1 个 textarea,在最后一行中放置了最后一个 input。 textarea 可以垂直调整大小。
问题是向下拖动textarea 会调整网格中所有行的大小,包括相邻列中的行,从而改变整体布局(参见下面的 sn-p 示例)。这对我来说似乎是一种正常且合乎逻辑的行为,但我想知道是否有任何方法可以阻止其他列中的行直接使用 grid 调整大小。
* {
box-sizing: border-box;
}
html, body, input, textarea {
padding: 0;
margin: 0;
}
.form {
margin: 10px;
display: grid;
grid-template: repeat(5, auto) / 4fr 6fr;
grid-gap: 10px;
grid-template-areas:
". textarea"
". textarea"
". textarea"
". textarea"
"submit submit";
}
.input, .submit {
height: 30px;
}
.submit {
grid-area: submit;
}
.textarea {
grid-area: textarea;
resize: vertical;
min-height: 150px;
}
<form class="form">
<input class="input" type="text" />
<input class="input" type="text" />
<input class="input" type="text" />
<input class="input" type="text" />
<textarea class="textarea" name="message"></textarea>
<input class="submit" type="submit" />
</form>
到目前为止,我发现解决此问题的最直接的解决方案是将前 4 个 inputs 包装在 div 中(例如使用 class="container")并为其设置一个固定的 height,像这样:
.container {
grid-area: container;
display: flex;
flex-direction: column;
justify-content: space-between;
height: 150px;
}
可以,但我觉得不是很方便。
直接使用grid 可以解决这个问题吗?
【问题讨论】:
-
将最大高度设置为 textarea
-
但我希望能够调整
textarea的大小。 -
我认为您的直接解决方案将是最简单的解决方案:那是因为您不希望各个行高分布在各处:这意味着您需要将所有输入集中在一个 div 中反而。因此,将其视为具有 2 行的两列布局:第一行左侧有 4 个输入,右侧有 textarea;根据您的设计,第二行有提交按钮。
-
@Terry 是的,这就是我目前所做的。 2 x 2 网格中
inputs 的固定高度容器。我只是觉得它不是很方便,尤其是在处理更复杂的设计时。冻结textarea所在的行会更容易。 -
让我跟你说几句;在现实世界中,调整 textarea 的大小并不常见且无用。我认为最大高度是唯一的方法。不要浪费你的时间。
标签: css css-grid grid-layout