使用 flexbox 如何防止特定元素继承 flex 布局?

Posted

技术标签:

【中文标题】使用 flexbox 如何防止特定元素继承 flex 布局?【英文标题】:Using flexbox how do I prevent a specific element from inheriting flex layout? 【发布时间】:2014-10-26 12:14:18 【问题描述】:

我有一个模块.m-standout,它使用display:flex,由标题、子文本和图像组成。基本上我想使用 flex 来定位标题和子文本,然后让图像在下面占据 100% 的宽度,但目前图像占据了第三列。谁能建议我如何防止图像使用 flex,我正在尝试flex:0flex:none 之类的东西,但没有任何乐趣。

CSS

.m-standout 
    display: flex;

    .standout-heading 
        font-size: 34px;
        width: 31.28834%;
        align-self: center;

    

     .standout-desc 
        width: 52.76074%;
        align-self: center;
    

    .standout-image 

    

Codepen: http://codepen.io/styler/pen/gLaCw

【问题讨论】:

【参考方案1】:

我建议将 header 和 desc 包装在一个新的 flex 容器中(我将其命名为 flexbox)并从 m-standout 中删除 flex 属性,这是对您的笔的修改 -

.m-standout 
    .flexbox 
     display: flex;
      .standout-heading 
        flex: 1;
          font-size: 34px;
          width: 31.28834%;
          align-self: center;

      

       .standout-desc 
         flex: 1;
          width: 52.76074%;
        align-self: center;
      
    

    .standout-image 
      width: 100%; /* Remove this if you want the image to take it's natural width */
    

Codepen: http://codepen.io/anon/pen/cHmIC

【讨论】:

【参考方案2】:

尝试将flex-wrap: wrap; 添加到.m-standout

SCSS:

.m-standout 
    display: flex;
    flex-wrap: wrap;
    .standout-heading 
        font-size: 34px;
        width: 31.28834%;
        align-self: center;
    
    .standout-desc 
        width: 52.76074%;
        align-self: center;
    
    .standout-image 
    

Codepen:http://codepen.io/anon/pen/sDGxy

编辑 刚刚注意到您希望图像跨越容器的整个宽度来执行此操作,需要进行更多更改:

SCSS:

更改:

.standout-image 

收件人:

.standout-image, .standout-image img 
    width: 100%;

HTML:

更改:

<img src="http://dummyimage.com/600x400/000/fff" >

收件人:

<div class="standout-image"><img src="http://dummyimage.com/600x400/000/fff" ></div>

Codepen:http://codepen.io/anon/pen/kgxdA

【讨论】:

以上是关于使用 flexbox 如何防止特定元素继承 flex 布局?的主要内容,如果未能解决你的问题,请参考以下文章

防止弹性项目高度扩展以匹配其他弹性项目

仅使用 flexbox CSS 的水平砌体布局[重复]

flex布局

在 IE11 中使 flexbox 继承适当的宽度

如何防止柔性盒收缩?

防止 flexbox 收缩