2013-04-15 12 views
11

Próbuję utworzyć div elementu nadrzędnego w elemencie listy, który zawiera dwa elementy div dla dzieci po lewej i prawej stronie. Lewa zawiera obraz, a prawa zawierać dwa dodatkowe elementy div zawierające tekst i znacznik czasu.Dlaczego nakładają się moje elementy div?

Nie mogę uzyskać lewego i prawego elementu div do wyświetlenia bez zachodzenia na siebie.

Moje HTML wygląda następująco:

<ul class="activity-comments"> 
<li> 
<div style="border: solid 1px #ff0000;"> 
    <div style="float:left;border: solid 1px #0000ff;"> 
     <img src="http://localhost/new/img/sampleimg.png" class="thumb-small"> 
    </div> 
    <div> 
    <small>Some sample text here 1</small> 
    </div> 
    <div> 
    <small>Posted 1 day ago</small> 
    </div> 
</div> 
</li> 
<li> 
<div style="border: solid 1px #ff0000;"> 
    <div style="float:left;border: solid 1px #0000ff;"> 
     <img src="http://localhost/new/img/sampleimg.png" class="thumb-small"> 
    </div> 
    <div> 
    <small>Some sample text here 2</small> 
    </div> 
    <div> 
    <small>Posted 2 days ago</small> 
    </div> 
</div> 
</li> 
</ul> 

Spójrz na tego jsfiddle

Czego mi brakuje?

Odpowiedz

11

Są one nakładające się, ponieważ pływasz w div, ale nie czyścisz float.

Użyj metody clearfix, aby usunąć float. Dodaj klasę container do div pojemnika i używać tej CSS:

http://jsfiddle.net/57PQm/7/

.container { 
    border: solid 1px #ff0000; 
    zoom: 1; /* IE6&7 */ 
} 

.container:before, 
.container:after { 
    content: ""; 
    display: table; 
} 

.container:after { 
    clear: both; 
} 

Zauważysz również, że usunęliśmy Twojego inline CSS. Ułatwia to utrzymanie kodu.

+0

To nie jest najgorsza rzecz na świecie. To dość powszechna praktyka, ale przeczytałem gdzieś, jak to zrobić bez dodawania dodatkowego div, ale nie pamiętam tego. Sprawdzę to teraz. – Travesty3

+1

Jest to powszechna praktyka dla ludzi, którzy nadal kodują jak 2000 zamiast 2013. http://codepen.io/cimmanon/pen/qDjdr – cimmanon

+0

dodaj pseudoelement za pomocą 'clear: left | right' lub użyj' overflow' lub po prostu dostosuj obraz. – Christoph

0

Zastanawiam się, czy to jest to, czego szukasz: jsfiddle

dodałem w img{display:block;} jako obrazy pochodzą z jakiegoś ukrytego wyściółką, która rzuca elemets dół.

+2

technicznie nie jest dopełnieniem, ale wyrównaniem do linii bazowej zastąpionego elementu liniowego 'img'. Po prostu ustawienie 'vertical-align' [również będzie działało] (http://jsfiddle.net/57PQm/6/). – Christoph

0

Twoja miniatura ustawia obraz na określoną wysokość 41 pikseli. Zmień rozmiar obrazu, zmień rozmiar div lub ustaw przepełnienie zewnętrznego div.

+0

Gdzie widzisz dodatkowe obicie obrazu? – Paul

Powiązane problemy