Ich versuche zu verstehen, was mir unerwartet erscheint:
Ich habe ein Element mit einer maximalen Höhe von 100% in einem Container, das ebenfalls eine maximale Höhe verwendet, aber unerwartet überläuft das Kind das übergeordnete Element:
Testfall: http://jsfiddle.net/bq4Wu/16/
.container {
background: blue;
padding: 10px;
max-height: 200px;
max-width: 200px;
}
img {
display: block;
max-height: 100%;
max-width: 100%;
}
Dies ist jedoch behoben, wenn dem übergeordneten Element eine explizite Höhe zugewiesen wird:
Testfall: http://jsfiddle.net/bq4Wu/17/
.container {
height: 200px;
}
Weiß jemand, warum das Kind im ersten Beispiel die maximale Größe seines Elternteils nicht einhalten würde? Warum ist eine explizite Höhe erforderlich?
display: flex; flex-direction: column
löste dies das Problem und fügte die gewünschte Bildlaufleiste hinzu.Code-Snippet anzeigen
Ich habe ein bisschen rumgespielt. Bei einem größeren Bild in Firefox habe ich mit der Verwendung des ererbten Eigenschaftswerts ein gutes Ergebnis erzielt. Hilft dir das?
quelle
max:height: 100%
anstelle einer festen Höhe: jsfiddle.net/umbreak/n6czk9xt/1dispaly: flex;
. Ich habe einen neuen Thread geöffnet: Ich habe einen neuen Thread geöffnet: stackoverflow.com/questions/29732391/… Im schlimmsten Fall könnte ich jedoch Jquery verwenden, um die tatsächliche Breite und Höhe des Bilds abzurufen und sie im div des übergeordneten Bilds festzulegen.Ich habe hier eine Lösung gefunden: http://www.sitepoint.com/maintain-image-aspect-ratios-responsive-web-design/
Der Trick ist möglich, weil eine Beziehung zwischen WIDTH und PADDING-BOTTOM eines Elements besteht. So:
Elternteil:
Kind ( entfernen Sie alle CSS in Bezug auf Breite , dh Breite: 100%):
quelle
Sie können die Eigenschaft object-fit verwenden
Wie hier vorgeschlagen
Eine vollständige Erklärung dieser Eigenschaft von Chris Mills in Dev.Opera
Und eine noch bessere in CSS-Tricks
Es wird unterstützt in
Ich habe gerade überprüft, ob Vivaldi und Chrom es auch unterstützen (keine Überraschung hier)
Es wird derzeit im IE nicht unterstützt, aber ... wen interessiert das ? Außerdem unterstützt iOS die Objektanpassung, jedoch nicht die Objektposition, wird dies jedoch bald tun.
quelle
Hier ist eine Lösung für eine kürzlich geöffnete Frage, die als Duplikat dieser Frage markiert ist . Das
<img>
Tag überschritt die maximale Höhe des Elternteils<div>
.Gebrochen: Geige
Arbeiten: Geige
In diesem Fall war das Hinzufügen
display:flex
zu den 2 übergeordneten<div>
Tags die Antwortquelle
Anstatt mit der maximalen Höhe von 100% / 100% zu arbeiten, würde ein alternativer Ansatz zum Ausfüllen des gesamten Raums darin bestehen,
position: absolute
oben / unten / links / rechts auf 0 zu setzen.Mit anderen Worten würde der HTML-Code wie folgt aussehen:
Sie können ein Live-Beispiel unter Codesandbox - Überlauf in CSS Flex / Grid sehen
quelle
Vielleicht kann jemand anderes die Gründe für Ihr Problem erklären, aber Sie können es lösen, indem Sie die Höhe des Containers angeben und dann die Höhe des Bildes auf 100% einstellen. Es ist wichtig, dass
width
das Bild vor dem angezeigt wirdheight
.quelle
Das nächste, was ich erreichen kann, ist dieses Beispiel:
http://jsfiddle.net/YRFJQ/1/
oder
Das Hauptproblem besteht darin, dass die Höhe den Prozentsatz der Containerhöhe annimmt. Daher wird im übergeordneten Container nach einer explizit festgelegten Höhe gesucht, nicht nach der maximalen Höhe.
Der einzige Weg, um dies bis zu einem gewissen Grad zu umgehen, ist die Geige oben, in der Sie den Überlauf verbergen können, aber dann fungiert die Polsterung immer noch als sichtbarer Raum, in den das Bild fließen kann, und daher funktioniert das Ersetzen durch einen festen Rand stattdessen (und dann) Hinzufügen eines Rahmens, um 200px zu erreichen, wenn dies die Breite ist, die Sie benötigen)
Ich bin mir nicht sicher, ob dies zu dem passt, wofür Sie es brauchen, aber das Beste, was ich erreichen kann.
quelle
Eine gute Lösung besteht darin, die Höhe nicht für das übergeordnete Element und nur für das untergeordnete Element mit Ansichtsfenster zu verwenden :
Geigenbeispiel: https://jsfiddle.net/voan3v13/1/
quelle
Container verpacken ihren Inhalt in der Regel bereits gut. Umgekehrt funktioniert es oft nicht so gut: Kinder füllen ihre Vorfahren nicht gut. Stellen Sie also Ihre Werte für Breite / Höhe auf das innerste Element und nicht auf das äußerste Element ein und lassen Sie die äußeren Elemente ihren Inhalt einschließen.
quelle
Ihr Container hat keine Höhe.
Höhe hinzufügen: 200px;
zu den Containern CSS und das Kätzchen bleibt drinnen.
quelle