【问题标题】:Vertically center two floating images [duplicate]垂直居中两个浮动图像[重复]
【发布时间】:2021-01-04 05:14:59
【问题描述】:

我需要将两个徽标图像放在同一行,彼此垂直居中。 像这样的:

仅此一项我可以使用 CSS vertical-align: middle; 轻松实现,但我还需要图像分别位于最左侧和最右侧;所以通常我会用float: leftfloat: right 来做,但随后vertical-align 停止工作......

另一个限制是我不手动编写 HTML,而是由工具(确切地说是 pandoc)生成。

长话短说,我对 HTML 有以下两种选择:

选项 1

<div id="logo-block">
  <p>
    <img id="logo1" src="https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg" />
  </p>
  <p>
    <img id="logo2" src="https://www.festisite.nl/static/partylogo/img/logos/burger-king.png" />
  </p>
</div>

选项 2

<div id="logo-block">
  <p>
    <img id="logo1" src="https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg" />
    <img id="logo2" src="https://www.festisite.nl/static/partylogo/img/logos/burger-king.png" />
  </p>
</div>

能否请您帮我设计这些 HTML sn-ps 的样式,以便我将两个图像垂直居中在“logo-block”边界内,“logo1”在最左边,“logo2”在最左边对吧?

【问题讨论】:

  • @TemaniAfif 我不认为这是其中任何一个问题的重复。垂直对齐只是问题的一部分——OP 还需要在容器的最左侧显示一个图像,在容器的最右侧显示另一个图像。
  • @FluffyKitten 让我们复制更多。拥有 Flexbox 副本就足以解决问题,因为左/右对齐是一个微不足道的问题,可以通过在使用 flexbox 时简单地更改一个属性来获得
  • @TemaniAfif 这对你来说可能是微不足道的,但对 OP 来说却不是——如果是,他们就不必问了!
  • 确实,那些建议的“重复”并不完全涵盖我的情况。我不熟悉 flexbox 语法,上面的问题没有显示“justify-content: space-between”选项。无论如何,下面@Priya 的答案似乎完美地完成了这项工作!
  • @TemaniAfif ...只有在我们不得不要求解决问题的第二部分之后:)

标签: html css


【解决方案1】:

由 CSS Flexbox 解决:

最好的办法是在一个弹性盒子里面嵌套一个弹性盒子。您所要做的就是给孩子align-items: center。这将垂直对齐其父项内部的文本。使用 display: flex 可以控制 HTML 元素的垂直对齐方式。

选项 1 sn-p:

#logo-block {
    display: flex;
    align-content: center;
    align-items: center; border:2px solid red; max-width:500px; justify-content:space-between;
}
#logo-block img { 
    max-width: 100px; 
}
 <div id="logo-block">
  <p>
    <img id="logo1" src="https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg" />
  </p>
  <p>
    <img id="logo2" src="https://www.festisite.nl/static/partylogo/img/logos/burger-king.png" />
  </p>
</div>

选项 2 sn-p:**

#logo-block {
    width: 500px;
    border: 2px solid red;
}

#logo-block > p {
    display: flex;
    align-content: center;
    align-items: center; justify-content: space-between;
}
#logo-block img{ 
    max-width: 100px; 
}
<div id="logo-block">
  <p>
    <img id="logo1" src="https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg" />
    <img id="logo2" src="https://www.festisite.nl/static/partylogo/img/logos/burger-king.png" />
  </p>
</div>

如果工具(pandoc + wkhtmltopdf)不支持 CSS Flexbox,请使用display: table-cell 方法:

#logo-block {
    display: table;
    width:100%;
    max-width:500px;
    border:2px solid red;
}
#logo-block p {
    display:table-cell;
    vertical-align:middle;
}
#logo-block p:last-child {
    text-align:right;
}
#logo-block img {
    max-width: 100px;
}
<div id="logo-block">
  <p> <img id="logo1" src="https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg" /> </p>
  <p> <img id="logo2" src="https://www.festisite.nl/static/partylogo/img/logos/burger-king.png" /> </p>
</div>

【讨论】:

  • 但这并不能解决水平对齐要求。我需要左侧徽标位于线条的左侧,右侧徽标位于右侧(这就是我想对图像使用 float: left;float: right 所做的,但这会破坏您的方法和vertical-alignment 方法)。
  • 使用 CSS flexbox 这也是可能的。我正在通过此修复更新我的 sn-p。请在 5 分钟后入住。
  • 谢谢,我认为这完全涵盖了我的情况! justify-content: space-between 完成了缺失的魔法!
  • 仅供参考 - 就我而言,我必须添加 QT Webkit 特定的 CSS 属性,因为我使用的工具 (pandoc + wkhtmltopdf) 不完全支持 CSS Flexbox...所以有这种行为:{ display: flex; align-content: center; align-items: center; justify-content: space-between },我需要添加这些:{ display: -webkit-box; -webkit-box-pack: justify; -webkit-box-align: center; -webkit-align-items: center }。幸运的是,一旦您知道选项存在,查找特定于引擎的语法就会容易得多 =)
  • @DmitryPerets 如果您的工具不完全支持 CSS Flexbox,我也更新了我的答案。
【解决方案2】:

我更喜欢用background-size:containbackground-position: center 的图片作为背景。这样,图像大小和图像形状不再重要。它会显示在画布允许的范围内。这也非常敏感:

#logo-block >div{
  display: inline-block;
  width: 100px;
  height: 100px;
  margin: 10px;
  background-size: contain;
  background-position: center;
  background-repeat: no-repeat;
  border: 1px dotted grey; /* Just for demo, to show the 'canvas' */
}
<div id="logo-block">
    <div style="background-image: url('https://upload.wikimedia.org/wikipedia/commons/4/4b/McDonald%27s_logo.svg');"></div>     
    <div style="background-image: url('https://www.festisite.nl/static/partylogo/img/logos/burger-king.png');"></div>
</div>

【讨论】:

  • 我无法控制生成的 HTML,正如我在问题中提到的那样。我只能生成选项 1 sn-p 或选项 2 sn-p。但我可以随意编写任何我想要的 CSS。
猜你喜欢
  • 2011-04-08
  • 2013-03-29
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多