Übersetzung von "
Min und Max Breite / Höhe in CSS " bei Ahmad Shadid.
Manchmal müssen Entwickler die Breite des Elements relativ zum übergeordneten Element begrenzen und es gleichzeitig dynamisch lassen. Durch diese Einstellung wird die Anfangsgröße mit der Möglichkeit der Erweiterung bei Vorhandensein von verfügbarem Platz festgelegt. Zum Beispiel brauchen wir eine Schaltfläche, die eine minimale Breite haben sollte. In solchen Situationen ist es zweckmäßig, die Eigenschaften Maximum und Minimum zu verwenden.
In diesem Artikel machen wir uns mit den CSS-Eigenschaften des Maximums und des Minimums für Breite und Höhe vertraut und werfen einen detaillierten Blick auf jede dieser Eigenschaften und ihre Anwendungsfälle.
Breite Eigenschaften
Ich möchte die Diskussion mit den Eigenschaften in Bezug auf die Breite beginnen. Wir haben eine
min-width
und eine
max-width,
und jede von ihnen ist in bestimmten Situationen äußerst wichtig und nützlich.
Minimale Breite (min-width)
Die Eigenschaft
min-width
soll verhindern, dass die Breite des Elements unter den angegebenen Wert reduziert wird. Der Standardwert ist
auto
und kann bis zu
0
.
Schauen wir uns zur Veranschaulichung ein einfaches Beispiel an:

Es gibt eine Schaltfläche mit Text, dessen Größe von einem bis zu mehreren Wörtern variieren kann. Um sicherzustellen, dass diese Schaltfläche die minimal zulässige Breite hat, müssen Sie die minimale Breite verwenden, auch wenn nur ein Wort enthalten ist. Die minimale Breite wurde auf 100px festgelegt. Selbst wenn die Schaltfläche sehr kurze Inhalte enthält, z. B. nur das Wort „Fertig“ oder nur ein Symbol, ist sie dennoch groß genug, um erkennbar zu bleiben. Dies ist besonders wichtig, wenn Sie mit Websites arbeiten, die in verschiedene Sprachen übersetzt wurden.
Betrachten Sie das Beispiel in arabischer Sprache auf Twitter:

Im obigen Beispiel enthält die Schaltfläche das Wort "تم", was auf Arabisch "Finish" bedeutet. Aufgrund des kurzen Inhalts wurde die Breite der Schaltfläche selbst zu klein. Daher habe ich das Minimum durch Festlegen der Eigenschaft
min-width
, die im Bild rechts (im Abschnitt „After“) zu sehen ist.
Mindestbreite und Polsterung
Obwohl die Eigenschaft
min-width
eine Vergrößerung der Breite der Schaltfläche bei gleichzeitiger Vergrößerung des Inhalts zulässt, sollte an den Seiten ein Abstand festgelegt werden, um einen Einzug von den Rändern zu gewährleisten. Der Unterschied ist in der folgenden Abbildung dargestellt.

Maximale Breite (max-width)
Die Eigenschaft
max-width
soll verhindern, dass das Element über den angegebenen Wert hinaus expandiert. Der Standardwert ist
none
.
Ein übliches und einfaches Beispiel für die Verwendung der maximalen Breite ist die Anwendung auf Bilder. Betrachten Sie das folgende Beispiel:

Wenn wir die Eigenschaft
max-width: 100%
auf das Bild anwenden, bleibt es innerhalb der Grenzen des übergeordneten Elements, auch wenn die ursprüngliche Größe größer ist. Wenn das Bild anfangs kleiner als das übergeordnete Bild ist, wirkt sich diese Eigenschaft in keiner Weise auf es aus.
Verwenden von min-width und max-width

Wenn beide Eigenschaften für ein Element gelten, welche überschreibt den Wert des anderen? Mit anderen Worten, welche Immobilie hat eine höhere Priorität?
Wenn der Wert von
min-width
größer als
max-width
, wird er als Breite des Elements verwendet. Betrachten Sie das folgende Beispiel:
HTML <div class="wrapper"> <div class="sub"></div> </div>
CSS .sub { width: 100px; min-width: 50%; max-width: 100%; }

