我正在创建一个简单的表单,我想在其中使用这种布局
到目前为止,非常好,非常简单的2列,嵌套2列,所有这些都定义为0.5fr,如果我理解正确的话,它们应该是“自由空间”的一半。
但是,如果我尝试缩小屏幕,则会发生这种情况。即使我没有媒体查询。
如果您使用chrome devtools进行调试,则可以看到它正在从无处创建第3列,而没有任何元素。有想法吗?
https://stackblitz.com/edit/js-zzm4gy?file=index.html
h1, h2 {
font-family: Lato;
}
.form{
border: 1px solid black;
text-align: center;
display: grid;
grid-template-rows: 1fr;
grid-gap: 1em;
}
.two-field{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
/********************/
/* Four elements row*/
/********************/
.four-field{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
}
.four-field .left{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
}
.four-field .right{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
/********************/
/********************/
/********************/
/********************/
/******Buttons*******/
/********************/
.buttons{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
.button-column{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
grid-column-gap: 1em;
}
/********************/
/********************/
/********************/
<div id="app">
<form class="form">
<div class="two-field">
<label>First name:</label>
<input type="text" name="firstname">
</div>
<div class="four-field">
<div class="left">
<label>Postal code:</label>
<input type="text" name="Postal code">
</div>
<div class="right">
<label>Place:</label>
<input type="text" name="Place" >
</div>
</div>
<div class="two-field">
<label>Phone</label>
<input type="text" name="phone">
</div>
<div class="buttons">
<div class="empty"></div>
<div class="button-column">
<button type="submit">Confirm</button>
<button>Abort</button>
</div>
</div>
</form>
</div>
答案 0 :(得分:3)
网格项的最小大小与其内容一样多;这意味着min-width
和min-height
解析为auto
。
要为网格项目提供更合理的默认最小尺寸,此 规范定义了min-width / min-height的自动值 将指定轴上的自动最小尺寸应用于网格项目 其溢出是可见的,并且至少跨越一条轨道,其最小 曲目大小调整功能是自动的。
请注意, input 元素具有内在宽度。因此,您可以在min-width: 0
元素中添加input
来解决问题 -请参见下面的演示
h1, h2 {
font-family: Lato;
}
.form{
border: 1px solid black;
text-align: center;
display: grid;
grid-template-rows: 1fr;
grid-gap: 1em;
}
input {
min-width: 0; /* ADDED */
}
.two-field{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
/********************/
/* Four elements row*/
/********************/
.four-field{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
}
.four-field .left{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
}
.four-field .right{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
/********************/
/********************/
/********************/
/********************/
/******Buttons*******/
/********************/
.buttons{
display: grid;
grid-template-columns: 0.25fr 0.75fr;
}
.button-column{
display: grid;
grid-template-columns: 0.5fr 0.5fr;
grid-column-gap: 1em;
}
/********************/
/********************/
/********************/
<div id="app">
<form class="form">
<div class="two-field">
<label>First name:</label>
<input type="text" name="firstname">
</div>
<div class="four-field">
<div class="left">
<label>Postal code:</label>
<input type="text" name="Postal code">
</div>
<div class="right">
<label>Place:</label>
<input type="text" name="Place" >
</div>
</div>
<div class="two-field">
<label>Phone</label>
<input type="text" name="phone">
</div>
<div class="buttons">
<div class="empty"></div>
<div class="button-column">
<button type="submit">Confirm</button>
<button>Abort</button>
</div>
</div>
</form>
</div>
建议
但是这里不需要很多嵌套(我建议在这里更改标记)-您可以像下面这样简单的4列网格布局进行这项工作:>
.form {
border: 1px solid black;
text-align: center;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 1em;
padding: 10px;
}
input {
min-width: 0;
}
input[name=firstname],
input[name=phone] {
grid-column: span 3;
}
.button-column {
grid-column: 2 / 5;
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 1em;
}
<div id="app">
<form class="form">
<label>First name:</label>
<input type="text" name="firstname">
<label>Postal code:</label>
<input type="text" name="Postal code">
<label>Place:</label>
<input type="text" name="Place">
<label>Phone</label>
<input type="text" name="phone">
<div class="button-column">
<button type="submit">Confirm</button>
<button>Abort</button>
</div>
</form>
</div>