简体   繁体   English

如何使子元素在Flexbox中每行对齐2

[英]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. 两个变化。

  1. Add 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%宽度内,而不是在其外部。
  2. Use 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. 否则,由于它们是块级的,而不是本示例中flexbox的一部分,因此它们将始终以新行开始。

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-itemflex-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.

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