You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Grid实现与Flex示例一致的字段旁仅边框+内边距的垂直红条

问题:用Grid布局实现与Flex一致的垂直红条效果

我想用Grid布局在包含字段和验证信息的DIV旁显示垂直红条,实现和Flex示例完全一样的效果——红条通过DIV的左边框加内边距来实现。

用Flex布局很简单:两个DIV堆叠后会自动适配默认尺寸,内边距正常生效,高度取两个DIV的最大值。但我用grid-template-areas: "a b";定义的Grid示例里,默认间距不生效,我不想手动定义宽度和尺寸,只靠红条的15px内边距就够了。


解决方案

问题核心是空的.gridCol1在Grid布局中默认宽度会收缩到0,导致边框和内边距无法正常展现。只需要调整Grid的列尺寸规则,让第一列适配内容尺寸,第二列占满剩余空间即可:

修改后的代码

CSS

.error {
  color: red;
}

.flexExample {
   display: flex;
}

.flexVerticalBar {
   border-left: 3px solid red;
   padding-left: 15px;
}

.gridExample {
  display: grid;
  /* 第一列适配内容尺寸,第二列占满剩余空间 */
  grid-template-columns: min-content auto;
}

.gridCol1 {
   border-left: 3px solid red;
   padding-left: 15px;
}

.gridCol2 {
  /* 无需额外指定grid-area,元素按顺序填充列即可 */
}

HTML

<div class="flexExample">
   <div class="flexVerticalBar"></div>
   <div>
      <span class="error">Name is required</span><br/>
            <label for="textName">Name:</label><br/>
            <input type="text" id="textName" />
   </div>
</div>

<hr/>

<div class="gridExample">
   <div class="gridCol1"></div>
   <div class="gridCol2">
      <span class="error">Name is required</span><br/>
            <label for="textName">Name:</label><br/>
            <input type="text" id="textName" />   
   </div>
</div>

说明

  • grid-template-columns: min-content auto; 是关键:min-content让第一列仅占据内容所需宽度(即3px边框+15px内边距的总宽度),auto让第二列自动填充剩余空间
  • 无需再使用grid-template-areas和grid-area属性,简化布局结构,元素按默认顺序填充Grid列
  • 修改后Grid布局的效果和Flex示例完全一致,无需手动定义任何固定宽度

内容的提问来源于stack exchange,提问作者gene b.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:07:16