对齐 CSS 元素网格中的文本 [重复]

Posted

技术标签:

【中文标题】对齐 CSS 元素网格中的文本 [重复]【英文标题】:Align text in CSS element grid [duplicate] 【发布时间】:2019-07-21 02:12:04 【问题描述】:

I have made this CSS grid。我还在练习使用 CSS 网格,所以我试图模仿 this site。我想将文本放置在与我链接到的模板相同的位置。

但是正确的方法是如何做到这一点的呢?目前链接在左上角。

我应该在第一个 div 标签中创建另一个 div,或者最好的方法是什么?

最好的问候。

.wrapper 
    display:grid;
    grid-template-columns:repeat(12,1fr);
    grid-gap: 10px;
   

  .wrapper > div 
    background-color: #eee;
    padding: 1em;
    box-sizing: border-box;
  

  .wrapper > div:nth-child(odd) 
    background-color: #ddd;
  

  .item1 
    grid-row: 1 / 3;
    grid-column: 1/7;
    height: 700px;
  
  .item2 
    grid-row: 1 / 1;
    grid-column: 7/13;
    height: 340px;
  
  .item3 
    grid-row: 2 / 3;
    grid-column: 7/10;
    height: 350px;
   
  .item4 
    grid-row:2/3;
    grid-column: 10/13;
    height: 350px;
  
  a 
    font-size: 30px;
  

  @media only screen and (max-width: 600px) 
    .wrapper 
      display:grid;
      grid-template-columns:repeat(12,1fr);
      grid-gap: 10px;
     
    .item1 
      grid-row: 1 / 3;
      grid-column: 1/13;
      height: 350px;
    
    .item2 
      grid-row: 3 / 3;
      grid-column: 1/13;
      height: 200px;
    
    .item3 
      grid-row: 4 / 5;
      grid-column: 1 / 7;
      height: 200px;
     
    .item4 
      grid-row: 4 / 5;
      grid-column: 7 / 13;
      height: 200px;
    
  
    
    /*
    .nested 
      display:grid;
      grid-template-columns:repeat(3,1fr);
      grid-gap:1em;
    
    .nested > div 
      border:1px solid red;
      grid-auto-rows: 70px;
      padding:1em;
    
    */
<div class="wrapper">
    <div class="item1">
      <a href="#">Watch a tiny cat taking a bath</a>
    </div>
    <div class="item2">
      <a href="#">Spain: Take a virtual tour</a>
    </div>
    
    <div class="item3">
      <a href="#">5 Tips to create your garden</a>
    </div>
    
    <div class="item4">
      <a href="#">10 Movies you need to see</a>
    </div>
  
  </div>

【问题讨论】:

致那些将其标记为重复问题并提出“这个问题在这里已经有了答案:”的人。发布的所有链接都与文本的 flexbox 和 CSS 网格位置无关。 仅仅是因为它不是关于 flexbox 或 CSS 网格,而是关于对齐 div 内的文本。如果您阅读副本,您会注意到与您接受的答案相同的 flexbox 解决方案:***.com/a/40777362/8620333 / ***.com/a/35046535/8620333 确认重复 文本不在网格内..您的包装器是网格元素,项目是网格项目,这是您的网格范围..项目内的内容不属于网格。然后你能解释一下 flexbox 是如何为你工作的吗?仅仅因为您将网格项目设置为一个 flex 容器以对齐内部文本,或者您可以使用副本中描述的任何技术以不同方式执行此操作。使用 display:grid 不会使您的所有 html 成为网格,只会使您应用它的元素。所以你的问题是“在 div 中对齐文本” 【参考方案1】:

将此添加到项目中

display: flex;
justify-content: flex-end;
flex-direction: column;

.wrapper 
    display:grid;
    grid-template-columns:repeat(12,1fr);
    grid-gap: 10px;
   

  .wrapper > div 
    background-color: #eee;
    padding: 1em;
    box-sizing: border-box;
  

  .wrapper > div:nth-child(odd) 
    background-color: #ddd;
  

  .item1 
    grid-row: 1 / 3;
    grid-column: 1/7;
    height: 700px;
    display: flex;
    justify-content: flex-end;
    flex-direction: column;
  
  .item2 
    grid-row: 1 / 1;
    grid-column: 7/13;
    height: 340px;
  
  .item3 
    grid-row: 2 / 3;
    grid-column: 7/10;
    height: 350px;
   
  .item4 
    grid-row:2/3;
    grid-column: 10/13;
    height: 350px;
  
  a 
    font-size: 30px;
  

  @media only screen and (max-width: 600px) 
    .wrapper 
      display:grid;
      grid-template-columns:repeat(12,1fr);
      grid-gap: 10px;
     
    .item1 
      grid-row: 1 / 3;
      grid-column: 1/13;
      height: 350px;
    
    .item2 
      grid-row: 3 / 3;
      grid-column: 1/13;
      height: 200px;
    
    .item3 
      grid-row: 4 / 5;
      grid-column: 1 / 7;
      height: 200px;
     
    .item4 
      grid-row: 4 / 5;
      grid-column: 7 / 13;
      height: 200px;
    
  
    
    /*
    .nested 
      display:grid;
      grid-template-columns:repeat(3,1fr);
      grid-gap:1em;
    
    .nested > div 
      border:1px solid red;
      grid-auto-rows: 70px;
      padding:1em;
    
    */
<div class="wrapper">
    <div class="item1">
      <a href="#">Watch a tiny cat taking a bath</a>
    </div>
    <div class="item2">
      <a href="#">Spain: Take a virtual tour</a>
    </div>
    
    <div class="item3">
      <a href="#">5 Tips to create your garden</a>
    </div>
    
    <div class="item4">
      <a href="#">10 Movies you need to see</a>
    </div>
  
  </div>

【讨论】:

非常感谢您的回答。我可以看到这是有效的。但是是什么控制了文本的位置?如果我比现在更想要文本,是我必须使用填充,还是有一个聪明的方法来做到这一点? 你可以加margin :) 它由flex 控制 - 请阅读here。您告诉项目内的内容为列(垂直),然后将其对齐到末尾flex-end。希望这是有道理的 你确定混合css网格和flexbox是正确的吗? 我对 CSS Grid 不太熟悉,我相信你可以找到一种方法来代替它,但是 flexbox 可以工作,我看不出有什么理由不使用它

以上是关于对齐 CSS 元素网格中的文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

我如何垂直对齐具有不同高度的网格元素? [重复]

使用 CSS Grid 和 Flexbox 水平对齐位于不同网格单元格中的元素

在 CSS Grid 中垂直对齐内容 [重复]

在单独的div中对齐元素[重复]

当其中一个元素中的文本溢出时,<li> 元素会失去所需的对齐方式[重复]

在整个屏幕上垂直对齐元素[重复]