Ist so etwas mit CSS und zwei Inline-Block-DIV-Tags (oder was auch immer) möglich, anstatt eine Tabelle zu verwenden?
Die Tabellenversion lautet wie folgt (Rahmen hinzugefügt, damit Sie sie sehen können):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table style="width:100%;">
<tr>
<td style="border:1px solid black;width:100px;height:10px;"></td>
<td style="border:1px solid black;height:10px;"></td>
</tr>
</table>
</body>
</html>
Es wird eine linke Spalte mit einer FESTEN BREITE (keine prozentuale Breite) und eine rechte Spalte erstellt, die erweitert wird, um den verbleibenden Bereich in der Zeile auszufüllen . Klingt ziemlich einfach, oder? Da außerdem nichts "schwebt", wird die Höhe des übergeordneten Containers ordnungsgemäß erweitert, um die Höhe des Inhalts zu erfassen.
--BEGIN RANT--
Ich habe die Implementierungen "Clear Fix" und " Holy Grail " für mehrspaltige Layouts mit seitlicher Spalte mit fester Breite gesehen, und sie saugen und sind kompliziert. Sie kehren die Reihenfolge der Elemente um, verwenden prozentuale Breiten oder verwenden Gleitkommazahlen, negative Ränder, und die Beziehung zwischen den Attributen "links", "rechts" und "Rand" ist komplex. Darüber hinaus sind die Layouts subpixelempfindlich, sodass durch Hinzufügen eines einzelnen Pixels mit Rändern, Auffüllungen oder Rändern das gesamte Layout unterbrochen und ganze Spalten in die nächste Zeile umgebrochen werden. Zum Beispiel sind Rundungsfehler ein Problem, selbst wenn Sie versuchen, etwas Einfaches zu tun, z. B. 4 Elemente in eine Linie zu setzen, wobei die Breite jedes Elements auf 25% festgelegt ist.
--END RANT--
Ich habe versucht, "Inline-Block" und "White-Space: Nowrap;" zu verwenden, aber das Problem ist, dass ich das zweite Element nicht dazu bringen kann, den verbleibenden Platz in der Zeile zu füllen . Das Festlegen der Breite auf "width: 100% - (LeftColumWidth) px" funktioniert in einigen Fällen, aber das Durchführen einer Berechnung in einer width-Eigenschaft wird nicht wirklich unterstützt.
quelle
display: table-*
Konstrukt umzuwandeln, das funktionieren wird, aber auch nicht wirklich "semantischer" ist (ein schrecklicher Fall vondiv
Suppe) und die IE6-Kompatibilität bricht. Ich persönlich würde mich an die halten<table>
, es sei denn, jemand schafft es, eine geniale, einfache Idee zu entwickeln, die ohne funktioniertAntworten:
Siehe: http://jsfiddle.net/qx32C/36/
Warum hat ersetze ich
margin-left: 100px
mitoverflow: hidden
auf.right
?EDIT: Hier sind zwei Spiegel für den obigen (toten) Link:
quelle
box-sizing: border-box
auf demdiv
s. Nur eine Vermutung, da Sie keine Demo zur Verfügung gestellt haben, die das von Ihnen beschriebene Verhalten zeigt. That being said, diedisplay: table
ist -basierte Lösung in der Regel besser . Dies ist eine sehr alte Frage, aber ich glaube, ich habe versucht, aufgrund des Verhaltens von OP alles zu vermeiden, was mit Tabellen in dieser Frage zu tun hat.Eine moderne Lösung mit Flexbox:
http://jsfiddle.net/m5Xz2/100/
quelle
flex: 1
statt Flex verwendenwidth: 100%
?flex: 1
ist eine Abkürzung fürflex-grow: 1
. Es ist ein Kombinationsattribut :flex: <grow> <shrink> <basis>
.flexbugs
Sie wissen.Kompatibel mit herkömmlichen modernen Browsern (IE 8+): http://jsfiddle.net/m5Xz2/3/
quelle
display:table
.inline-block
der Rest der Zeile ausgefüllt werden soll.Sie können calc (100% - 100px) für das Fluidelement zusammen mit display: inline-block für beide Elemente verwenden.
Beachten Sie, dass zwischen den Tags kein Leerzeichen stehen darf, da Sie dieses Leerzeichen sonst auch in Ihrer Berechnung berücksichtigen müssen.
Kurzes Beispiel: http://jsfiddle.net/dw689mt4/1/
quelle
Ich habe
flex-grow
Eigentum verwendet, um dieses Ziel zu erreichen. Sie werden zum Satz habendisplay: flex
für übergeordnete Container, dann müssen Sie Satzflex-grow: 1
für den Block Sie verbleibenden Raum füllen wollen, oder einfach nurflex: 1
als tanius in den Kommentaren erwähnt.quelle
Wenn Sie CSS-Hacks / Workarounds nicht verwenden können
overflow: hidden
(weil Sie dies nicht möchtenoverflow: hidden
) oder nicht mögen, können Sie stattdessen JavaScript verwenden. Beachten Sie, dass es möglicherweise nicht so gut funktioniert, da es sich um JavaScript handelt.http://jsfiddle.net/ys2eogxm/
quelle
Wenn Sie die Inline-Blöcke aufgeben
http://jsfiddle.net/RXrvZ/3731/
(aus CSS Float: Ein Bild links vom Text schweben lassen )
quelle