DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Die CSS-Eigenschaft width legt die Breite des Inhaltsbereichs eines Elements fest. Dieser „Inhaltsbereich“ ist der Teil innerhalb von Padding, Border und Margin eines Elements (das Box-Modell).
.wrap {
width: 80%;
}
Im obigen Beispiel sind Elemente mit dem Klassennamen .wrap zu 80 % so breit wie ihr Elternelement. Akzeptierte Werte sind alle Längenwerte, zusätzlich zu einigen später behandelten Schlüsselwörtern.
Die Breite kann durch die eng verwandten Eigenschaften min-width und max-width überschrieben werden.
.wrapper-1 {
width: 100%;
max-width: 320px; /* Will be AT MOST 320px wide */
}
.wrapper-2 {
width: 100%;
min-width: 20em; /* Will be AT LEAST 20em wide */
}
Tiefer graben
Bei der Verwendung von Prozent (%) für die Breite müssen Autoren bedenken, dass sich der Prozentsatz auf das Elternelement bezieht, also auf die Breite des enthaltenden Blocks. Wenn Ihr Elternteil auf 480 Pixel eingestellt ist – wie in unserem Demo gezeigt –, dann basiert der Prozentsatz auf diesem Wert. In unserem Fall ergeben 50 % von 480 Pixeln also 240 Pixel als berechneten Pixelwert.
Beachten Sie, dass width für alle Elemente außer nicht ersetzten oder Inline-Elementen, Tabellenzeilen und Zeilengruppen (d. h. thead, tfoot und tbody) gilt. Es scheint eine leichte Diskrepanz zu geben, wie HTML nicht ersetzte Elemente definiert und wie CSS sie definiert, aber wir beziehen uns darauf, wie CSS es tut: Elemente, deren Inhalt nicht durch das Tag selbst definiert wird, wie z. B. ein <img> mit dem Attribut src.
Für absolut positionierte Elemente, deren enthaltender Block auf einem Block-Container-Element basiert, wird der Prozentsatz im Verhältnis zur Breite der Padding-Box dieses Elements berechnet.
Schlüsselwort-Werte
Mit einigen speziellen Schlüsselwort-Werten ist es möglich, die Breite (und/oder Höhe) entsprechend dem Inhalt des Elements zu definieren.
min-content
Der Wert min-content ist das kleinste Maß, das um seinen Inhalt passt, wenn alle **weichen Umbruchmöglichkeiten** innerhalb der Box genutzt werden.
Das beste Beispiel für diese Art von Wert ist ein korrekt geschriebenes figure-Element

