2008-08-31 25 views
72

Ich habe ein Container Div mit einer festen Breite und Höhe, mit Überlauf: versteckt.CSS - Make Divs horizontal ausrichten

Ich möchte eine horizontale Reihe von float: linken Divs in diesem Container. Divs, die nach links schweben, drücken natürlich auf die "Linie", nachdem sie die rechte Grenze ihres Elternteils gelesen haben. Dies wird auch dann passieren, wenn die Höhe des Elternteils dies nicht zulassen sollte. Dies ist, wie folgt aussieht:

[Wrong] [1] - entfernt Bild Hütte Bild, das durch eine Anzeige ersetzt worden war

Wie ich würde es aussehen mögen:!

[Recht ] [2] - entfernt Bild Hütte Bild, das durch eine Anzeige

Hinweis ersetzt worden war: der Effekt, den ich will, kann erreicht werden durch Verwendung von Inline-Elementen & white-space: no-Wrap (das ist, wie ich es tat in dem Bild gezeigt). Dies ist jedoch nicht gut für mich (aus Gründen, die zu langwierig sind, um es hier zu erklären), da die Kind-Divs blockierte Level-Elemente sein müssen.

+5

Ihre Bildlinks scheinen gebrochen zu haben. Wenn Sie noch Originale haben, laden Sie sie bitte erneut auf stack.imgur hoch. Vielen Dank! –

Antwort

84

Sie können ein inneres div in den Container einfügen, das breit genug ist, um alle Floated Divs aufzunehmen.

#container { 
 
    background-color: red; 
 
    overflow: hidden; 
 
    width: 200px; 
 
} 
 

 
#inner { 
 
    overflow: hidden; 
 
    width: 2000px; 
 
} 
 

 
.child { 
 
    float: left; 
 
    background-color: blue; 
 
    width: 50px; 
 
    height: 50px; 
 
}
<div id="container"> 
 
    <div id="inner"> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    <div class="child"></div> 
 
    </div> 
 
</div>

+0

wie kann ich dann das outer div center machen? Ich habe versucht, add align = "center" auf der äußeren div, scheint nicht funktioniert. – hakunami

+0

Dies funktioniert auch für prozentuale Breiten. In meinem Fall verwende ich ein Container-div mit 'width: 200%;' und die untergeordneten Elemente sind jeweils 'width: 50%; '. Ich kann dann 'transform: translateX (n%);' auf dem Container verwenden, um einen Karussell-Effekt zu emulieren, solange ich einen übergeordneten Container mit 'overflow: hidden;' habe – evolross

3

Dies scheint nahe, was Sie wollen:

#foo { 
 
    background: red; 
 
    max-height: 100px; 
 
    overflow-y: hidden; 
 
} 
 

 
.bar { 
 
    background: blue; 
 
    width: 100px; 
 
    height: 100px; 
 
    float: left; 
 
    margin: 1em; 
 
}
<div id="foo"> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
    <div class="bar"></div> 
 
</div>

4

Sie die clip Eigenschaft verwenden:

#container { 
    position: absolute; 
    clip: rect(0px,200px,100px,0px); 
    overflow: hidden; 
    background: red; 
} 

Note der position: absolute und overflow: hidden benötigt, um clip zu erhalten arbeiten.

+3

Wie unterstützt der Clip den Browser? – alex

+0

Von http://www.w3schools.com/cssref/pr_pos_clip.asp: Die Clip-Eigenschaft wird in allen gängigen Browsern unterstützt. Hinweis: Der Wert "inherit" wird in IE7 und früheren Versionen nicht unterstützt. IE8 benötigt einen! DOCTYPE. IE9 unterstützt "erben". – dsomnus

26

style="overflow:hidden" für Eltern div und style="float: left" für all das Kind divs sind wichtig, um die divs align horizontal für alten Browser wie IE7 und unten zu machen.

Für moderne Browser können Sie style="display: table-cell" für alle untergeordneten divs verwenden, und es würde horizontal richtig rendern.

1

Float sie nach links. Zumindest in Chrome benötigen Sie im Beispiel von LucaM keinen Wrapper, id="container".

2

Float: links, Anzeige: Inline-Block kann beide Elemente nicht horizontal ausrichten, wenn sie die Breite des Containers überschreiten.

Es ist wichtig, dass der Behälter, wenn die Elemente horizontal angezeigt werden muss wickeln sollte nicht zu beachten: white-space: nowrap

1

Sie jetzt css Flexbox divs horizontal und vertikal ausrichten können, wenn Sie benötigen.allgemeine Formel geht so

parent-div { 
    display:flex; 
    flex-wrap: wrap; 
    justify-content: center ; /* for horizontal aligning of child divs */ 
    align-items : center ; /* for vertical aligning */ 
    } 
child-div { 
    width: /* yoursize for each div */ ; 
} 
Verwandte Themen