chrism
chrism

Reputation: 2933

CSS float causing background image to appear incorrectly

I'm using a background image to add a custom bullet to list items in my content. In the content there are also images floated left. When an image and a list item are next to each other, the bullet appears where it would do if the image wasn't there, but the text wraps around the image.

Here is an example: http://golf2.test.textmatters.com/content/greenkeepers/turfgrass/turfgrass_speci/cool_season_gra

is there a way to make the bullet appear where is should (i.e. next to the text)?

Upvotes: 0

Views: 1515

Answers (6)

yunzen
yunzen

Reputation: 33439

If you want the whole ul to NOT float under the image try adding overflow:hidden to the ul

Upvotes: 0

cornelius soyo
cornelius soyo

Reputation: 11

This is an old topic... but thought I would add how I usually do this in case someone stumbles in here via a search...

If I have an image on the left, and plan to have graphic bulleted unordered list (UL) to the right of it, I place the image statement inside DIV tags, and add a float:left style to that DIV.

Then, I wrap my UL tags inside a DIV, and give that DIV a float:left style as well, causing it to appear to the right of the first DIV.

If I have additional text that I would like to resume UNDER my UL, then I give the second DIV a width that equals the total width of the page/column minus the graphic width - basically, to account for all of the space to the right of the image. That will force continuing text to flow directly under the UL DIV, and if the UL is shorter than the graphic, the text will flow to the right of the graphic and then under the graphic as expected.

If the UL extends lower than the graphic, then the text will just start under the image, as expected.

If you want the text to simply start UNDER the left graphic regardless of the height of the UL, then you could just apply a clear:both style to the ensuing

, i.e.

In general this approach works so long as the UL isn't too much taller than the left image, because obviously in this scenario, the list itself isn't going to wrap under the image, leaving whitespace - so to make a long list look right may require some purposeful image sizing, or stacking a couple of images in the first DIV, or whatever other solution you might have.

If you really want to get whacky, I've had a few times where I've used the two DIV method described above, but setting the first DIV to position:relative, and placing the second DIV containing the UL INSIDE the first, with a position:absolute and of course top:??px and right:??px, set of course to absolutely position my UL to the right of the image. It takes the right kind of layout to use this method, obviously...

OK that's all I had to say, hope this makes sense & good luck to whomever!

Upvotes: 1

jeroen
jeroen

Reputation: 91744

In Firebug / Firefox (you'll have to check other browsers) I solved your problem adding a:

li {
    overflow:hidden;
}

Don't know why exactly, but that magical line solves lots of problems around floated stuff :-)

Edit: Solution if you can change the html slightly

If you have any control over the html, you could perhaps use paragraph tags instead of list items:

p.list_item {
    background: transparent url(/++resource++stylesheets/images/bullet.gif) no-repeat scroll left 0.45em;
    padding-left: 11px;
}

However, that would kind of change the semantic meaning of the list items...

Upvotes: 2

chrism
chrism

Reputation: 2933

Well, it's not the best fix from a stylistic point of view, but floating the images right avoids this problem. Thanks for everyones suggestions

Upvotes: 0

Emily
Emily

Reputation: 10088

Why do you have div.fig width set to 0 in the html?

<div class="fig" style="width: 0px;"><img src="/images/43_Fescue.jpg" float="0"/></div>

Remove that and the list will float around the image.

Upvotes: 0

AlbertoPL
AlbertoPL

Reputation: 11509

Try wrapping your list items in a <p> tag, and then give that tag a left margin.

Upvotes: 0

Related Questions