If you check the documentation you will read this:
As float implies the use of the block layout, it modifies the computed
value of the display values, in some cases:
Which means that your floated span
become block elements inside an inline element that breaks your layout.
You can also notice that padding-top
/padding-bottom
and border-top
/border-bottom
doesn't affect the height of the outer
div. This is because only the line-height
is used when calculating the height of the line boxref; thus the height of the outer
div is equal to the height of the line box. (you may increase the line-height to see the difference)
In order to fix both issues, you can change the display of the .inner
span to inline-block
:
#outer {
margin-top: 50px;
margin-left: 50px;
width: 300px;
border: 1px solid lightgrey;
}
.inner {
border: 1px solid red;
padding: 15px 0 15px 40px; /*remove padding-right to have them close to the red line*/
position: relative;
display:inline-block;
}
.up, .down {
border: 1px solid #000;
float: right;
}
.down {
clear: both;
}
<div id="outer">
<span class="inner">
<span class="quantity">Quantity</span>
<span class="up">up</span>
<span class="down">down</span>
</span>
</div>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…