简体   繁体   English

内联flex容器(display:inline-flex)正在扩展父容器的整个宽度

[英]Inline flex container (display: inline-flex) is expanding the full width of parent container

I have a DIV with display: block ( .out ). 我有一个display: block的DIV display: block.out )。

In this DIV there is a flexbox with display: inline-flex ( .row ) that has one column ( .infos ) that has a static width of 350px, and another column ( .dynamic ) which should have a dynamic width depending on the content. 在这个DIV中有一个带display: inline-flex的flexbox display: inline-flex.row )有一列( .infos ),静态宽度为350px,另一列( .dynamic )应该有动态宽度,具体取决于内容。

Now I have the problem that the outer DIV ( .row ) is growing on the full screen. 现在我.row外部DIV( .row )在全屏幕上增长的问题。 That's not my use case. 那不是我的用例。 I want a dynamic outer DIV. 我想要一个动态的外部DIV。

Please check out my fiddle: https://jsfiddle.net/2ymx9oog/ 请查看我的小提琴: https//jsfiddle.net/2ymx9oog/

 .out { border: 1px solid red; display: block; position: fixed; top: 0; left: 0; } .row { display: inline-flex; flex-direction: row; padding: 10px; border: 1px solid yellow; } .infos { border: 1px solid green; flex-basis: 350px; } .dynamic { border: 1px solid blue; flex: 1 1; } 
 <div class="out"> <div class="row"> <div class="infos"> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit a </div> <div class="dynamic"> Lorem ipsum </div> </div> </div> 

EDIT: 编辑:

Now I recognized my problem: In reality I have a third div after the other div's. 现在我认识到了我的问题:实际上我在另一个div之后有第三个div。 This third div should end with the second div, but it's content is to large. 第三个div应该以第二个div结束,但它的内容是大的。 Is there any way to do that? 有没有办法做到这一点?

Checkout my updated fiddle: https://jsfiddle.net/2ymx9oog/9/ 查看我更新的小提琴: https//jsfiddle.net/2ymx9oog/9/

Use width: 350px instead of flex-basis: 350px . 使用width: 350px而不是flex-basis: 350px

In your code, .row is first sized summing the width of its contents. 在您的代码中, .row是第一个大小, .row其内容的width Since .infos has no width , its initial size is given by its very long content. 由于.infos没有width ,因此其初始大小由其非常长的内容给出。 So .row fills all the available space in its containing block. 因此.row填充其包含块中的所有可用空间。 It's after the size of .row has been determined that the flex items do flex and .infos becomes 350px . 在确定.row的大小后,flex项目会弯曲并且.infos变为350px But then it's too late, .row is already too wide. 但是, .row已晚,。已经太宽了。

If you use width: 350px , .row will be sized using that value, without taking extra space. 如果使用width: 350px ,则.row将使用该值调整大小,而不占用额外空间。

 .out { border: 1px solid red; display: block; position: fixed; top: 0; left: 0; } .row { display: inline-flex; flex-direction: row; padding: 10px; border: 1px solid yellow; } .infos { border: 1px solid green; width: 350px; } .dynamic { border: 1px solid blue; flex: 1 1; } 
 <div class="out"> <div class="row"> <div class="infos"> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit a </div> <div class="dynamic"> Lorem ipsum </div> </div> </div> 

If i understand right, margin or align-self should do it: 如果我理解正确, marginalign-self应该这样做:

 .out { border: 1px solid red; display: block; position: fixed; top: 0; left: 0; } .row { display: inline-flex; flex-direction: row; padding: 10px; border: 1px solid yellow; } .infos { border: 1px solid green; flex-basis: 350px; } .dynamic { border: 1px solid blue; flex: 1 1; align-self:flex-start } 
 <div class="out"> <div class="row"> <div class="infos"> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit a </div> <div class="dynamic"> Lorem ipsum </div> </div> </div> 

 .out { border: 1px solid red; display: block; position: fixed; top: 0; left: 0; } .row { display: inline-flex; flex-direction: row; padding: 10px; border: 1px solid yellow; } .infos { border: 1px solid green; flex-basis: 350px; } .dynamic { border: 1px solid blue; flex: 1 1; margin-bottom: auto } 
 <div class="out"> <div class="row"> <div class="infos"> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit a </div> <div class="dynamic"> Lorem ipsum </div> </div> </div> 

if it is about the width too, then remove the flex property : https://jsfiddle.net/2ymx9oog/4/ 如果它也是宽度,那么删除flex属性: https//jsfiddle.net/2ymx9oog/4/

For both earlier example see results here : 对于前面的两个示例,请参见此处

You can play with margin or align-self 你可以玩保证金或自我对齐

example with margin:auto without flex values set https://jsfiddle.net/2ymx9oog/6/ set your dynamic box in the middle within the right area 保证金的示例:自动无灵活值设置https://jsfiddle.net/2ymx9oog/6/在右侧区域中间设置动态框

You may set it at middle top, at middle middle, middle bottom, left top, left bottom, left middle, and so on 您可以将其设置在中间顶部,中间中间,中间底部,左上角,左下角,左中间等等

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM