Ich habe einen Behälter mit Flüssigkeitsbreite DIV.
Innerhalb dieser habe ich 4 DIVs alle 300px x 250px ...
<div id="container">
<div class="box1"> </div>
<div class="box2"> </div>
<div class="box3"> </div>
<div class="box4"> </div>
</div>
Was ich tun möchte, ist, dass Box 1 nach links schwebt, Box 4 nach rechts schwebt und Box 2 und 3 gleichmäßig zwischen ihnen verteilt werden. Ich möchte, dass der Abstand auch flüssig ist, damit der Browser kleiner wird, wenn der Browser kleiner wird.
html
css
fluid-layout
Lee Price
quelle
quelle
display:inline-block;
statt schweben?inline-block
aufinline
ElementeAntworten:
Siehe: http://jsfiddle.net/thirtydot/EDp8R/
text-align: justify
kombiniert mit.stretch
ist das, was die Positionierung handhabt.display:inline-block; *display:inline; zoom:1
Korrektureninline-block
für IE6 / 7 finden Sie hier .font-size: 0; line-height: 0
behebt ein kleines Problem in IE6.Das extra
span
(.stretch
) kann durch ersetzt werden:after
.Dies funktioniert immer noch in allen Browsern wie die obige Lösung.
:after
funktioniert nicht in IE6 / 7, aber sie verwenden esdistribute-all-lines
trotzdem, also spielt es keine Rolle.Siehe: http://jsfiddle.net/thirtydot/EDp8R/3/
Es gibt einen kleinen Nachteil
:after
: Damit die letzte Zeile in Safari einwandfrei funktioniert, müssen Sie mit den Leerzeichen im HTML-Code vorsichtig sein.Insbesondere funktioniert dies nicht:
Und das tut:
Sie können dies für eine beliebige Anzahl von Kindern verwenden,
div
ohneboxN
jeder Klasse eine Klasse hinzuzufügen , indem Sie sie ändernzu
Dies wählt jedes Div aus, das das erste Kind des
#container
Div ist, und keine anderen darunter. Um die Hintergrundfarben zu verallgemeinern, können Sie den CSS3-Selektor n-ter Ordnung verwenden , obwohl er nur in IE9 + und anderen modernen Browsern unterstützt wird:wird:
Sehen Sie hier für ein jsfiddle Beispiel.
quelle
<div/><div/><div/>
, funktioniert er nicht. Sie müssen haben<div/> <div/> <div/>
.justify
für einen solchen Fall zu verwenden, aber ich danke Ihnen, dass Sie eine funktionierende Lösung bereitstellen. hat mir viele Experimente erspart (trotz des 3h Debugging: D). Zusätzlich könnte ich eine Notiz hinzufügen, dass, wenn Sie möchten, dass Ihre letzte Reihe.stretch
/:after
wird benötigt, da (normalerweise) bei gerechtfertigtem Text die letzte Zeile nicht gerechtfertigt ist . Hier wollen wir, dass die letzte Zeile gerechtfertigt ist, daher die Notwendigkeit für:after
. Was Ihre zweite Frage betrifft, habe ich dies vor einiger Zeit in einer früheren Antwort untersucht . In dieser Antwort war JavaScript erforderlich. Wenn Sie ältere Browser (IE8) unterstützen müssen, benötigen Sie meines Erachtens JavaScript.Der einfachste Weg, dies jetzt zu tun, ist mit einer Flexbox:
http://css-tricks.com/snippets/css/a-guide-to-flexbox/
Das CSS ist dann einfach:
Demo: http://jsfiddle.net/QPrk3/
Dies wird derzeit jedoch nur von relativ neuen Browsern ( http://caniuse.com/flexbox ) unterstützt. Außerdem wurde die Spezifikation für das Flexbox-Layout einige Male geändert, sodass mehr Browser abgedeckt werden können, indem zusätzlich eine ältere Syntax hinzugefügt wird:
http://css-tricks.com/old-flexbox-and-new-flexbox/
http://css-tricks.com/using-flexbox/
quelle
Wenn CSS3 eine Option ist, kann dies mit der CSS-
calc()
Funktion erfolgen.Fall 1: Ausrichten von Feldern in einer einzelnen Zeile ( FIDDLE )
Markup ist einfach - eine Reihe von Divs mit einem Containerelement.
CSS sieht folgendermaßen aus:
wo -1px , um einen IE9 + Calc / Rounding-Fehler zu beheben - siehe hier
Fall 2: Ausrichten von Feldern in mehreren Zeilen ( FIDDLE )
Hier sind neben der
calc()
Funktionmedia queries
auch notwendig.Die Grundidee besteht darin, eine Medienabfrage für jeden # columns-Status einzurichten, in der ich dann calc () verwende, um den rechten Rand für jedes der Elemente (mit Ausnahme der Elemente in der letzten Spalte) zu ermitteln.
Das klingt nach viel Arbeit, aber wenn Sie WENIGER oder SASS verwenden, kann dies ganz einfach durchgeführt werden
(Es kann immer noch mit normalem CSS durchgeführt werden, aber dann müssen Sie alle Berechnungen manuell durchführen. Wenn Sie dann Ihre Boxbreite ändern, müssen Sie alles erneut ausarbeiten.)
Unten ist ein Beispiel mit WENIGER: (Sie können diesen Code hier kopieren / einfügen, um damit zu spielen. [Es ist auch der Code, mit dem ich die oben erwähnte Geige generiert habe.])
Grundsätzlich müssen Sie also zunächst eine Boxbreite und einen Mindestabstand zwischen den Boxen festlegen.
Damit können Sie herausfinden, wie viel Speicherplatz Sie für jeden Status benötigen.
Verwenden Sie dann calc (), um den rechten Rand zu berechnen, und nth-child, um den rechten Rand aus den Feldern in der letzten Spalte zu entfernen.
Der Vorteil dieser Antwort gegenüber der akzeptierten Antwort, die verwendet
text-align:justify
wird, besteht darin, dass bei mehr als einer Reihe von Feldern die Felder in der letzten Zeile nicht "gerechtfertigt" werden, z. B.: Wenn in der letzten Zeile noch 2 Felder vorhanden sind - I. Ich möchte nicht, dass das erste Feld links und das nächste rechts angezeigt wird, sondern dass die Felder der Reihe nach aufeinander folgen.In Bezug auf die Browserunterstützung : Dies funktioniert unter IE9 +, Firefox, Chrome, Safari6.0 + - (siehe hier für weitere Details).
Ich habe jedoch festgestellt, dass unter IE9 + eingewisser Fehler zwischen den Status derMedienabfrage besteht.[Wenn jemand weiß, wie man das behebt, würde ich es gerne wissen :)]<- HIER BEHOBENquelle
Andere Beiträge haben Flexbox erwähnt , aber wenn mehr als eine Reihe von Elementen erforderlich ist , schlägt die
space-between
Eigenschaft von Flexbox fehl (siehe Ende des Beitrags).Bisher ist die einzige saubere Lösung dafür die mit dem
CSS-Grid-Layout-Modul ( Codepen-Demo )
Grundsätzlich läuft der relevante Code darauf hinaus:
1) Machen Sie das Containerelement zu einem Gittercontainer
2) Stellen Sie das Raster nach Bedarf mit einer 'automatischen' Anzahl von Spalten ein. Dies erfolgt für reaktionsschnelle Layouts. Die Breite jeder Spalte beträgt 120 Pixel. (Beachten Sie die Verwendung von
auto-fit
(wie angegebenauto-fill
), die (für ein 1-Zeilen-Layout) leere Spuren auf 0 reduziert, sodass die Elemente erweitert werden können, um den verbleibenden Platz einzunehmen. ( Sehen Sie sich diese Demo an, um zu sehen, wovon ich spreche )).3) Legen Sie Lücken / Rinnen für die Rasterzeilen und -spalten fest - da hier ein Zwischenraum-Layout gewünscht wird, ist die Lücke tatsächlich eine minimale Lücke, da sie nach Bedarf wächst.
4) und 5) - Ähnlich wie bei der Flexbox.
Codepen-Demo (Größe ändern, um den Effekt zu sehen)
Browser-Unterstützung - Caniuse
Derzeit unterstützt von Chrome (Blink), Firefox, Safari und Edge! ... mit teilweiser Unterstützung von IE (siehe diesen Beitrag von Rachel Andrew)
NB:
Die
space-between
Eigenschaft von Flexbox eignet sich hervorragend für eine Elementreihe. Wenn sie jedoch auf einen Flex-Container angewendet wird, der die Elemente umschließt (mitflex-wrap: wrap
), schlägt dies fehl, da Sie keine Kontrolle über die Ausrichtung der letzten Elementreihe haben. Die letzte Zeile ist immer gerechtfertigt (normalerweise nicht das, was Sie wollen).Demonstrieren:
Code-Snippet anzeigen
Codepen (Größe ändern, um zu sehen, wovon ich spreche)
Weitere Informationen zu CSS-Grids:
quelle
Dies funktionierte bei mir mit 5 Bildern in verschiedenen Größen.
Dies funktioniert aufgrund von Begründungsinhalten: Leerzeichen dazwischen und in einer Liste, die horizontal angezeigt wird.
Auf CSS
Auf HTML
quelle
in können
jQuery
Sie den Elternteil direkt ansprechen.Dadurch kann
parent
daschildren
Produkt horizontal wachsen, wenn es hinzugefügt wird.HINWEIS: Dies setzt voraus, dass die
'.children'
awidth
undHeight
Set habenIch hoffe, das hilft.
quelle
Wenn Sie die Anzahl der Elemente pro "Zeile" und die Breite des Containers kennen, können Sie mit einem Selektor den Elementen, die Sie für ein gerechtfertigtes Aussehen benötigen, einen Rand hinzufügen.
Ich hatte Reihen von drei Divs, die ich begründen wollte, also benutzte ich:
.tile:nth-child(3n+2) { margin: 0 10px }
Dadurch kann das mittlere Div in jeder Reihe einen Rand haben, der das 1. und 3. Div an die Außenkanten des Containers drückt
Ideal auch für andere Dinge wie Rahmenhintergrundfarben usw.
quelle