[英]How to make child elements align 2 per row in flexbox
Here is my current css: 这是我当前的CSS:
.course-widget { margin: 0 auto; display: flex; flex-wrap: wrap; border-radius: 49px 49px 49px 49px; -moz-border-radius: 49px 49px 49px 49px; -webkit-border-radius: 49px 49px 49px 49px; border: 1px solid #000000; /*shadow effect*/ -webkit-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); -moz-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); } .widget-section { margin: 10px; width: 100%; border: 1px solid #000000; } .questions-section { width: 100%; } .question-item { border: 2px solid #ff0000; color: #00AC7F; width: 50%; }
<div class="course-widget"> <div class="widget-section">Top</div> <div class="widget-section">Middle</div> <div class="widget-section questions-section"> <div class="question-item">option 1</div> <div class="question-item">option 2</div> <div class="question-item">option 3</div> <div class="question-item">option 4</div> </div> </div>
What this currently give me: 目前,这给了我什么:
How do I get the 'option' div's to align as 2 per row (equally sized) instead of stacking on top of each other? 如何获得“选项” div以每行2个(大小相等)对齐,而不是彼此堆叠? Is this possible using only flexbox?
仅使用flexbox可以做到吗?
Add display: flex
to the other div .questions-section
too. 添加
display: flex
到另一个div .questions-section
。
Also, to avoid padding and border from increasing the size of the elements, you should add box-sizing: border-box
. 另外,为避免填充和边框增加元素的大小,应添加
box-sizing: border-box
。 I've applied it to all elements. 我已将其应用于所有元素。
https://jsfiddle.net/kbkb5b4m/ https://jsfiddle.net/kbkb5b4m/
.course-widget { margin: 0 auto; display: flex; flex-wrap: wrap; border-radius: 49px 49px 49px 49px; -moz-border-radius: 49px 49px 49px 49px; -webkit-border-radius: 49px 49px 49px 49px; border: 1px solid #000000; /*shadow effect*/ -webkit-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); -moz-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); } .widget-section { margin: 10px; width: 100%; border: 1px solid #000000; } .questions-section { width: 100%; display: flex; flex-wrap: wrap; } .question-item { border: 2px solid #ff0000; color: #00AC7F; width: 50%; } * { box-sizing: border-box; }
<div class="course-widget"> <div class="widget-section">Top </div> <div class="widget-section">Middle</div> <div class="widget-section questions-section"> <div class="question-item"> option 1</div> <div class="question-item"> option 2</div> <div class="question-item"> option 3</div> <div class="question-item"> option 4</div> </div> </div>
Two changes. 两个变化。
box-sizing: border-box
to all elements. box-sizing: border-box
。 This way the red border is included inside the 50%
width, not outside it. 50%
宽度内,而不是在其外部。 float: left
on those four elements so they can be flush against each other. float: left
在这四个元素上,以便它们可以彼此齐平。 Otherwise, since they're block-level and not part of the flexbox in this example, they'll always begin on new lines. Updated demo below: 更新了下面的演示:
* { box-sizing: border-box; } .course-widget { margin: 0 auto; display: flex; flex-wrap: wrap; border-radius: 49px 49px 49px 49px; -moz-border-radius: 49px 49px 49px 49px; -webkit-border-radius: 49px 49px 49px 49px; border: 1px solid #000000; /*shadow effect*/ -webkit-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); -moz-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); } .widget-section { margin: 10px; width: 100%; border: 1px solid #000000; } .questions-section { width: 100%; } .question-item { border: 2px solid #ff0000; color: #00AC7F; float: left; width: 50%; }
<div class="course-widget"> <div class="widget-section">Top</div> <div class="widget-section">Middle</div> <div class="widget-section questions-section"> <div class="question-item">option 1</div> <div class="question-item">option 2</div> <div class="question-item">option 3</div> <div class="question-item">option 4</div> </div> </div>
Change this: 更改此:
.questions-section {
width: 100%;
}
.question-item {
border: 2px solid #ff0000;
color: #00AC7F;
width: 50%;
}
To this: 对此:
.questions-section {
display: flex;
flex-wrap: wrap;
}
.question-item {
border: 2px solid #ff0000;
color: #00AC7F;
flex: 0 0 50%;
box-sizing: border-box;
}
Only direct children of a flex-container are included in the flex context. flex上下文中仅包含flex容器的直接子级。
You need to declare another flex-container. 您需要声明另一个flex容器。
.course-widget { margin: 0 auto; display: flex; flex-wrap: wrap; border-radius: 49px 49px 49px 49px; -moz-border-radius: 49px 49px 49px 49px; -webkit-border-radius: 49px 49px 49px 49px; border: 1px solid #000000; /*shadow effect*/ -webkit-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); -moz-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); } .widget-section { margin: 10px; width: 100%; border: 1px solid #000000; } .questions-section { display: flex; flex-wrap: wrap; } .question-item { border: 2px solid #ff0000; color: #00AC7F; flex: 0 0 50%; box-sizing: border-box; }
<div class="course-widget"> <div class="widget-section">Top</div> <div class="widget-section">Middle</div> <div class="widget-section questions-section"> <div class="question-item">option 1</div> <div class="question-item">option 2</div> <div class="question-item">option 3</div> <div class="question-item">option 4</div> </div> </div>
If you want to have some spacing between items use the property justify-content
in .questions-section
and decrease the flex-basis
of the .question-item
like so: 如果要在项目之间
.questions-section
出一定的间距,请使用.questions-section
justify-content
属性,并降低.question-item
的flex-basis
,如下.question-item
:
.course-widget { margin: 0 auto; display: flex; flex-wrap: wrap; border-radius: 49px 49px 49px 49px; -moz-border-radius: 49px 49px 49px 49px; -webkit-border-radius: 49px 49px 49px 49px; border: 1px solid #000000; /*shadow effect*/ -webkit-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); -moz-box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); box-shadow: 11px 11px 30px 0px rgba(0, 0, 0, 0.42); } .widget-section { margin: 10px; width: 100%; border: 1px solid #000000; } .questions-section { display: flex; flex-wrap: wrap; justify-content: space-between; } .question-item { border: 2px solid #ff0000; color: #00AC7F; flex: 0 0 48%; box-sizing: border-box; }
<div class="course-widget"> <div class="widget-section">Top</div> <div class="widget-section">Middle</div> <div class="widget-section questions-section"> <div class="question-item">option 1</div> <div class="question-item">option 2</div> <div class="question-item">option 3</div> <div class="question-item">option 4</div> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.