Если вы используете «float: right», сделайте это первым в строке:
<div style="border: solid 1px red; text-align: center">
<div style="float:right; background-color: yellow">right</div>
<div style="background-color: yellow; float: left">left</div>
middle
</div>
В противном случае он всегда попадает в следующую текстовую строку.
но почему !!!!!
(1) Поскольку после того, как вы начали размещать статический текст в строке, у вас есть неопределенная ширина для размещения плавающего элемента. Скажем, вы написали:
abc abc abc <div style="float: left">xyz xyz</div> abc abc abc
Теперь представьте, что вы начинаете изменять размер этого окна так, чтобы «abc abc abc» просто помещался в первой строке. Теперь вы встречаете поплавок и пытаетесь включить его в строку, на которой вы находитесь. Но он не подходит: чтобы соответствовать ему, вы должны иметь «abc xyz xyz» на строке, перекомпоновав оставшиеся «abc» на следующую строку. Но! Теперь вы переместили точку вставки поплавка вниз по линии, поэтому поплавок тоже должен опускаться по линии. Но! Теперь первая строка не обернута должным образом, потому что есть место для трех «abc», но строка была преждевременно закончена, чтобы освободить место для всплывающего сообщения, которое фактически происходит дальше вниз по странице ...
Стандарт CSS разрешает этот логический тупик, создавая поплавок в строке со встроенным текстом, прежде чем он ждет следующей строки.
(2) Потому что именно это Netscape сделал с <img float="right">
много-много лет назад.