当前位置: 首页 > 面试题库 >

对齐不同块的子元素

淳于宏伯
2023-03-14
问题内容

我有商品清单。我需要在二维列表中显示它们。每个商品都有子元素:照片,标题,描述,价格和购买按钮,其大小和位置必须采用这种方式:商品行中的所有标题,描述,价格和照片必须位于相同的y坐标位置并具有高度,它是一行中相应的高度元素的最大值。

我已经尝试过:“ grid-template-rows:1fr 1fr 1fr 1fr 30px;” 使所有子元素都位于同一y位置,但是我需要它们的高度以适合内容,并且不能高于一行中的最大元素。PS:您可以使用flex或任何您想提供的代码

CODE

.Grid {

  display: grid;

  grid-gap: 10px;

  grid-template-columns: repeat( auto-fill, 280px);

}



.loon-card {

  grid-template-rows: 1fr 1fr 1fr 1fr 30px;

  display: grid;

  grid-gap: 10px;

  border: 1px solid #ddd;

  padding: 10px;

}



.long-description {

  border-top: 1px solid #ddd;

}


<div class="Grid">



  <div class="loon-card">

    <img src="">

    <div class="short-description">

      Title:1

      <br/>Title:2

      <br/>Title:3

      <br/>Title:4

    </div>

    <div class="long-description">

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.

    </div>

    <div class='price'>12.00$</div>

    <button>buy</button>

  </div>



  <div class="loon-card">

    <img src="">

    <div class="short-description">

      Title:1

      <br/>Title:2

      <br/>Title:3

      <br/>Title:4

      <br/>Title:5

      <br/>Title:6

      <br/>Title:7

      <br/>Title:8

      <br/>Title:9

      <br/>Title:10

      <br/>Title:2

      <br/>Title:3

      <br/>Title:4

      <br/>Title:5

      <br/>Title:6

      <br/>Title:7

      <br/>Title:8

      <br/>Title:9

      <br/>Title:10



    </div>

    <div class="long-description">

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.

    </div>

    <div class='price'>12.00$</div>

    <button>buy</button>

  </div>



  <div class="loon-card">

    <img src="">

    <div class="short-description">

      Title:1

      <br/>Title:2

      <br/>Title:3

      <br/>Title:4

    </div>

    <div class="long-description">

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.

    </div>

    <div class='price'>14.00$</div>

    <button>buy</button>

  </div>



  <div class="loon-card">

    <img src="">

    <div class="short-description">

      Title:1

      <br/>Title:2

      <br/>Title:3

      <br/>Title:4

    </div>

    <div class="long-description">

      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.

    </div>

    <div class='price'>15.00$</div>

    <button>buy</button>

  </div>



</div>

问题答案:

目前(2019/06)*使用任何CSS布局html" target="_blank">方法均无法实现。

display:subgrid解决了这个问题,但到目前为止,浏览器的非实验性应用还很有限。*

  • [2019/12更新]-Firefox 71现在提供了Subgrid。默认情况下,它在Firefox 71+中处于启用状态,因此可以进行测试。在完全采用之前,需要Javacript来平衡元素高度。

    • { margin: 0; padding: 0; box-sizing: border-box; } ::before, ::after { box-sizing:inherit; }

    .Grid {

    display: grid;

    width:90%;

    margin:auto;

    grid-gap: 10px;

    grid-template-columns: repeat( auto-fill, 280px);

    }

    .loon-card {

    display:grid;

    grid-row: span 5; / as we have 5 card components in each card /

    grid-template-rows:subgrid;

    border: 1px solid #ddd;

    padding: 10px;

    }

    .long-description {

    border-top: 1px solid #ddd;

    }

    .price {

    padding:.5em;

    text-align:center;

    }

    img {

    max-width:100%;

    display: block;

    }

    <img src="http://www.fillmurray.com/300/200">
    
    <div class="short-description">
    
      Title:1
    
      <br/>Title:2
    
      <br/>Title:3
    
      <br/>Title:4
    
    </div>
    
    <div class="long-description">
    
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.
    
    </div>
    
    <div class='price'>12.00$</div>
    
    <button>buy</button>
    
    <img src="http://www.fillmurray.com/300/200">
    
    <div class="short-description">
    
      Title:1
    
      <br/>Title:2
    
      <br/>Title:3
    
      <br/>Title:4
    
      <br/>Title:5
    
      <br/>Title:6
    
    </div>
    
    <div class="long-description">
    
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.
    
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.
    
    </div>
    
    <div class='price'>12.00$</div>
    
    <button>buy</button>
    
    <img src="http://www.fillmurray.com/300/200">
    
    <div class="short-description">
    
      Title:1
    
      <br/>Title:2
    
      <br/>Title:3
    
      <br/>Title:4
    
    </div>
    
    <div class="long-description">
    
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.
    
    </div>
    
    <div class='price'>14.00$</div>
    
    <button>buy</button>
    
    <img src="http://www.fillmurray.com/300/200">
    
    <div class="short-description">
    
      Title:1
    
      <br/>Title:2
    
      <br/>Title:3
    
      <br/>Title:4
    
    </div>
    
    <div class="long-description">
    
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras vitae mauris arcu. Donec et lorem ac nulla scelerisque egestas.
    
    </div>
    
    <div class='price'>15.00$</div>
    
    <button>buy</button>
    


 类似资料:
  • 我目前已经用下面的代码创建了一个JFrame。我希望有三个JLabel,一个在另一个上面,它们对应的JTextFields在右边,下面有四个JButtons(我最终将使用插入来分隔它们)。但是,单元格在一行中在框架顶部对齐。谁能看出我正在犯的错误。多谢了。 它目前正在生产的JFrame是: **我意识到我没有在面板中设置GridBagLayout,所以添加了一行:

  • 我正在尝试使用绝对定位将标签文本与其相应的输入字段对齐。然而,标签并没有将我的输入div识别为其父级,而似乎是相对于外部登录div定位标签文本。 HTML: CSS: 登录名和密码塞进表单的一角,而不是输入字段

  • 我正在使用angular 2与Bootstrap 4和angular Material。然而,我有困难正确地对齐我的容器div中的元素。我希望我的按钮和文本都对齐到右手边 下面是我尝试生成如照片所示结果的代码 我也从StackOverflow尝试过这个解决方案 这两种解决方案都不会将元素向右移动。我做错了什么?

  • 问题内容: 其他一些问题已经解决了如何最好地应用以使内联块元素均匀分布……例如,如何真正地证明 HTML + CSS中的水平菜单? 但是,浏览器为“清除”行内块元素行的100%宽度元素提供了自己的行。我不知道如何在不使用父元素的情况下摆脱空的垂直空间。 我正在使用的解决方案要求对子元素应用新的解决方案,但是之前设置的所有内容都会丢失。有谁知道更好的解决方案?我想避免使用表,以便在必要时可以包装元素

  • 问题内容: 当两个 高度不同时,为什么两个较短的高度不与容器顶部对齐? 如何将小容器的顶部对齐? 问题答案: 因为默认设置为 基线 。 使用来代替: 您也可以将其应用于子元素。

  • 问题内容: 我正在尝试对齐包含3个内容块的顶部菜单。 我想要实现的是: 块1:左对齐 块2:水平居中 块3:右对齐 如果所有3个块的大小均相同,则可以使用flexbox(如代码段中所示),但是它们不是,所以不会产生我需要的输出。 相反,flexbox在3个块之间放置了相等的空间-导致中间块偏离中心对齐。 我想知道是否可以使用flexbox来实现,如果不能,则可以使用另一种解决方案。这需要在生产中稳