flex-basis respects box-sizing: border-box .
This is flex-shrink , which results in a size difference.
If you remove flex-shrink effects, box-sizing: border-box works fine with flex-basis :
Instead of this:
header > span { flex: 1 1 100%; }
Try the following:
header > span { flex: 1 0 100%; }
Demo
Although border-box now works, now elements have their true width (100%). Of course, this can be fixed as follows:
header > span { flex: 1 0 33.33%; }
Demo
Size calculations when flex-shrink are combined with border-box and / or padding are a bit complicated. Here is an explanation:
source share