Wie kann ich die folgende Struktur erreichen, ohne Tabellen oder JavaScript zu verwenden? Die weißen Ränder stellen Kanten von Divs dar und sind für die Frage nicht relevant.
Die Größe des Bereichs in der Mitte wird variieren, es werden jedoch genaue Pixelwerte angezeigt, und die gesamte Struktur sollte entsprechend diesen Werten skaliert werden. Um es zu vereinfachen, müsste ich die Breite "100% - n px" auf die oberen, mittleren und unteren mittleren Divs einstellen.
Ich würde eine saubere browserübergreifende Lösung begrüßen, aber falls dies nicht möglich ist, reichen CSS-Hacks aus.
Hier ist ein Bonus. Eine andere Struktur, mit der ich zu kämpfen habe und die am Ende Tabellen oder JavaScript verwendet. Es ist etwas anders, bringt aber neue Probleme mit sich. Ich habe es hauptsächlich in jQuery-basierten Fenstersystemen verwendet, aber ich möchte das Layout aus dem Skript heraushalten und nur die Größe eines Elements (des mittleren) steuern.
Antworten:
Sie können verschachtelte Elemente und Auffüllungen verwenden, um einen linken und rechten Rand in der Symbolleiste zu erhalten. Die Standardbreite eines
div
Elements istauto
, dh es verwendet die verfügbare Breite. Sie können dem Element dann eine Auffüllung hinzufügen, die weiterhin in der verfügbaren Breite bleibt.Hier ist ein Beispiel, das Sie verwenden können, um Bilder als linke und rechte abgerundete Ecken und ein zentriertes Bild, das sich zwischen ihnen wiederholt, einzufügen.
Der HTML:
Das CSS:
quelle
>
Bediener noch nicht gut genug war, um zuverlässig zu sein.calc
IE 8 oder aktuelle Versionen von Anroid Browser oder Opera. caniuse.com/#search=calcNeuer Weg, auf den ich gerade gestoßen bin: css
calc()
:Quelle: CSS-Breite 100% minus 100px
quelle
Während Guffas Antwort in vielen Situationen funktioniert, möchten Sie in einigen Fällen möglicherweise nicht, dass das linke und / oder rechte Polsterteil das übergeordnete Element des mittleren Divs ist. In diesen Fällen können Sie einen Blockformatierungskontext in der Mitte verwenden und die Padding-Divs nach links und rechts verschieben. Hier ist der Code
Der HTML:
Das CSS:
Ich bin der Meinung, dass diese Elementhierarchie im Vergleich zu verschachtelten verschachtelten Divs natürlicher ist und besser darstellt, was auf der Seite steht. Aus diesem Grund können Ränder, Polster und Ränder normal auf alle Elemente angewendet werden (dh: Diese „Natürlichkeit“ geht über den Stil hinaus und hat Auswirkungen).
Beachten Sie, dass dies nur für Divs und andere Elemente funktioniert, die die Eigenschaft "Standardmäßig 100% der Breite füllen" gemeinsam nutzen. Für Eingaben, Tabellen und möglicherweise andere müssen Sie sie in ein Container-Div einschließen und etwas mehr CSS hinzufügen, um diese Qualität wiederherzustellen. Wenn Sie das Pech haben, in dieser Situation zu sein, kontaktieren Sie mich und ich werde das CSS ausgraben.
jsfiddle hier: jsfiddle.net/RgdeQ
Genießen!
quelle
Sie können das Flexbox- Layout verwenden. Sie müssen
flex: 1
das Element festlegen, für das eine dynamische Breite bzw. Höhe erforderlich istflex-direction: row and column
.Dynamische Breite:
HTML
CSS
Ausgabe:
Code-Snippet anzeigen
Dynamische Höhe:
HTML
CSS
Ausgabe:
Code-Snippet anzeigen
quelle
Die übliche Vorgehensweise wird von Guffa, verschachtelten Elementen, beschrieben. Es ist ein bisschen traurig, zusätzliche Markups hinzufügen zu müssen, um die Haken zu bekommen, die Sie dafür benötigen, aber in der Praxis wird ein Wrapper-Div hier oder da niemanden verletzen.
Wenn Sie dies ohne zusätzliche Elemente tun müssen (z. B. wenn Sie keine Kontrolle über das Seitenmarkup haben), können Sie die Box-Größe verwenden , die eine recht anständige, aber nicht vollständige oder einfache Browserunterstützung bietet. Wahrscheinlich mehr Spaß, als sich auf Skripte verlassen zu müssen.
quelle
Vielleicht bin ich dumm, aber ist Tisch hier nicht die offensichtliche Lösung?
Ein anderer Weg, den ich in Chrom herausgefunden habe, ist noch einfacher, aber Mann, es ist ein Hack!
Dies allein sollte den Rest der Zeile horizontal ausfüllen, wie es Tabellenzellen tun. Es treten jedoch einige seltsame Probleme auf, wenn es über 100% des übergeordneten Elements hinausgeht. Wenn Sie die Breite auf einen Prozentwert festlegen, wird dies jedoch behoben.
quelle
Dies können wir mit Flex-Box sehr einfach erreichen.
Wenn wir drei Elemente wie Header, MiddleContainer und Footer haben. Und wir möchten Kopf- und Fußzeile eine feste Höhe geben. dann können wir so schreiben:
Für React / RN (Standardeinstellungen sind "Anzeige" als Flex und "FlexDirection" als Spalte) müssen wir in Web-CSS den Body-Container oder Container, der diese enthält, als Anzeige angeben: "Flex", Flex-Richtung: "Spalte". Wie unten:
quelle
Was ist, wenn Ihr Wrapping-Div 100% war und Sie das Auffüllen für eine Pixelmenge verwendet haben? Wenn das Auffüllen # dynamisch sein muss, können Sie mit jQuery einfach das Auffüllen ändern, wenn Ihre Ereignisse ausgelöst werden.
quelle
Ich hatte ein ähnliches Problem, bei dem ich ein Banner oben auf dem Bildschirm mit einem Bild links und einem sich wiederholenden Bild rechts am Bildschirmrand haben wollte. Am Ende habe ich es so gelöst:
CSS:
Der Schlüssel war das richtige Etikett. Ich gebe im Grunde an, dass ich möchte, dass es von 131 Pixel von links auf 0 Pixel von rechts wiederholt wird.
quelle
In einigen Kontexten können Sie die Randeinstellungen nutzen, um effektiv "100% Breite minus N Pixel" anzugeben. Siehe die akzeptierte Antwort auf diese Frage .
quelle