Using clear: both;
will clear the floats and will render the element below, inorder to make that work, you need to take out clear: both;
from div h3
selector.
Also, if you want to float
the header to the right
you need to use float: right;
rather using left
.
This is what the clear: both;
does to your example, it kinda acts like a wall between two floated elements.

Also this answer of mine will help you to understand how floats really work and the other one will help you understand clear both.
clear: both;
is to clear the floated elements, so in your code, you should create a snippet of something like
.clear:after {
clear: both;
content: "";
display: table;
}
And now use the above snippet on your container element which will self clear the element like, rest stays the same but as I said you need to remove clear: both;
from div h3
<div class="clear">
<p>I'm a paragraph and I'm on the left!!!</p>
<h3>I'm a header and I'm on the right</h3>
</div>
What will happen if I don't clear the floats?
Well, say you have a background
applied to the parent element, the color won't render at all, see it yourself...
Demo 1 (floats aren't cleared so you don't see the red
background)
Demo 2 (floats are cleared, you can see a red
background now)
It's not just about the background-color
, if you have third element, than it will just sit beside the other two, so inorder to prevent that, we use clear: both;
as well. I've covered these aspects in the answers I provided the link for.