Das scheint trivial, aber nach all den Recherchen und Codierungen kann ich es nicht zum Laufen bringen. Bedingungen sind:
- Die Größe des Browserfensters ist unbekannt. Schlagen Sie daher bitte keine Lösung mit absoluten Pixelgrößen vor.
- Die ursprünglichen Abmessungen des Bildes sind unbekannt und passen möglicherweise bereits in das Browserfenster.
- Das Bild ist vertikal und horizontal zentriert.
- Die Bildproportionen müssen erhalten bleiben.
- Das Bild muss vollständig im Fenster angezeigt werden (kein Zuschneiden).
- Ich möchte nicht, dass Bildlaufleisten angezeigt werden (und sie sollten nicht angezeigt werden, wenn das Bild passt.)
- Die Größe des Bilds wird automatisch geändert, wenn sich die Fensterabmessungen ändern, um den gesamten verfügbaren Platz einzunehmen, ohne größer als die ursprüngliche Größe zu sein.
Grundsätzlich möchte ich Folgendes:
.fit {
max-width: 99%;
max-height: 99%;
}
<img class="fit" src="pic.png">
Das Problem mit dem obigen Code ist, dass es nicht funktioniert: Das Bild nimmt den gesamten benötigten vertikalen Platz ein, indem eine vertikale Bildlaufleiste hinzugefügt wird.
Zu meiner Verfügung stehen PHP, Javascript, JQuery, aber ich würde für eine reine CSS-Lösung töten. Es ist mir egal, ob es im IE nicht funktioniert.
Antworten:
Update 2018-04-11
Hier ist eine Lösung ohne Javascript und nur mit CSS . Das Bild wird dynamisch zentriert und an das Fenster angepasst.
Die [andere, alte] Lösung legt mithilfe von JQuery die Höhe des Bildcontainers fest (
body
im folgenden Beispiel), sodass diemax-height
Eigenschaft im Bild wie erwartet funktioniert. Die Größe des Bildes wird auch automatisch geändert, wenn die Größe des Client-Fensters geändert wird.Hinweis: Der Benutzer gutierrezalex hat auf dieser Seite eine sehr ähnliche Lösung wie ein JQuery-Plugin gepackt.
quelle
Hier ist eine einfache CSS-Lösung ( JSFiddle ), die überall funktioniert, einschließlich Mobile und IE:
CSS 2.0:
HTML:
quelle
CSS3 führt neue Einheiten ein, die relativ zum Ansichtsfenster gemessen werden, das in diesem Fall das Fenster ist. Dies sind
vh
undvw
, die die Höhe bzw. Breite des Ansichtsfensters messen. Hier ist eine einfache Lösung nur für CSS:Die einzige Einschränkung ist, dass es nur funktioniert, wenn keine anderen Elemente zur Höhe der Seite beitragen.
quelle
100vh
das Bild nicht passt, aber97vh
gut funktioniert?vh
bedeutet wörtlich die Höhe der Ansicht. Wenn also andere Elemente Ihrer Seite eine Höhe hinzufügen, ist die gesamte Seite> 100vh. Ist das sinnvoll?.svg
Datei wird gut gerendert, aber das Umbenennen.html
führt zu Ungenauigkeiten): Der Browser fügt automatisch ein<body>
Tag mit Standard hinzu,margin:8
auch wenn die Datei kein<body>
Tag hat. Also fügt die Lösung hinzu<style>body{margin:0}</style>
Wenn Sie bereit sind, ein Containerelement um Ihr Bild zu platzieren, ist eine reine CSS-Lösung einfach. Sie sehen, 99% Höhe hat keine Bedeutung, wenn sich das übergeordnete Element vertikal ausdehnt, um seine untergeordneten Elemente aufzunehmen. Das übergeordnete Element muss eine feste Höhe haben, z. B. die Höhe des Ansichtsfensters.
HTML
CSS
Spiel mit der Geige .
quelle
<div>
statt mit einem machen<img>
?Passen Sie die Bildgröße an den Bildschirm an der längsten Seite an und behalten Sie dabei das Seitenverhältnis bei
width: 100vw
- Die Bildbreite beträgt 100% des Ansichtsfenstersheight: auto
- Die Bildhöhe wird proportional skaliertmax-height: 100vw
- Wenn die Bildhöhe größer als der Ansichtsfenster wird, wird sie an den Bildschirm angepasst. Infolgedessen wird die Bildbreite aufgrund der folgenden Eigenschaft verringertobject-fit: contain
- Der ersetzte Inhalt wird skaliert, um sein Seitenverhältnis beizubehalten, während er in das Inhaltsfeld des Elements passtHinweis:
object-fit
wird erst seit IE 16.0 vollständig unterstütztquelle
object-fit
oder Sie könnten explizit verwenden,object-fit: fill;
was Standard ist .Meine allgemeine faule CSS-Regel:
Dies kann Ihr Bild vergrößern, wenn es zunächst eine niedrige Auflösung hat (dies hängt mit Ihrer Bildqualität und -größe in den Abmessungen zusammen. Um Ihr Bild zu zentrieren, können Sie es auch versuchen (im CSS).
um Ihr Bild zu zentrieren
in Ihrem HTML:
quelle
Ich weiß, dass es hier bereits einige Antworten gibt, aber hier ist, was ich verwendet habe:
quelle
Ich hatte eine ähnliche Anforderung und musste es mit grundlegendem CSS und JavaScript tun. Keine JQuery verfügbar.
Das habe ich zum Arbeiten gebracht.
Hinweis: Ich habe nicht 100% für die Bildbreite verwendet, da immer ein wenig Polsterung zu berücksichtigen war.
quelle
img
Tags inbody
die Seite ein und setzen Siemax-height
auf49vh
. Das Anzeigen von mehr als zwei Bildern im sichtbaren Bereich bleibt als Übung für den Leser.Mach es einfach. Vielen Dank
quelle
Ich glaube, das sollte den Trick machen.
quelle
Oder sehen Sie sich das an: http://css-tricks.com/how-to-resizeable-background-image/
quelle
Aufbauend auf der Antwort von @ Rohit werden dadurch von Chrome gekennzeichnete Probleme behoben, die Größe der Bilder wird zuverlässig geändert, und es werden auch mehrere Bilder verwendet, die vertikal gestapelt sind, z. B.
<img src="foo.jpg"><br><img src="bar.jpg"><br><img src="baz.jpg">
gibt es wahrscheinlich eine elegantere Möglichkeit, dies zu tun.quelle
Verwenden Sie diesen Code in Ihrem Style-Tag
quelle