Is there a way to put a full unit of space on both sides of all items, including the first and last?
I am trying to find a way to have equal spacing around flexbox children.
In this article it seems like the nearest thing is justify-content: space-around
. It says that:
space-around
: items are evenly distributed in the line with equal space around them. Note that visually the spaces aren't equal, since all the items have equal space on both sides. because that next item has its own spacing that applies. 因为下一项具有自己的适用间距。
There are at least two methods for equal space between all items, including the first and last items. One method, however, doesn't yet have full browser support.
Note this section from Firefox documentation:
In-flow
::after
and::before
pseudo-elements are now flex items .
In fact, all major browsers consider pseudo-elements on a flex container to be flex items.
Knowing that, add ::before
and ::after
to your container.
With justify-content: space-between
and zero-width pseudo-elements, the visible flex items will appear evenly spaced.
flex-container { display: flex; justify-content: space-between; } flex-container::before { content: ""; } flex-container::after { content: ""; } /* non-essential decorative styles */ flex-container { padding: 5px 0; background-color: lightyellow; border: 1px solid #aaa; } flex-item { height: 50px; width: 75px; background-color: lightgreen; }
<flex-container> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </flex-container>
space-evenly
The CSS Box Alignment Module , which is the W3C's unfinished proposal to establish a common set of alignment properties for use across all box models, provides the space-evenly
value for use with the justify-content
and align-content
properties.
4.3. Distributed Alignment: the
stretch
,space-between
,space-around
, andspace-evenly
keywords
space-evenly
The alignment subjects are evenly distributed in the alignment container, with a full-size space on either end.
The alignment subjects are distributed so that the spacing between any two adjacent alignment subjects, before the first alignment subject, and after the last alignment subject is the same.
As of this writing, however, it looks like space-evenly
only works in Firefox and Chrome .
flex-container { display: flex; justify-content: space-evenly; } /* non-essential decorative styles */ flex-container { padding: 5px 0; background-color: lightyellow; border: 1px solid #aaa; } flex-item { height: 50px; width: 75px; background-color: lightgreen; }
<flex-container> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> <flex-item></flex-item> </flex-container>
Also, here's a useful demo from the MDN justify-content
page for testing space-evenly
and other values in your browser. https://jsfiddle.net/gkrsr86n/
You can do this by setting the padding
of the flex container and the margin
of the flex items:
.container {
display: flex;
padding: 0 1%;
}
.item {
flex: 1;
margin: 0 1%;
}
In firefox only there is a space-evenly
value for justify-content
that does this.
It's in the CSS3 working draft
https://www.w3.org/TR/css-align-3/#valdef-align-content-space-evenly
div { display: flex; height: 100px; justify-content: space-evenly; border: 1px solid black; margin: auto; } span { width: 20%; background: red; }
<div> <span></span> <span></span> <span></span> </div>
This is a perfect use case for flex-basis
and justify-content: space-between
if you know how many components will be in your row beforehand. Specify a flex-basis percentage on your flex-items that totals less than 100% for all items. The leftover percentages will become margins.
No psuedo elements, child selectors or padding/margin.
div { display: flex; justify-content: space-between; height: 100px; } span { flex-basis: 32%; background: red; }
<div> <span></span> <span></span> <span></span> </div>
You could try this:
*, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .list_wrap { display: flex; flex-wrap: wrap; border: 1px solid purple; padding-top: 5px; } .list_item { width: 24%; margin-right: 0.8%; margin-bottom: 5px; height: 30px; border: 1px solid green; } .list_item:nth-child(4n+1) { margin-left: 0.8%; }
<div class="list_wrap"> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> <div class="list_item"></div> </div>
You can use flexbox's all property form here. this is perfect example for how to use complete flex property with example http://the-echoplex.net/flexyboxes/
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.