min() und max() kann verschachtelt sein. Sie können sowohl innerhalb calc()als auch außerhalb verwendet werden. Sie können auch mathematische Ausdrücke enthalten, was bedeutet, dass Sie sie vermeiden können, calc()wenn Sie sie verwenden.
Daher kann das ursprüngliche Beispiel wie folgt geschrieben werden:
MS Edge für macOS (Version 81.0.416.68) erlaubt dies auch. Man würde annehmen, dass die Windows-Version auch funktioniert. Ich kenne die min-unterstützte Version nicht.
Jhelzer
1
Der neue Edge ist im Wesentlichen Chrome, seine Versionen folgen denen von Chrome. Die vollständigen Daten zur Browserkompatibilität befinden sich am Ende der verlinkten Seiten.
Benutzer
115
Eine "reine" CSS-Lösung ist jetzt tatsächlich mit Medienabfragen möglich:
Tolle Lösung! Ich habe es tatsächlich für max-height
minimale
102
Nein, du kannst nicht. max()und min()wurden aus CSS3-Werten und -Einheiten entfernt. Sie können jedoch in CSS4-Werten und -Einheiten wieder eingeführt werden . Derzeit gibt es keine Spezifikation für sie, und in der calc()Spezifikation wird nicht erwähnt, dass beide innerhalb einer calc()Funktion gültig sind .
Sie können JavaScript verwenden, um den berechneten Stil (tatsächlich den verwendeten Stil) des Elements abzurufen. Entfernen Sie 80px und vergleichen Sie es mit 500, um festzustellen, welches größer ist. So etwas wie var val = parseInt (window.getComputedStyle (el, null) .getPropertyValue ("width")) - 80) zum Abrufen der width - 80 und el.style.maxWidth zum Festlegen der maximalen Breite.
David Storey
10
Danke dir. Ich würde jedoch eine reine CSS-Lösung bevorzugen.
Arnaud
41
Immer wenn eine CSS-Frage vorliegt und eine Antwort mit "Sie können JavaScript verwenden" beginnt, ist sie falsch. Es gibt viele triftige Gründe, den gesamten Präsentationscode in CSS behalten zu wollen. Alle - nicht die meisten.
B264
8
Es scheint, als wären min () und max () wieder im CSS-Werte- und Einheitenmodul Level 4 (Entwurf des Herausgebers, 1. September 2017). Link: Drafts.csswg.org/css-values/#calc-notation
Jakob E
5
ABER es gibt eine Lösung für das Problem, scrollen Sie weiter zu @andy Antwort unten
Offirmo
44
Eine Problemumgehung wäre, sich selbst zu verwenden width.
Dies ist eine gute Idee, aber wenn ich die Frage von @ Arnaud richtig verstehe, möchte er die maximale Breite von entweder 500pxoder 100% - 80px. Ihre Lösung begrenzt die maximale Breite auf, 500pxselbst wenn sie 100% - 80pxgrößer ist.
Theophilus
2
Aber es ist das gleiche wie zu verwenden, min()daher vielleicht hilfreich für andere.
Seika85
17
Es scheint mir jedoch, dass die Verwendung von min-width anstelle von max-width im obigen Beispiel dem angeforderten Verhalten entsprechen könnte.
Gert Sønderby
1
Die Antwort hat mir geholfen, einem Flex-Container einen Rand hinzuzufügen, sobald die Seitenbreite klein wurde. codepen.io/OBS/pen/wGrRJV
ofer.sheffer
Ich habe eine Lösung veröffentlicht, die zeigt, dass @ GertSønderbys Kommentar tatsächlich die richtige Lösung ist.
SherylHohman
13
Während die Antwort von @ david-mangold oben "nah" war, war sie falsch.
(Sie können seine Lösung verwenden, wenn Sie eine minimale Breite anstelle einer maximalen Breite wünschen ).
Diese Lösung zeigt, dass der Kommentar von @ gert-sønderby zu dieser Antwort funktioniert :
Die Antwort hätte verwendet werden sollen min-width, nicht max-width.
Das hätte es sagen sollen:
min-width:500px;
width: calc(100%-80px);
Ja, verwenden Sie min-width plus width , um eine max () -Funktion zu emulieren .
Hier ist der Codepen (die Demo auf CodePen ist einfacher zu sehen und Sie können sie für Ihre eigenen Tests bearbeiten).
Das heißt, @ andys Antwort oben über einfache Grund sein kann, und besser geeignet in vielen Anwendungsfällen sein.
Beachten Sie auch, dass möglicherweise eine max()und eine min()Funktion in CSS eingeführt werden, diese jedoch ab April 2019 nicht mehr Teil der Spezifikation ist.
Hier ist der Entwurf des Vorschlags: https://drafts.csswg.org/css-values-4/#comp-func .
Scrollen Sie zum Anfang der Seite, um das Datum der letzten Überarbeitung anzuzeigen (ab heute wurde es zuletzt am 5. April 2019 überarbeitet).
Warum das Downvote? Alles, was angegeben wird, ist korrekt und alle Quellen wurden verlinkt und gutgeschrieben.
SherylHohman
1
@Amaud Gibt es eine Alternative, um das gleiche Ergebnis zu erzielen ?
Es gibt einen reinen CSS-Ansatz, der nicht js ist und ähnliche Ergebnisse erzielt. Sie müssten die Auffüllung / den Rand des übergeordneten Elementcontainers anpassen.
Antworten:
min()
,,max()
undclamp()
sind endlich verfügbar!Ab Firefox 75, Chrome 79 und Safari 11.1 (außer
clamp
).min()
undmax()
nehmen Sie eine beliebige Anzahl von Argumenten.clamp()
hat Syntaxclamp(MIN, VAL, MAX)
und entsprichtmax(MIN, min(VAL, MAX))
.min()
undmax()
kann verschachtelt sein. Sie können sowohl innerhalbcalc()
als auch außerhalb verwendet werden. Sie können auch mathematische Ausdrücke enthalten, was bedeutet, dass Sie sie vermeiden können,calc()
wenn Sie sie verwenden.Daher kann das ursprüngliche Beispiel wie folgt geschrieben werden:
quelle
Eine "reine" CSS-Lösung ist jetzt tatsächlich mit Medienabfragen möglich:
quelle
max-height
Nein, du kannst nicht.
max()
undmin()
wurden aus CSS3-Werten und -Einheiten entfernt. Sie können jedoch in CSS4-Werten und -Einheiten wieder eingeführt werden . Derzeit gibt es keine Spezifikation für sie, und in dercalc()
Spezifikation wird nicht erwähnt, dass beide innerhalb einercalc()
Funktion gültig sind .quelle
Eine Problemumgehung wäre, sich selbst zu verwenden
width
.quelle
500px
oder100% - 80px
. Ihre Lösung begrenzt die maximale Breite auf,500px
selbst wenn sie100% - 80px
größer ist.min()
daher vielleicht hilfreich für andere.Während die Antwort von @ david-mangold oben "nah" war, war sie falsch.
(Sie können seine Lösung verwenden, wenn Sie eine minimale Breite anstelle einer maximalen Breite wünschen ).
Diese Lösung zeigt, dass der Kommentar von @ gert-sønderby zu dieser Antwort funktioniert :
Die Antwort hätte verwendet werden sollen
min-width
, nichtmax-width
.Das hätte es sagen sollen:
Ja, verwenden Sie min-width plus width , um eine max () -Funktion zu emulieren .
Hier ist der Codepen (die Demo auf CodePen ist einfacher zu sehen und Sie können sie für Ihre eigenen Tests bearbeiten).
Das heißt, @ andys Antwort oben über einfache Grund sein kann, und besser geeignet in vielen Anwendungsfällen sein.
Beachten Sie auch, dass möglicherweise eine
max()
und einemin()
Funktion in CSS eingeführt werden, diese jedoch ab April 2019 nicht mehr Teil der Spezifikation ist.Hier können Sie die Browserkompatibilität überprüfen
max()
:https://developer.mozilla.org/en-US/docs/Web/CSS/max#Browser_compatibility .
Hier ist der Entwurf des Vorschlags:
https://drafts.csswg.org/css-values-4/#comp-func .
Scrollen Sie zum Anfang der Seite, um das Datum der letzten Überarbeitung anzuzeigen (ab heute wurde es zuletzt am 5. April 2019 überarbeitet).
quelle
@Amaud Gibt es eine Alternative, um das gleiche Ergebnis zu erzielen ?
Es gibt einen reinen CSS-Ansatz, der nicht js ist und ähnliche Ergebnisse erzielt. Sie müssten die Auffüllung / den Rand des übergeordneten Elementcontainers anpassen.
quelle