NSouth
NSouth

Reputation: 5276

How do I set the max width of flexbox content while allowing the container to keep growing?

Goals:

Restrictions:

Essentially, this is what I want on larger screens. However, I achieved this by adding a div between .parent and its children, which I can't do in the real code. enter image description here

Here is my basic structure (without the intermediate div I'm not allowed to use):

.parent {
  background-color: lightblue;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.child {
  content: "";
  width: 80px;
  height: 80px;
  margin: 10px;
  background-color: red;
}
<div class="parent">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>

Upvotes: 0

Views: 32

Answers (1)

WillD
WillD

Reputation: 6512

You can do this by setting a dynamic padding left and right on the parent div.

Add the following to the css rule for .parent:

  padding: 0 max(calc(50vw - 832px / 2), 20px);
  width: 100%;
  box-sizing: border-box;

Adjust the max width of the area with the red boxes by changing the 832px part to the width you would like. 832 gets you 8 boxes.

.parent {
  background-color: lightblue;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding: 0 max(calc(50vw - 832px / 2), 20px);
  width: 100%;
  box-sizing: border-box;
}

.child {
  content: "";
  width: 80px;
  height: 80px;
  margin: 10px;
  background-color: red;
}
<div class="parent">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>

Upvotes: 1

Related Questions