2015-09-28 6 views
8

Ich möchte dieses Ergebnis mit HTML und CSS erreichen:Positionselemente um eine andere mit CSS

enter image description here

Wo die rote Box einen großen Inhalt ist (A PDF-Inhalt) und die blauen drum herum organisieren . Zuerst an seiner Seite und dann, wenn genug Platz ist, darunter.

Meine HTML-Struktur ist wie folgt, aber ich kann es ändern:

<div id="outerContainer"> 
    <div id="bigRedBox"></div> 
    <div> 
     <ul id="blueContentList"> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
      <li class="blueContent"></li> 
     </ul> 
    </div> 
</div> 

Inzwischen bleibt die Positionierung wie folgt aus:

enter image description here

Ich weiß nicht, ob dies ist möglich, ohne zwei Container aufzustellen (einen auf der Seite, einen darunter), was ich tun kann, aber würde mich viele JS schreiben lassen.

+1

Wenn Sie die Breite von allem im Voraus wissen, können Sie nicht einfach "float: left" auf dem roten div? Dann müssen Sie nur sicherstellen, dass die blauen divs die richtige Breite haben, um in 1 Spalte auf der Seite zu passen. – Basic

+0

Sie möchten in so etwas wie flexbox suchen. – Rob

+0

Zusätzlich zu @Rob können Sie auch einen Blick in [Isotope] (http://isotope.metafizzy.co/) werfen – Jan

Antwort

2

Sie könnten für die Listeneinträge etwas tun, natürlich, es ist nicht ansprechbar ist, aber man kann% oder Medienabfragen verwenden, es zu optimieren.

#blueContentList li{ 
    width: 100px; 
    height: 100px; 
    background-color: blue; 
    margin: 10px; 
    float: left; 
} 

http://jsfiddle.net/tomsarduy/ywms6soq/

+0

Ich habe genau das erreicht, was ich wollte, danke! –

1

Sie können die Grid-Struktur überprüfen, die bereits von Bootstrap bereitgestellt wird. Alternativ können Sie auch versuchen, dies zu erreichen, indem Sie auf alle quadratischen Elemente float : left anwenden.

9

Sie können erreichen, was Sie wollen, indem Sie alle Elemente schweben und Geschwister voneinander haben.

#bigRedBox { 
 
    width:80%; 
 
    height:150px; 
 
    background-color:red; 
 
    float:left; 
 
    margin:5px; 
 
} 
 
.blueContent { 
 
    width:15%; 
 
    height:50px; 
 
    background-color:blue; 
 
    float:left; 
 
    margin:5px; 
 
}
<div id="outerContainer"> 
 
    <div id="bigRedBox"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
    <div class="blueContent"></div> 
 
</div>

+0

Es wäre besser, die Listenstruktur zu behalten, aber das ist eine einfache Lösung. –

2

Ich persönlich würde nicht schwimmt verwenden. Ich empfehle einen Spalten-/Zeilentyp des Layouts. hier ist eine Geige: http://jsfiddle.net/xa91f4Lw/

nur display: inline-block verwenden und die Verwendung von einfachen div s machen, wenn Sie etwas Neues "Reihe"


neue Geige sein wollen: http://jsfiddle.net/xa91f4Lw/1/

oder dies: http://jsfiddle.net/xa91f4Lw/2/

+0

Das wäre schwer für mich, denn diese Seite ist dynamisch und ich müsste berechnen, wo jedes Element platziert werden soll. Warum sollten Sie das float-Attribut vermeiden? –

+1

schwimmt Elemente aus dem normalen Layout der Seite, die ich nicht mag. Sie werden gezwungen, mehr Schwimmer zu verwenden oder die Höhen/Breiten der Dinge zu berechnen. Die Verwendung von Inline-Block eignet sich für dynamische Seiten, da die Größe des Containers abhängig von der Menge des Inhalts auf der Seite geändert wird. Ich werde die Geige mit einer Alternative aktualisieren –

Verwandte Themen