【问题标题】:Using flexbox why two images with different proportions stretch differently使用 flexbox 为什么两个不同比例的图像拉伸不同
【发布时间】:2019-01-31 15:08:23
【问题描述】:

我想为左侧一张大图和垂直对齐的两张右侧图片的卡片制作一个 flexbox 网格。一切都很好,并且在 1280 像素的桌面上对齐,但是当图像拉伸为响应式视图时,左侧的图像拉伸得更快,卡片不再垂直对齐。

这里有一个说明问题的代码笔: https://codepen.io/actik/pen/xaZqmG

.wrap {
  width: 100%;
  max-width: 1280px;
  margin: 0 auto;
}

.flex {
  display: flex;
  box-sizing: border-box;
  align-items: flex-start;
}

.row {
  flex-flow: row wrap;
}

.col {
  flex-flow: column wrap;
}

.structure-100 {
  flex: 1 100%;
}

.structure-50 {
  flex: 1 50%;
}

.content {
  color: #fff;
  background-color: #aa0000;
  width: 100%;
  flex: 1 100%;
}

.element_left {
  flex: 1 50%;
  padding-right: 15px;
  padding-bottom: 30px;
}

.element_right {
  flex: 1 50%;
  padding-left: 15px;
  padding-bottom: 30px;
}

.content-text {
  padding: 0 10px;
}

img {
  max-width: 100%;
  height: auto;
  align-self: center;
}
  <div class="wrap">
    <div class="flex row structure-100">     

        <div class="flex col structure-50">    
            <div class="flex element_left">
                <div class="content">
                    <img src="http://www.placebacon.net/625/875/" alt="">
                    <div class="content-text">
                      <h2>Card title</h2>
                      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                    </div>
                </div>
            </div>
        </div>



        <div class="flex col structure-50">

            <div class="flex element_right">
              <div class="content">
                <img src="http://www.placebacon.net/625/360" alt="">
                <div class="content-text">
                  <h2>Card title</h2>
                  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                </div>
              </div>
            </div>
            <div class="flex element_right">
                <div class="content">
                    <img src="http://www.placebacon.net/625/360" alt="">
                    <div class="content-text">
                      <h2>Card title</h2>
                      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                    </div>
                </div>
            </div>

        </div>

    </div>
</div>

我做了很多不同的测试,无法理解这种行为,欢迎任何提示,感谢您的帮助!

编辑:这里 1280px 的版本工作(标题卡在底部对齐)和第二个版本在减小宽度时,2 个图像的底部和标题卡不再对齐。如有必要,我希望红色部分在其底部添加空间,但保持图像和标题对齐。

working version not working

Big image is squashed.

【问题讨论】:

  • 尝试使用media queries 来响应您要创建的断点。
  • 我将使用媒体查询来获取手机尺寸,但对于大屏幕,这不是媒体查询问题,flexbox 容器必须拉伸,也许我的问题不清楚?
  • 是的,你的问题不是那么清楚。我建议您至少设置 3 个断点:针对手机等小型设备、平板电脑等中型设备、大型设备。
  • 感谢您的帮助,好的,我会尝试更清楚:如果您减少代码笔上的浏览器宽度,您会看到当您处于 1280px 容器大小以下时,例如 1100px,左卡不再与右卡的底部对齐。所有红色块的高度都相同,所以这来自图像拉伸,而不是媒体查询问题。这有帮助吗?
  • 看看我的回答。

标签: css image flexbox responsive


【解决方案1】:

正如我从我们在 cmets 的谈话中了解到的那样,您的问题是左侧部分带有“大”图像(图像不存在于您提供的 sn-p 中,它们存在于您的 CodePen 演示中)确实提供了它的链接)没有像预期的那样拉伸,因为在你的CSS 中你给.flex 类提供了align-items: flex-start; 的规则,这意味着弹性容器的元素应该放在顶部(垂直),因此,它不会让元素拉伸,相反,您只需在 .flex 类中将这一行 align-items: flex-start; 替换为 align-items: stretch;,这样该类就变为:

.flex {
   display: flex;
   box-sizing: border-box;
   align-items: stretch;
}

这是一个可运行的 sn-p:

$gutter: 30px;

.wrap{
    width: 100%;
    max-width: 1280px;
    margin: 0 auto;
}

.flex {
    display: flex;
    box-sizing: border-box;
    align-items: stretch;
}

.row {
    flex-flow: row wrap;
}

.col {
    flex-flow: column wrap;
}

.structure-100 {
    flex: 1 percentage(1/1);
}

.structure-50 {
    flex: 1 percentage(1/2);
}

.content {
  color: #fff;
  background-color: #aa0000;
  width: 100%;
  flex: 1 100%; 
  }
.element_left .content {
  display: flex; 
  flex-flow: column wrap;
  }
.element_left {
    flex: 1 percentage(1/2);
    padding-right: $gutter / 2;
    padding-bottom: $gutter;
}
    
.element_right {
    flex: 1 percentage(1/2);
    padding-left: $gutter / 2;
    padding-bottom: $gutter;
}

.content-text {
    padding: 0 10px;
}
.element_left .content .content-text {
  flex-grow: 0;
  margin-top: auto;
}
img {
    max-width: 100%; 
    height: auto;
}
.element_left .content img {
  width: 100%;
  flex-grow: 1;
  align-self: flex-start;
}
  <div class="wrap">
    <div class="flex row structure-100">     

        <div class="flex col structure-50">    
            <div class="flex element_left">
                <div class="content">
                    <img src="http://www.placebacon.net/625/875/" alt="">
                    <div class="content-text">
                      <h2>Card title</h2>
                      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                    </div>
                </div>
            </div>
        </div>



        <div class="flex col structure-50">

            <div class="flex element_right">
              <div class="content">
                <img src="http://www.placebacon.net/625/360" alt="">
                <div class="content-text">
                  <h2>Card title</h2>
                  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                </div>
              </div>
            </div>
            <div class="flex element_right">
                <div class="content">
                    <img src="http://www.placebacon.net/625/360" alt="">
                    <div class="content-text">
                      <h2>Card title</h2>
                      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus interdum lacus vitae aliquam ullamcorper.</p>
                    </div>
                </div>
            </div>

        </div>

    </div>
</div>

希望我把你推得更远。

【讨论】:

  • 感谢您的宝贵时间,是的,它更好,但是当您减小宽度时,图像仍然没有对齐,红色部分的高度正在增加。我用“align-items:stretch;”修改了codepen这样您就可以通过图像查看结果。 (我不知道为什么sn-p版本上不显示图像,所以请以codepen作为参考)。也许我必须在具有适当拉伸属性的“.content-text”div 上添加 flex 属性?
  • 能否请您提供屏幕截图,以便我弄清楚问题所在。
  • 我用 2 个截图工作版本编辑了我的问题,但没有工作。
  • 再次感谢您,这几乎是完美的,但现在图像顶部与右侧图像不一致。我不明白为什么大图像没有填满他容器的所有空间。我已经用你的建议更新了 codepen,所以你可以看到结果。
  • @actik 检查答案,我更新了它,现在一切都应该完美了。
猜你喜欢
  • 2022-11-01
  • 2016-10-03
  • 1970-01-01
  • 2012-07-25
  • 2017-05-09
  • 2018-01-26
  • 2019-12-22
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多