Good. Therefore, #d3 should not be on the right, because it does not swim, but you used display:table . This gives a reason to swim with the other two divs for some reason.
Since it uses display: table #d3 , the fields are not displayed on the page, but are not considered "not suitable" and do not lead it to the next line.
#d2 floats, so its DO fields affect it. Thus, in the small range that you are experiencing, this #d1 + #d2 will not match due to the fact that their fields increase the overall width of the larger size, but #d1 + #d3 will be because #d3 does not depend on it the edge on the right side gives the combo an overall smaller width.
A simple solution is also float #d3 :
#d3 { background-color: #ede4ad; border: 3px dotted #6e5b3c; clear: right; float: left; }
source share