Every time I try to do something seemingly-simple in CSS, it doesn’t work.
I have a content div that contains a 460×160 image. All I want to do is position the image at the bottom-right corner and wrap my text around it.
<div id='contents'> <img src='...' /> text text text text text text ... </div>
So I want it to look like:
------------------ | text text text | | text text text | | text text -----| | text text | | ------------------
Doing it with a top-left or top-right image is cake:
#contents img { float:right; } ------------------ | text text | | | text text -----| | text text text | | text text text | ------------------
Now how do I push that to the bottom? The best I’ve come up with so far are:
#contents img { float:right; margin-top: 90%} // really needs to be 100%-160px ------------------ | text text | | text text | | text text -----| | text text | | ------------------
In this case the text does not print in the margin, so there is white space above the image.
#contents { position:relative; } #contents img { position:absolute; right:0; bottom:0; } -or- // move the img tag under the text in the html and: #contents img { float:right; margin-top:-160; } ------------------ | text text text | | text text text | | text text -----| | text text | te | ------------------
In this case the text prints over or under the image.
So… how can I accomplish this?
It sure seems to have been asked before (2003), and before (2002), or before (2005)
The last link actually suggest a javascript-based solution, but for a fixed (i.e. non fluid) solution.
It is consistent however, with other advices found
Or this one:
Anyway, as discussed in this thread, there is no easy solution…
Cletus mentions in the comments this thread from 2003, which states once again the fact it can not easily be achieved.
However, it does refer to this Eric Meyer’s article, which comes close to the effect you want to achieve.
Yet, Chadwick Meyer suggests in his answer a solution based on the
:beforeCSS selector (variation of Leonard‘s answer).It does work here.
Update Apr. 2021: Temani Afif suggests in his answer using Flexbox combined with a shape-outside.
But do check out the Backwards Compatibility of Flexbox, even though its support by all browsers is quite good.