2503 Stimmen

Wie kann ich ein Div nicht größer als sein Inhalt machen?

Ich habe ein ähnliches Layout:

<div>
    <table>
    </table>
</div>

Ich möchte, dass die div nur so weit ausdehnen, wie mein table wird.

109 Stimmen

Der Effekt wird "shrinkwrapping" genannt, und wie bereits erwähnt, gibt es mehrere Möglichkeiten, dies zu tun (float, inline, min/max-width), die alle verschiedene Nebeneffekte haben

1 Stimmen

Keine der unten aufgeführten Antworten hat bei mir funktioniert, außer: display: table -OR- height: fit-content !!!

2825voto

user473598 Punkte 27183

Die Lösung besteht darin, Ihre div a display: inline-block .

368voto

buti-oxa Punkte 10911

Sie wollen ein Blockelement, das eine Breite hat, die CSS "shrink-to-fit" nennt, und die Spezifikation bietet keine gesegnete Möglichkeit, so etwas zu erhalten. In CSS2 ist "shrink-to-fit" kein Ziel, sondern ein Mittel, um mit einer Situation umzugehen, in der der Browser eine Breite aus der Luft holen "muss". Solche Situationen sind:

  • Schwimmer
  • absolut positioniertes Element
  • Inline-Block-Element
  • Tischelement

wenn keine Breite angegeben ist. Ich habe gehört, sie denken über das Hinzufügen, was Sie wollen in CSS3. Für jetzt, machen Sie mit einem der oben genannten zu tun.

Die Entscheidung, die Funktion nicht direkt zu veröffentlichen, mag seltsam erscheinen, aber es gibt einen guten Grund dafür. Es ist teuer. Einschrumpfen bedeutet, dass man mindestens zweimal formatieren muss: Man kann nicht mit der Formatierung eines Elements beginnen, bevor man seine Breite kennt, und man kann die Breite nicht berechnen, ohne den gesamten Inhalt zu durchlaufen. Außerdem braucht man das Schrumpfen nicht so oft, wie man vielleicht denkt. Warum brauchen Sie ein zusätzliches Div um Ihre Tabelle? Vielleicht ist die Tabellenüberschrift alles, was Sie brauchen.

266voto

mbillard Punkte 37218

Ich denke, mit

display: inline-block;

würde funktionieren, aber ich bin mir nicht sicher, ob der Browser kompatibel ist.


Eine andere Lösung wäre, Ihre div in einem anderen div (wenn Sie das Blockverhalten beibehalten wollen):

HTML:

<div>
    <div class="yourdiv">
        content
    </div>
</div>

CSS:

.yourdiv
{
    display: inline;
}

257voto

Vitalii Fedorenko Punkte 103468

Sie können versuchen fit-content (CSS3):

div {
  width: fit-content; 
  /* To adjust the height as well */ 
  height: fit-content;
}

251voto

Salman von Abbas Punkte 22782

display: inline-block fügt einen zusätzlichen Rand zu Ihrem Element hinzu.

Ich würde dies empfehlen:

#element {
    display: table; /* IE8+ and all other modern browsers */
}

Bonus: Sie können jetzt auch ganz einfach das neue, schicke #element einfach durch Hinzufügen von margin: 0 auto .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X