html - 如何在 table/flex 中使用 100% 高度的图像?

标签 html css flexbox css-grid

在缩小和扩大网站时,我很难让页眉区域按照我想要的方式运行。 header 应该完全响应。

我想要什么

标题由三部分组成:

|-------------------|----------------------------------------------|--------------|
||-----------------||                                              ||------------||
||  The site logo  ||    A text message                            ||Another logo||
||-----------------||                                              ||------------||
|-------------------|----------------------------------------------|--------------|

我希望规则是这样的:

  • Logo 占文档宽度的 40%,但不能超过 400 像素。这是通过 widthmax-width 完成的。高度是动态/自动的。
  • 短信栏将尽可能宽,但没有固定宽度。
  • 右侧的另一个 Logo 将是列的 100% 高度,该高度基于左侧站点 Logo 的高度。

问题

问题是,如果不与整个文档一样大,似乎不可能使 右侧的 Logo 达到 100% 的高度。我希望它具有列的高度,就好像 Logo 不在其中一样。

我尝试过的

我已经尝试了 table 解决方案(“div with display:table”)和 flex 网格解决方案(divdisplay:flex)。最近提到的是我目前正在努力解决的问题。

body {
  font-family: Roboto, Arial, Helvetica, sans-serif;
  font-size: 14px;
  color: #fff;
  background: #20262e;
}

.container {
  display: flex; 
  flex-direction: row;
}

.col {
  vertical-align: middle;
  background: hsla(0,0%,100%,.1);
  margin:2px;
  padding:10px;
}

.col.logo {
  width: 40%;
  max-width: 400px;
}

.col.logo img {
  width: 100%;
  height: auto;
}

.col.game-host-logo img {
  width:auto;
  max-width: 100%;
  height: 100%;
}
<div class="container">

  <div class="col logo">
    <img src="https://dromfemman.se/assets/img/dromfemman_logo.png" />
  </div>

  <div class="col live-msg">
    Text Message
  </div>

  <div class="col game-host-logo">
    <img src="https://dromfemman.se/assets/img/ssl_logo.svg" />
  </div>

</div>

最佳答案

这里主要有两个问题:

  1. flex 容器或图像元素没有固定高度。
  2. 包含图像的 flex 元素没有固定宽度。

问题 #1: flex 容器或图像元素没有固定高度。

因为 flex 容器或包含图像的元素 (.col.game-host-logo) 没有固定高度,两者的大小都基于内容的大小 (高度:自动默认,per the spec)。

在这种情况下,内容是自然尺寸为 482 x 565 像素的图像。

enter image description here

enter image description here


问题 #2:包含图像的 flex 元素没有固定宽度。

因为包含图片的元素没有固定宽度,所以图片可以再次自由扩展到其自然尺寸。

通过为元素设置宽度,您的问题似乎已得到解决,并且没有违反您的任何要求。

jsFiddle demo

.container {
  display: flex;
}

.col.logo {
  width: 40%;
  max-width: 400px;
}

.col.logo img {
  max-width: 100%;
  height: auto;
}

.col.live-msg {
  flex: 1;                  /* consumes all free space */
}

.col.game-host-logo {
  width: 20%;               /* new */
}

.col.game-host-logo img {
  max-width: 100%;
}

.col {
  background: hsla(0, 0%, 100%, .1);
  margin: 2px;
  padding: 10px;
}

body {
  font-family: Roboto, Arial, Helvetica, sans-serif;
  font-size: 14px;
  color: #fff;
  background: #20262e;
}
<div class="container">

  <div class="col logo">
    <img src="https://dromfemman.se/assets/img/dromfemman_logo.png" />
  </div>

  <div class="col live-msg">
    Text Message
  </div>

  <div class="col game-host-logo">
    <img src="https://dromfemman.se/assets/img/ssl_logo.svg" />
  </div>

</div>

关于html - 如何在 table/flex 中使用 100% 高度的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53293848/

相关文章:

html - <small> 标签可以在 HTML5 标题内(即 h1、h2、h3 等)吗?

php - 从 mysql 返回多个结果以分离 jQuery 模态

html5 Canvas 元素和 svg

javascript - 如何从svg <a>点击加载div中的本地html

html - Flexbox 等高元素,具有动态高度,无需指定高度或比例

html - 如何更改 div 元素的背景颜色以匹配主体背景颜色?

html - 加载 GIF(预加载器)仅在 Chrome 上卡住

javascript - 动态更改元素的类名并立即更改页面的外观

html - Column flexbox : wrap to width limit, 然后增长高度?

html - Flexbox - 显示页眉和页脚