【问题标题】:Making the content inside grid items equal height in CSS Grid在 CSS Grid 中使网格项内的内容等高
【发布时间】:2018-03-26 00:24:53
【问题描述】:

我想弄清楚如何让我的网格的两列高度相同。这是我所追求的:

xxxxxxxxxxxxxxxx                                                                                                                                                               则是才也才却却却却却却却又被深深的吸引着
x qqqqqqqqqqqqq x   x qqqqqqqqqqqqqqq x
x qqqqqqqqqqqqq x   x qqqqqqqqqqqqqqq x
x x   x qqqqqqqqqqqqqqq x
x x   x qqqqqqqqqqqqqqq x
xxxxxxxxxxxxxxxxx   xxxxxxxxxxxxxxxxxx

这里 x 代表网格的边界(显示:网格),q 代表标签和输入字段。 这是codepen上的所有代码和相同的链接。

.container {
    font-family: Arial, Helvetica, Sans-Serif;
    color: #666;
    font-size: 12px;
    position: absolute;
    width: 100%;
    margin: 0 auto;
    border: 1px solid #666;
    background-color: #fff;
    height: 100%;
}

.outerGrid {
  display: grid;
  grid-template-columns: 1fr 2fr 3fr 1fr;
  grid-template-rows: 80px 1fr 1fr 30px;
  grid-gap: 20px;
  grid-template-areas: 
    "title title title title" 
    ". companyInfo contactInfo . "
    ". demoInfo demoInfo . " 
    "footer footer footer footer";
}

.companyInfoContainer {
  grid-area: companyInfo;
}

.companyInfoBox {
    padding: 20px;
    border: 1px solid #666;
}

.contactInfoContainer {
    grid-area: contactInfo;
}

.contactInfoBox {
    display: grid;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: auto;
    grid-gap: 20px;
    grid-template-areas: 'contactLeft contactRight';
    border: 1px solid #666;
    padding: 20px;
}

.titleRow {
  display: flex;
  -webkit-box-pack: justify;
  justify-content: space-between;
  align-content: flex-start;
  margin-bottom: 10px;
  color: #333;
  font-size: 16px;
}

.formControl {
    -webkit-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
    display: block;
    height: 37px;
    padding: 5px;
    line-height: 1.25;
    background-color: #fff;
    width: 100%;
    background-clip: padding-box;
    border: 1px solid rgba(0,0,0,.15);
    border-radius: .25rem;
    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
    margin-bottom: 5px;
    background-image: none;
}

.formTitleTop {
    margin-bottom: 10px;
}

.formTitle {
    margin: 10px 0;
}

...和html:

<div class='container'>
  <div class="outerGrid">
    <div class="companyInfoContainer">
      <div class="titleRow">
        <div>Company Information</div>
        <div>* Required</div>
      </div>
      <div class="companyInfoBox">
        <div class="formTitleTop">Company Name*</div><input type="text" class="formControl" value="">
        <div class="formTitle">Website (leave blank if not website)</div>
        <input type="text" class="formControl" value=""></div>
    </div>
    <div class="contactInfoContainer">
      <div class="titleRow">
        <div>Contact Information</div>
        <div class="required">* Required</div>
      </div>
      <div class="contactInfoBox">
        <div class="contactLeft">
          <div class="formTitleTop">First Name*</div><input type="text" class="formControl" value="">
          <div class="formTitle">Last Name*</div><input type="text" class="formControl" value="">
          <div class="formTitle">Role*</div><input type="text" class="formControl" value=""><input type="button" value="Add Additional Contacts"></div>
        <div class="contactRight">
          <div class="formTitleTop">Phone Number*</div><input type="text" class="formControl" value="">
          <div class="formTitle">Mobile Phone Number</div><input type="text" class="formControl" value="">
          <div class="formTitle">Email Address*</div><input type="text" class="formControl" value=""></div>
      </div>
    </div>
  </div>
</div>

codepen:https://codepen.io/GuitarJ/pen/QqZRYR

我似乎无法让左列拉伸到右列高度的高度(我认为这也是行高。我希望 css 网格有办法做到这一点,但这很难搜索这个确切的问题。

我也尝试将高度设置为 100%,但它不尊重网格间隙并且下降得太远了。

如何让左侧成为行高?

【问题讨论】:

    标签: html css grid-layout css-grid


    【解决方案1】:

    那些网格项目的高度已经相同。它们都是第二行的高度,即1fr,由网格容器上的grid-template-rows 定义。

    如果你在这两个项目(.companyInfoContainer.contactInfoContainer)周围加上边框,你就会明白我的意思了。

    revised demo

    您似乎希望网格项(.companyInfoBox.contactInfoBox)的边框子项消耗所有可用高度。

    由于网格项不也是网格容器,you can't use grid properties on the children

    简单而有效的解决方案是让网格项目成为弹性容器。然后你可以将 flex 属性应用到孩子身上,这可以让他们消耗空闲空间。

    .companyInfoContainer {
       display: flex;
       flex-direction: column;
    }
    
    .companyInfoBox {
       flex: 1;
     }
    
    .contactInfoContainer {
      display: flex;
      flex-direction: column;
    }
    
    .contactInfoBox {
       flex: 1
    }
    

    revised demo

    更多详情:Descendant element not responding to grid properties

    【讨论】:

    • 太棒了!像魅力一样工作!似乎我没有正确地考虑它,但你是对的,我认为子框是网格中的顶层,而它们显然不是。一旦我明白了,这一切都说得通了!
    【解决方案2】:

    使用display 属性flex 和项目高度auto

    例如

    .flex-container {
    display: flex;
    width: 400px;
    height: auto;
    

    }

    .flex-item {
    background: red;
    width: 100px;
    height: auto;
    margin: 10px;
    

    }

    【讨论】:

    • 这对我不起作用,但我添加了一个带有 codepen 链接的完整布局示例,所以也许这会有所帮助。
    • 我想我明白了你正在寻找的东西,你可以使用 flex 使用这种方法。 codepen.io/saurabhsharma722/pen/oGQqBp
    • 我想坚持使用 display: grid.我总是可以按照@dantethesmith 所说的方式设置高度,但我希望采用一种少得多的手动方式。如果我有动态行,那将无法正常工作...
    【解决方案3】:

    如果网格没有变化,您可以手动设置相同的大小(您不会动态插入新元素或更改现有元素的垂直大小)

    .companyInfoBox {
        padding: 20px;
        border: 1px solid #666;
        height: 265px;
    }
    

    它简单且有效(考虑到上面列出的限制): pen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多