【问题标题】:CSS to center vertically four divs side by side inside a wrapper divCSS在包装器div内并排垂直居中四个div
【发布时间】:2021-09-01 17:55:27
【问题描述】:

我正在写一个页面来显示收据。它有以下列:

  • 产品图片。
  • 说明。
  • 数量。
  • 价格。

我为项目创建了一个 div,并为每列创建了四个 div。我无法垂直对齐列 div(因此描述、数量和价格与图像垂直居中)。

我创建了一个小小提琴来显示我在哪里 - https://jsfiddle.net/j1dias/hpg32x7b/

我以为我可以使用 display:inline-block 和 vertical-align:center,但它们似乎没有像我预期的那样工作。

我试图避免使用 flexbox。另外我宁愿不必设置高度。

请看下面的html和css。

谢谢。

HTML

<div class="checkout-item">
  <div class="checkout-item-image">
    <img src="https://picsum.photos/536/354"/>
  </div>
    <div class="checkout-item-description">
      <span>Product name</span>
    <br>
        <span>Product description</span>
    </div>
    <div class="checkout-item-qty">
        <span>2</span>
    </div>
    <div class="checkout-item-total-price">
        <span>$90.00</span>
    </div>
</div>

CSS

.checkout-cart {
    background-color: yellow;
    padding: 20px;
    margin-bottom: 50px;
    font-size: 0.9em;
}

.checkout-item {
    position: relative;
    overflow: hidden;
    display: inline-block;
}

.checkout-item-image {
    width: 15%;
    float: left;
    margin-right: 50px;
    display: inline-block;
    vertical-align: middle;
}

.checkout-item-image img {
    vertical-align: middle;
    max-width: 100%;
}

.checkout-item-description {
    width: 30%;
    float: left;
    margin-right: 50px;
    display: inline-block;
    vertical-align: middle;
}

.checkout-item-qty {
    width: 5%;
    float: left;
    margin-right: 50px;
    font-size: 1.5em;
    font-weight: bold;
    text-align: center;
    display: inline-block;
    vertical-align: middle;
}

.checkout-item-total-price {
    width: 5%;
    float: left;
    font-size: 1.5em;
    font-weight: bold;
    text-align: right;
    display: inline-block;
    vertical-align: middle;
}

编辑

我最终遵循了建议并使用了 flexbox。好像大部分浏览器都支持。

我将display:inline-block 更改为display:flexbox

谢谢。

【问题讨论】:

  • 只是出于好奇,你为什么要避免使用 flexbox?
  • @DanMullin 我正在考虑使用 flexbox 的想法。起初我想避免它,因为我担心兼容性。但似乎大多数人都在使用它。 :)
  • 自从 CSS 出来后我就一直在写它。当 Flexbox 得到广泛支持时,它改变了生活。我仍然认为网格布局有点冒险。尽管 Flexbox 是可靠的。非常直观。不需要明确的修复或奇怪的浮动魔法来制作漂亮的布局。

标签: css vertical-alignment


【解决方案1】:

float: left 违反了你的规则。只需删除float: left。希望这对您的问题有所帮助。

【讨论】:

    【解决方案2】:

    Flexbox 正是为处理此类问题而设计的。

    只需将您的.checkout-item 上的display: inline-block; 更改为:

    display: flex;
    flex-direction: row;
    align-items: center;
    

    display: flex explanation

    flex-direction: row explanation

    align-items: center explanation

    非flexbox解决方案:

    使用display: tabledisplay: table-cell 匹配列高:

    .checkout-item {
        display: table;
    }
    
    .checkout-item > div {
      display: table-cell;
      float: none;
    }
    

    【讨论】:

    • 我试图在没有 flexbox 的情况下解决它。谢谢你的回答。 :)
    猜你喜欢
    • 2017-07-29
    • 2015-06-05
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多