Der anfängliche Wert für die
width
beträgt 100px. Zusätzlich werden die Eigenschaften für die minimale
min-width
und die
max-width
festgelegt. Infolgedessen wird die Breite dieses Elements 50% der Breite des übergeordneten Blocks nicht überschreiten
Höhe Eigenschaften
Zusätzlich zu den Eigenschaften für die minimale und maximale Breite gibt es dieselben Eigenschaften für die Höhe
Mindesthöhe (min-Höhe)
Die
min-height
soll verhindern, dass das Element den angegebenen Wert unterschreitet. Der Standardwert ist
auto
und kann bis zu
0
.
Schauen wir uns zur Veranschaulichung ein einfaches Beispiel an.
Wir haben einen Abschnitt mit Textinhalten. Es ist notwendig, dass es sowohl mit großen als auch mit kleinen Textmengen schön aussieht
CSS .sub { display: flex; align-items: center; justify-content: center; padding: 1rem; min-height: 100px; color: #fff; background: #3c78dB; }
Die Mindesthöhe ist auf 100px eingestellt, und der Inhalt wird mithilfe der Flexbox horizontal und vertikal zentriert. Was passiert, wenn mehr Inhalte vorhanden sind? Zum Beispiel wird es einen ganzen Absatz geben

Ja, das hast du schon erraten. Die Höhe des Abschnitts erhöht sich, um mehr Inhalt aufzunehmen. Auf diese Weise können wir flexible Komponenten erstellen, die auf die Menge an Inhalten reagieren.
Maximale Höhe (max-Höhe)
Die
max-height
soll verhindern, dass ein Element seine Höhe über einen angegebenen Wert hinaus erhöht. Der Standardwert ist
none
.
Im folgenden Beispiel habe ich die
max-height
für den Inhalt festgelegt. Da es jedoch größer als der angegebene Bereich ist, tritt ein Überlauf auf und der Text überschreitet die Grenzen des übergeordneten Elements

Beispiele für die Verwendung von Eigenschaften
Betrachten Sie einige häufige und seltene Anwendungsfälle für die Eigenschaften
min-width
,
min-height
,
max-width
und
max-height
.
Tag-Liste
Es wird empfohlen, die Mindestbreite jedes Tags in der Liste der Tags anzugeben, damit das Erscheinungsbild bei kurzen Inhalten nicht beeinträchtigt wird.

Mit dieser Flexibilität sieht ein Tag gut aus, egal wie kurz sein Inhalt ist. Was passiert jedoch, wenn der Autor einen sehr großen Tag-Namen festlegt und das von ihm verwendete CMS (Content Management System) die Anzahl der Zeichen im Tag nicht begrenzt? In dieser Situation können Sie auch die
max-width
CSS .c-tag { display: inline-block; min-width: 100px; max-width: 250px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
Mit
max-width
Sie die maximale Breite auf einen bestimmten Wert begrenzen. Das Anwenden dieser Eigenschaft allein reicht jedoch nicht aus. Inhalte, die die maximale Breite überschreiten, müssen abgeschnitten werden.
https://codepen.io/shadeed/pen/320e42b7ad75c438a9e633417d737d16Schaltflächen
Es gibt verschiedene Szenarien für die Verwendung der minimalen und maximalen Eigenschaften für Schaltflächen, da es auch viele Optionen für die Komponenten von Schaltflächen gibt. Betrachten Sie das folgende Layout:

Bitte beachten Sie, dass die Breite des "Get" -Buttons zu klein ist. Wenn die Schaltfläche aus irgendeinem Grund immer noch keinen Text enthält (sondern nur ein Symbol), kann alles noch schlimmer werden. In diesem Fall ist die Einstellung der Mindestbreite sehr wichtig
Nullstellen der Mindestbreite für Flexbox
Der Standardwert der Eigenschaft
min-width
ist auto, der mit Null bewertet wird. Wenn es sich bei einem Element um ein flexibles Element handelt, wird der Wert für die
min-width
nicht Null. Die Mindestgröße eines Flex-Elements ist die Größe seines Inhalts.
Laut
CSSWG :
Standardmäßig werden Flex-Elemente nicht kleiner als die für ihren Inhalt erforderliche Mindestgröße (die Länge des längsten Wortes oder Elements mit einer festen Größe). Um dies zu ändern, legen Sie die
min-height
min-width
oder
min-height
.
Betrachten Sie das folgende Beispiel:

Der Benutzername enthält ein sehr langes Wort, das einen Überlauf und horizontales Scrollen verursacht. Obwohl ich das CSS unten hinzugefügt habe, um den Inhalt abzuschneiden:
CSS .c-person__name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
Da der Header ein flexibles Element ist, besteht die Lösung darin, den Wert für die minimale Breite zurückzusetzen und auf Null zu setzen
CSS .c-person__name { min-width: 0; }
So sollte es nach dem Fix aussehen:

Aus der
CSSWG- Beschreibung geht hervor, dass das Festlegen der
overflow
auf einen anderen Wert als den
visible
dazu führen kann, dass der Wert für die
minimale Breite als Null berechnet wird.
Dies löst auch unser Problem, ohne dass die
minimale Breite explizit festgelegt werden muss
min-width: 0
.
Null Mindesthöhe für Flexbox
Obwohl dies im Vergleich zur minimalen Breite ein weniger verbreitetes Problem ist, kann es dennoch auftreten. Das Problem liegt bei flexiblen Elementen, die nicht kürzer als ihr Inhalt sein können. Infolgedessen wird der Wert für die minimale Höhe auf die Größe des Inhalts festgelegt.
Betrachten Sie das folgende Beispiel:

Roter Text sollte am Rand des Containers abgeschnitten werden. Da es sich bei diesem Element jedoch um ein Flex-Element handelt, entspricht seine
min-height
der Höhe des Inhalts. Um dies zu verhindern, müssen wir den Mindesthöhenwert zurücksetzen. Schauen wir uns den HTML- und CSS-Code an:
HTML <div class="c-panel"> <h2 class="c-panel__title"></h2> <div class="c-panel__body"> <div class="c-panel__content"></div> </div> </div>
CSS .c-panel { display: flex; flex-direction: column; height: 180px; } .c-panel__body { min-height: 0; } .c-panel__content { overflow-y: scroll; height: 100%; }
Durch Hinzufügen eines Elements
min-height: 0
wird der Eigenschaftswert zurückgesetzt und die erwartete Funktion wird ausgeführt
Demo
Gleichzeitige Verwendung von min-width und max-width
Manchmal gibt es Situationen, in denen wir ein Element mit einer minimalen Breite haben, gleichzeitig aber die maximale Breite nicht angegeben wird. Dies kann dazu führen, dass das Element zu breit wird, obwohl dieses Verhalten nicht beabsichtigt war. Betrachten Sie das folgende Beispiel:

Da die Breite in Pixeln definiert ist, gibt es keine Gewissheit, dass das oben Genannte für Mobilgeräte funktioniert. Um dieses Problem zu lösen, können Prozentsätze anstelle von Pixeln für die minimalen und maximalen Eigenschaften verwendet werden. Betrachten Sie das folgende Beispiel:
Ich habe das folgende CSS für die Bilder hinzugefügt:
CSS img { min-width: 35%; max-width: 70%; }

Seitencontainer
Eines der nützlichsten Szenarien für die Verwendung der Eigenschaft
max-width
ist das Umbrechen der Seite (oder des Containers). Indem Sie die Seite auf die maximale Breite einstellen, können wir sicher sein, dass Benutzer den Inhalt bequem anzeigen und lesen können

Unten sehen Sie ein Beispiel für eine zentrierte Hülle, die links und rechts
padding
CSS .wrapper { max-width: 1170px; padding-left: 16px; padding-right: 16px; margin-left: auto; margin-right: auto; }
Maximale Breite und Maßeinheit "ch"

Die Maßeinheit
ch
entspricht der Breite des Zeichens
0
(Null), das in der Schriftart des aktuellen Elements verwendet wird. Mit der Eigenschaft max-width können wir die Anzahl der Zeichen in einer Zeichenfolge anpassen. Gemäß diesem Artikel aus dem Smashing Magazine beträgt die empfohlene Zeilenlänge 45 bis 75 Zeichen.
Im vorherigen Beispiel mit einem Wrapper-Element könnten wir von der Verwendung dieses Symbols profitieren, da es sich um ein Artikelelement handelt
CSS .wrapper { max-width: 70ch; }
Animieren Sie ein Element mit unbekannter Höhe
Manchmal stehen wir vor dem Problem, ein Akkordeon oder ein mobiles Menü mit unbekannter Inhaltshöhe zu animieren. In diesem Fall ist die Verwendung von
max-height
möglicherweise eine gute Lösung.
Betrachten Sie das folgende Beispiel:

Wenn die Menütaste gedrückt wird, sollte das Menü selbst reibungslos von oben nach unten angezeigt werden. Ohne JavaScript ist dies nicht möglich, es sei denn, das Element hat eine feste Höhe (und dies wird nicht empfohlen). Dies ist jedoch mit maximaler Höhe möglich. Die Idee ist, dem Element eine sehr hohe Höhe hinzuzufügen, z. B.
max-height: 20rem
, die nicht erreicht wird.
max-height: 20rem
können wir die Animationsschritte von
max-height: 0
auf
max-height: 20rem
CSS .c-nav { max-height: 0; overflow: hidden; transition: 0.3s linear; } .c-nav.is-active { max-height: 22rem; }
Klicken Sie auf einen Hamburger, um die Animation in Aktion zu sehen
Mindesthöhe für das Oberteil (Held)
Wie Sie sehen, mag ich es nicht, Elementen eine feste Höhe zu geben. Ich bin der Meinung, dass ich damit gegen das Konzept verstoße, dass Komponenten im Web flexibel sein sollten. Das Hinzufügen einer Mindesthöhe für den ersten Abschnitt der Website (den Abschnitt „Held“) ist in Situationen hilfreich, in denen sehr große Inhalte hinzugefügt werden (dies geschieht).
Betrachten Sie das folgende Beispiel, in dem wir einen „Helden“ -Abschnitt mit einer festen Höhe haben. Es sieht gut aus

Wenn der Inhalt jedoch wächst, läuft er über den Container und geht über den Abschnittsumbruch hinaus. Das ist schlecht.

Um dieses Problem im Voraus zu vermeiden, können wir anstelle von
min-height
hinzufügen. Wir tun genau das, zumindest um unser Gewissen zu klären. Auch wenn dies der Grund für eine eher seltsame Seitenanzeige sein mag, sollten solche Situationen meines Erachtens in erster Linie im Content Management System (CMS) vermieden werden. Danach ist das Problem behoben und die Seite sieht gut aus:

Das Problem des Überlaufens mit Inhalten besteht nicht nur darin, dass es größer als die feste Höhe des übergeordneten Elements sein kann. Dies kann auf eine Verringerung der Bildschirmgröße und auf eine Erhöhung der Höhe des Textinhalts aufgrund von Silbentrennung zurückzuführen sein:

Wenn Sie keine feste Höhe angeben, sondern diese mit
min-height
auf das Minimum beschränken, tritt das oben beschriebene Problem überhaupt nicht auf.
Modales Fenster
Für die modale Fensterkomponente müssen Sie sowohl die minimale als auch die maximale Breite angeben. Dies funktioniert daher auf Bildschirmen jeder Größe (von Mobilgeräten bis zu Desktops). Dies erinnert an einen interessanten Artikel über CSS-Tricks, in dem erklärt wird, was in diesem Fall zu tun ist.
1 Weg .c-modal__body { width: 600px; max-width: 100%; }
2 wege .c-modal__body { width: 100%; max-width: 600px; }
Was mich
max-width: 600px
, bevorzuge ich den zweiten Weg, da ich nur die
max-width: 600px
definieren muss
max-width: 600px
. Ein modales Fenster ist ein
div
Element, daher ist die Breite des übergeordneten Fensters bereits auf 100% festgelegt, oder?
Betrachten Sie das folgende Beispiel für ein modales Fenster. Beachten Sie, wie die Breite zu 100% der Breite des übergeordneten Elements wird, wenn im Ansichtsfenster nicht genügend freier Speicherplatz vorhanden ist

Mindesthöhe und klebrige Fußzeile
Wenn der Inhalt der Seite nicht groß genug ist, wird nicht erwartet, dass die Fußzeile unten bleibt. Schauen wir uns ein Beispiel an, das dies besser demonstriert:

Bitte beachten Sie, dass die Fußzeile nicht am unteren Rand des Browserfensters klebt. Dies liegt daran, dass die Höhe des Inhalts geringer ist als die Höhe des Browserfensters. Nach dem Lösen dieses Problems sollte die Seite folgendermaßen aussehen:

Zuerst habe ich das Körperelement zu einem flexiblen Container gemacht und dann auf eine Mindesthöhe von 100% des Ansichtsfensters festgelegt.
CSS body { display: flex; flex-direction: column; min-height: 100vh; } footer { margin-top: auto; }
Ich empfehle diesen
Artikel auf klebrigen Fußzeilen zu lesen.
DemoProportionale Elementgrößen und maximale Breite / Höhe
Um einen proportionalen Container zu erstellen, der sich je nach Größe des Ansichtsfensters skalieren lässt, wurde einmal ein
Hack mit
Hilfe von Padding dargestellt . Jetzt können wir ein ähnliches Verhalten simulieren, indem wir die Ansichtseinheiten und die maximale Breite / Höhe kombinieren.
Anhand von Materialien aus einem
Artikel von Miriam Suzanne möchte ich erklären, wie das funktioniert.

Wir haben ein Bild mit den Abmessungen 644 x 1000 Pixel. Wir müssen Folgendes tun:
- Seitenverhältnis:
height
/ width
(Höhe geteilt durch Breite)
- Behälterbreite: kann fest oder dynamisch sein (100%)
- Stellen Sie die
height
auf 100% der Breite des Ansichtsfensters multipliziert mit dem Seitenverhältnis ein
- Stellen Sie die
max-height
gleich dem Seitenverhältnis von Behälterbreite und Seitenverhältnis ein
- Stellen Sie die
max-width
gleich der Behälterbreite ein
CSS img { --ratio: 664 / 1000; --container-width: 30em; display: block; height: calc(100vw * var(--ratio)); max-height: calc(var(--container-width) * var(--ratio)); width: 100%; max-width: var(--container-width); }

HTML / Body mit einer Höhe von 100%
Was ist, wenn das Körperelement 100% der Höhe des Ansichtsfensters einnehmen soll? Dies ist eine häufige Frage sowohl in der gesamten Web-Community als auch
auf der StackOverflow-
Site .
Zuerst müssen Sie die
height: 100%
festlegen
height: 100%
für das
html
Element. Dies stellt sicher, dass das Wurzelelement 100% hoch ist. Fügen Sie dann die
min-height
für das
body
. Der Grund für die Verwendung von
min-height
ist, dass diese Eigenschaft es ermöglicht, die Höhe des
body
Elements dynamisch zu gestalten und die Größe des Inhalts anzupassen
CSS html { height: 100%; } body { min-height: 100%; }
DemoHinweise
Mindestbreite und Blockelemente
Manchmal vergessen wir, dass das Element, auf das
min-width
angewendet werden soll, block ist. Am Ende kann dies verwirrend sein und das Element nicht beeinflussen. Stellen Sie sicher, dass der Gegenstand nicht blockiert ist
CSS-Vergleichsfunktionen
Bei der Untersuchung der Hauptprobleme, mit denen Entwickler bei StackOverflow konfrontiert sind, bin ich auf diese Frage gestoßen, in der der Autor Folgendes fragt:
Kann man so etwas machen? max-width: calc(max(500px, 100% - 80px))
oder vielleicht ist dies max-width: max(500px, calc(100% - 80px)))
Das gewünschte Verhalten ist, dass die Breite des Elements nicht mehr als 500px beträgt. Wenn die Breite des Bereichs nicht ausreicht, um das Element aufzunehmen, sollte die Breite
100% – 80px
.
Was die als Antwort auf die Frage veröffentlichte Lösung betrifft, habe ich versucht, sie anzuwenden, und sie funktioniert in Chrome 79 und Safari 13.0.3. Obwohl dies den Rahmen des Artikels sprengt, werde ich hier dennoch eine Lösung nennen:
CSS .yourselector { max-width: calc(100% - 80px); } @media screen and (max-width: 580px) { .yourselector { max-width: 500px; } }
Quellen und Materialien für weitere Studien