Warum expandiert der Körper nicht zu seinem Inhalt?

9

Ich habe eine Tabelle, die über den Rand des Bildschirms hinausragt, aber der Körper wird nur so breit wie der Bildschirm, wodurch die Tabelle überläuft.

Demo: Ссылка

%Vor%

Das ist eines dieser Dinge, die mich denken lassen, dass CSS kaputt ist. Ich dachte, dass sich Elemente, die enthalten sind, ausdehnen sollten, um zu ihren Inhalten zu passen.

Frage 1: Warum macht es das?

Frage 2: Was soll ich tun, um einen Abstand zwischen der Tabelle und dem rechten Rand der Seite zu erhalten?

    
Alan Lynn 27.01.2014, 18:46
quelle

5 Antworten

8

Wenn Sie display:table; auf body oder html setzen, wird die Breite über 100% des Ansichtsfensters vergrößert. es wird einfach erweitert wie ein table tut :)

%Vor%

Ссылка

andere Optionen:

G-Cyr 27.01.2014, 18:52
quelle
4

CSS ist nicht kaputt, das Verhalten, das Sie sehen, ist von Entwurf .

Einige Zitate aus dem obigen Link:

  

Die folgenden Bedingungen müssen zwischen den verwendeten Werten der anderen Eigenschaften gelten:

     

'Rand-Links' + 'Rand-Links-Breite' + 'Rand-Links' + 'Breite' + 'Rand-rechts' + 'Rand-Rechts-Breite' + 'Rand-Rechts' = Breite des Umfassens Blockieren

     

..

     

Wenn 'width' auf 'auto' gesetzt ist, werden alle anderen 'auto' Werte zu '0' und 'width' folgt aus der resultierenden Gleichheit.

Daraus ergibt sich, dass Elemente auf Blockebene die Standardbreite von 100% ihres umgebenden Blocks haben, wenn alle anderen Eigenschaften nicht gesetzt sind.

<body> ist standardmäßig ein Element auf Blockebene.

Sie könnten float: left; oder display: inline-block auf body setzen und es wird mit seinem Inhalt wachsen.

Hier ist ein jsFiddle

.

Um Frage 2 zu beantworten (um das Ergebnis der akzeptierten Antwort zu erhalten, ohne display: table auf ein Element zu setzen, das kein table ist), können Sie das folgendermaßen tun:

CSS:

%Vor%

Hier ist ein jsFiddle

.

    
Mathijs Flietstra 27.01.2014 19:28
quelle
2

Es ist sehr seltsam, dass die einfachste Lösung nicht erwähnt wurde:

%Vor%

Leider funktioniert das nicht überall und erfordert immer noch eine Vorsilbe. In Chrome (mit Blink in diesen Tagen) wäre das: -webkit-fit-content ( -webkit- in Blink, komisch).

    
Rudie 31.01.2014 22:32
quelle
0

Die einzige Lösung hierfür ist eine vertikale Bildlaufleiste. Es kann mit einem zusätzlichen div erreicht werden, das table umschließt.

Dies wäre das CSS:

%Vor%

Wenn Sie nur p -Tag haben, hilft das Attribut word-wrap:break-word; . Sie können den Absatz auch außerhalb von div verschieben, wodurch Sie den gesamten Inhalt ohne Scrollen sehen können.

Siehe die Geige für eine funktionierende Lösung:

Ссылка

Wenn Sie die gesamte Seite scrollen möchten, und nicht nur das div, kann dies verwendet werden:

%Vor%

Siehe Ссылка

Wenn Sie die Bildlaufleiste überhaupt nicht möchten, müssen Sie anstelle einer Tabelle Listen oder divs verwenden.

    
maja 27.01.2014 18:54
quelle
-1

Wie Sie die tr- und td-Tags verwendet haben, sind die Daten in der Tabelle zwangsläufig überlaufen.

Sie müssen entscheiden, wie viele Zeilen und Spalten Ihre Tabelle haben soll, wenn Sie eine einfache HTML-Tabelle verwenden. Setzen Sie einfach tr und td Tags entsprechend, und dann sind Sie fertig. Ссылка Fiddle

    
Mirage 27.01.2014 18:59
quelle

Tags und Links