代码之家  ›  专栏  ›  技术社区  ›  mikemaccana

如何在CSS网格中进行单行垂直居中布局?

  •  0
  • mikemaccana  · 技术社区  · 6 年前
    • 这些物品(可能)的宽度相同
    • 项目高度不同,但需要垂直居中
    • (随机句子,因为减价会做一些奇怪的事情)

      <DIV class=“Box A”>A</DIV> <DIV class=“box C”>C</DIV> .包装{ 网格自动列:200px; 颜色:444; 背景色:444; 字体大小:150%; }

      我已经尝试过了,它真的想在一行上做多行,而不是多列。

      enter image description here

      <div class="wrapper">
          <div class="box a">A</div>
          <div class="box b">B</div>
          <div class="box c">C</div>
      </div>
      
      
      .wrapper {
          display: grid;
          grid-gap: 10px;
          grid-auto-columns: 200px;
          background-color: #fff;
          color: #444;
          .box {
              background-color: #444;
              color: #fff;
              border-radius: 5px;
              padding: 20px;
              font-size: 150%;
          }
      }
      

    2 回复  |  直到 6 年前
        1
  •  4
  •   Michael Benjamin William Falcon    6 年前

    若要将所有项强制为一行,请将它们设置为 grid-row: 1

    要使项目居中,请将容器设置为 align-items: center align-self: center align-self align-items

    .wrapper {
      display: grid;
      align-items: center;     /* new */
    }
    
    .box {
      grid-row: 1;             /* new */
    }
    
    .box.a { height: 200px; }
    .box.b { height: 20px;  }
    .box.c { height: 120px; }
    .box.d { height: 50px;  }
    
    
    /* non-essential decorative styles */
    
    .wrapper {
      grid-gap: 10px;
      background-color: #fff;
      color: #444;
    }
    .box {
      background-color: #444;
      color: #fff;
      border-radius: 5px;
      padding: 20px;
      font-size: 150%;
    }
    body {
      margin: 40px;
    }
    <div class="wrapper">
      <div class="box a">A</div>
      <div class="box b">B</div>
      <div class="box c">C</div>
      <div class="box d">D</div>
    </div>
        2
  •  2
  •   mikemaccana    6 年前

    • grid-auto-flow: column; 使项目横穿列(即成单行)
    • align-self: center;

    .wrapper {
        display: grid;
        grid-auto-flow: column;  
    }
    
    .box {
        align-self: center;
    }
    
    /* Additional styles below */
    
    .wrapper {
      grid-gap: 10px;
      background-color: #fff;
      color: #444;
    }
    
    .box {
        background-color: #444;
        color: #fff;
        border-radius: 5px;
        padding: 20px;
        font-size: 150%;
    }
    
    body {
      margin: 40px;
    }
      
    .box.a {
         height: 200px;
    }
        
    .box.b {
      height: 20px;
    }
    
    .box.c {
      height: 120px;
    }
    <div class="wrapper">
      <div class="box a">A</div>
      <div class="box b">B</div>
      <div class="box c">C</div>
      <div class="box c">D</div>
    </div>