Sobald wir dieser Markup einige grundlegende Stile zugewiesen haben, erhalten wir
Wenn wir möchten, dass das Figure-Element im Wesentlichen die Größe dieses Bildes hat, sodass der Text an den Rändern des Bildes umbricht. Wir könnten es nach links oder rechts floaten, da float das gleiche „Shrink-to-Fit“-Verhalten aufweist, aber was, wenn wir es zentrieren möchten? min-content ermöglicht uns das Zentrieren.
Da wir min-content dem figure-Element zugewiesen haben, nimmt es die minimale Breite an, die es haben kann, wenn es alle weichen Umbruchmöglichkeiten (wie Leerzeichen zwischen Wörtern) nutzt, sodass der Inhalt immer noch in die Box passt.
max-content
Die Eigenschaft max-content bezieht sich auf das schmalste Maß, das eine Box einnehmen kann, um ihren Inhalt aufzunehmen – wenn keine weichen Umbruchmöglichkeiten innerhalb des Elements genutzt werden.
Schauen Sie, was passiert, wenn wir dies auf unser einfaches Kätzchen/Figure-Demo anwenden
Da die Bildunterschrift viel länger ist als das Bild breit ist (sie nutzt keine weichen Umbruchmöglichkeiten wie Leerzeichen zwischen Wörtern), muss sie die Bildunterschrift in einer einzigen Zeile anzeigen, wodurch die figure so breit wie diese Zeile ist.
fill-available
???. Eines der großen Rätsel des Lebens.
fit-content
Der Wert fit-content ist in seinem Verhalten grob äquivalent zu margin-left: auto und margin-right: auto, außer dass er für unbekannte Breiten funktioniert.
Nehmen wir zum Beispiel an, wir müssen eine Inline-Navigation über die Seite zentrieren. Am besten wenden Sie text-align: center auf die ul und display: inline-block auf die li an. Dies würde Ihnen etwas wie das Folgende geben
Der blaue Hintergrund (vom ul-Element) erstreckt sich jedoch über das gesamte Dokument, da die ul ein Block-Level-Element ist, was bedeutet, dass ihre Breite nur durch ihr enthaltendes Element begrenzt ist. Was, wenn wir möchten, dass der blaue Hintergrund um die Listenelemente herum zusammenfällt? fit-content hilft!
Mit fit-content und margin: 1em auto funktioniert das wie am Schnürchen und nur die Navigation hat einen farbigen Hintergrund, nicht die gesamte Dokumentbreite.
Wenn Sie auf so etwas stehen, werden Sie sich freuen zu wissen, dass die Formel zur Bestimmung der Größe einer fit-content-Länge lautet
fit-content = min(max-content, max(min-content, fill-available))
Dies ist ein ziemlich ungenutzter Wert. Wenn Ihnen also ein großartiger Anwendungsfall einfällt, lassen Sie es uns wissen!
Browser-Unterstützung
| IE | Edge | Firefox | Chrome | Safari | Opera |
|---|---|---|---|---|---|
| Alle | Alle | Alle | Alle | Alle | Alle |
| Android Chrome | Android Firefox | Android Browser | iOS Safari | Opera Mobile |
|---|---|---|---|---|
| Alle | Alle | Alle | Alle | Alle |
Die speziellen Schlüsselwort-Werte scheinen in IE10 nicht zu funktionieren.
Was meinen Sie mit „der Prozentsatz wird im Verhältnis zur Breite der Padding-Box dieses Elements berechnet“? Bedeutet das, dass das Padding zu Ihrer Prozentbreite hinzugerechnet wird, oder ist es enthalten?
Die Bilder in den Figuren sind kaputt, Chris.
Sieht so aus, als ob Placekitten ausgefallen ist, wir müssen auf etwas anderes umsteigen.
Haben Sie http://rdjpg.com in Betracht gezogen? :P
Ihre Beispiele funktionieren mit Google Chrome, aber nicht mit IE11 unter Windows 7.
Vielen Dank dafür!
Mark & Kim; keine IE-Unterstützung überhaupt… noch
width:100%
Wie habe ich diese neuen Schlüsselwort-Werte übersehen?
Könnte mir bitte jemand erklären, wie man den gleichen Effekt erzielt, ohne die Breite für das Elternelement (in diesem speziellen Fall figure) festzulegen? Ich habe versucht, es nach links oder rechts zu floaten, konnte aber den Absatz nicht dazu zwingen, sich an die Bildgröße anzupassen. Wenn ich der div eine Breite von 200 Pixeln zuweisen würde, löst sich das Problem von selbst, aber ich benötige keine Floats. Wie kann ich also den gleichen Effekt erzielen, ohne die Breite für die figure anzugeben, nur mit Floats?
Ich denke, ich würde die Flex-Eigenschaft am Elternelement verwenden, so dass die Breite des Elternteils die Breite des Bildes erbt und das Bild zu flex: 1 machen. Normalerweise sollte das alles in Ordnung sein.
Vielleicht haben Sie sich über das Rätselraten bezüglich des `fill-available`-Wertes lustig gemacht, denn er ist ziemlich offensichtlich, sein Name sagt alles.
Falls Sie sich nicht lustig gemacht haben: `fill-available` gibt einem Element so viel Breite (oder Höhe) wie möglich, ohne sein Elternelement zu überlaufen, unter Berücksichtigung von Margin und Padding (d. h. anders als bei 100% Breite).
Ich liebe `fill-available` :)
width: fill-available;
width: -moz-fill-available;
width: -webkit-fill-available;
Hallo Miguel! Können Sie ein reales Beispiel für „fill-available“ geben? Das klingt nach etwas, das extrem nützlich sein könnte und von dem ich gerade erst höre!!
Kann jemand den Unterschied zwischen
img{width:100%;}
und
img{max-width:100%;}
Das ist ein weiteres der großen Rätsel des Lebens:)
Ich weiß nicht, ob Sie immer noch nach der Antwort suchen, aber von dem, was ich mit diesen beiden erlebt habe
width : 100% definiert das Element als 100% der Breite des Elternelements, das definierte Dimensionen hat.
max-width: 100 % beschränkt die Größe des Elements auf kleiner oder gleich 100% der Breite des Elternelements, das definierte Dimensionen hat.
Mit anderen Worten, verwenden Sie `width`, wenn Ihr Element exakt gleich seinem Elternteil sein soll, verwenden Sie `max-width` für eine flexiblere Anzeige und eine Garantie, dass Ihr Element nicht „aus dem Rahmen fällt“.
Sie haben meinen Tag gerettet, danke!
Gibt es eine Alternative zu width:max-content, die für IE10+ außer einer Fallback-CSS-Einstellung verwendet werden könnte?
Ich habe ein Problem: Ich habe benutzerdefiniertes CSS verwendet, als ich 100% einer div zugewiesen habe und dann Padding hinzugefügt habe, wodurch sie die Breite der div überstieg.
Für das letzte Beispiel kann ich den gleichen Effekt mit max-content und margin erzielen.
ul { width: max-content; margin: 1em auto; }
„Beachten Sie, dass width für alle Elemente außer nicht ersetzten [...] gilt.“ Sind Sie sicher, dass Sie „nicht ersetzten“ meinen? Dies würde alle Elemente umfassen, die nicht ersetzten, einschließlich Ihrer Divs, p usw. Ich glaube, das ist ein Fehler.
Der Link zur relevanten CSS-Definition von nicht-/ersetzten Elementen ist https://www.w3.org/TR/css-display-3/#replaced-element
Vielleicht wird dieses Missverständnis durch die HTML-Spezifikation verursacht, die „ersetzte Elemente“ anders definiert als CSS. Dies sollte im Artikel explizit erwähnt werden, da ein Artikel über eine CSS-Eigenschaft natürlich die Verwendung der CSS-Definitionen von Dingen impliziert.
Das ist super interessant, Peter! Es scheint tatsächlich einen Unterschied zwischen diesen Definitionen und den von ihnen umfassten Elementen zu geben. Der Beitrag wurde aktualisiert. Danke für den Hinweis!
Hallo, danke für die Tutorials
Wie kann ich Prozent und Pixel für die Breite von 3 Spalten links (Pixel), Mitte (%) und rechts (Pixel) desselben Elternteils verwenden?
Danke
..
So wie das
..
‚
‚
‚
‚
‚
‚
‚
‚