Ich arbeite derzeit an einer mobilen Zielseite für ein Unternehmen. Es ist ein wirklich einfaches Layout, aber unter der Kopfzeile befindet sich ein Bild eines Produkts, das immer 100% breit ist (das Design zeigt, dass es immer von Kante zu Kante geht). Abhängig von der Breite des Bildschirms wird die Höhe des Bildes offensichtlich entsprechend angepasst. Ich habe dies ursprünglich mit einem IMG (mit einer CSS-Breite von 100%) gemacht und es hat großartig funktioniert, aber ich habe festgestellt, dass ich Medienabfragen verwenden möchte, um verschiedene Bilder mit unterschiedlichen Auflösungen bereitzustellen - sagen wir ein kleines, mittleres und Zum Beispiel eine große Version desselben Bildes. Ich weiß, dass Sie das img src nicht mit CSS ändern können, daher dachte ich, ich sollte einen CSS-Hintergrund für das Bild verwenden, im Gegensatz zu einem img-Tag im HTML.
Ich kann nicht scheinen, dass dies richtig funktioniert, da das Div mit dem Hintergrundbild sowohl eine Breite als auch eine Höhe benötigt, um den Hintergrund anzuzeigen. Ich kann natürlich 'width: 100%' verwenden, aber was verwende ich für die Höhe? Ich kann eine zufällige feste Höhe wie 150px setzen und dann die oberen 150px des Bildes sehen, aber dies ist nicht die Lösung, da es keine feste Höhe gibt. Ich hatte ein Spiel und fand heraus, dass ich, sobald es eine Höhe gibt (getestet mit 150px), 'Hintergrundgröße: 100%' verwenden kann, um das Bild korrekt in das Div zu passen. Ich kann das neuere CSS3 für dieses Projekt verwenden, da es ausschließlich für Mobilgeräte gedacht ist.
Ich habe unten ein grobes Beispiel hinzugefügt. Bitte entschuldigen Sie die Inline-Stile, aber ich wollte ein einfaches Beispiel geben, um meine Frage etwas klarer zu machen.
<div id="image-container">
<div id="image" style="background: url(image.jpg) no-repeat; width: 100%; height: 150px; background-size: 100%;"></div>
</div>
Muss ich dem Container div möglicherweise eine prozentuale Höhe geben, die auf der gesamten Seite basiert, oder sehe ich das völlig falsch?
Denken Sie auch, dass CSS-Hintergründe der beste Weg sind, dies zu tun? Möglicherweise gibt es eine Technik, die je nach Geräte- / Bildschirmbreite unterschiedliche IMG-Tags bereitstellt. Die allgemeine Idee ist, dass die Zielseitenvorlage mehrfach mit unterschiedlichen Produktbildern verwendet wird, daher muss ich sicherstellen, dass ich dies auf die bestmögliche Weise entwickle.
Ich entschuldige mich dafür, dass dies ein wenig langwierig ist, aber ich gehe von diesem Projekt zum nächsten hin und her, also möchte ich dieses kleine Ding erledigen. Vielen Dank im Voraus für Ihre Zeit, es wird sehr geschätzt. Grüße
quelle
Antworten:
Anstatt zu verwenden
background-image
, können Sieimg
direkt verwenden und versuchen, das Bild über die gesamte Breite des Ansichtsfensters zu verteilenmax-width:100%;
und verwenden Sie bitte keine Auffüllungen oder Ränder auf Ihr Hauptcontainer-Div, da dies die Gesamtbreite des Containers erhöht. Mit dieser Regel können Sie eine Bildbreite haben, die der Breite des Browsers entspricht, und die Höhe ändert sich auch entsprechend dem Seitenverhältnis. Vielen Dank.Bearbeiten: Ändern des Bildes in verschiedenen Fenstergrößen
Auf diese Weise ändern Sie Ihr Bild in einer anderen Größe des Browsers.
quelle
Tim S. war einer "richtigen" Antwort viel näher als der derzeit akzeptierten. Wenn Sie ein Hintergrundbild mit 100% Breite und variabler Höhe mit CSS erstellen möchten, anstatt zu verwenden
cover
(wodurch sich das Bild von den Seiten ausdehnen kann) odercontain
(wodurch sich das Bild überhaupt nicht ausdehnen kann), einfach Stellen Sie das CSS so ein:Dadurch wird Ihr Hintergrundbild auf 100% Breite eingestellt und die Höhe kann überlaufen. Jetzt können Sie Medienabfragen verwenden, um dieses Bild auszutauschen, anstatt sich auf JavaScript zu verlassen.
EDIT: Ich habe gerade (3 Monate später) festgestellt, dass Sie wahrscheinlich nicht möchten, dass das Bild überläuft. Sie möchten anscheinend, dass die Größe des Containerelements basierend auf dem Hintergrundbild geändert wird (um das Seitenverhältnis beizubehalten), was meines Wissens mit CSS nicht möglich ist.
Hoffentlich können Sie bald das neue srcset- Attribut für das
img
Element verwenden. Wenn Sieimg
jetzt Elemente verwenden möchten , ist die derzeit akzeptierte Antwort wahrscheinlich die beste.Sie können jedoch ein reines Hintergrundbildelement mit einem konstanten Seitenverhältnis mit reinem CSS erstellen. Dazu setzen Sie den Wert
height
auf 0 und denpadding-bottom
Prozentsatz auf die eigene Breite des Elements wie folgt:Um unterschiedliche Seitenverhältnisse zu verwenden, teilen Sie die Höhe des Originalbilds durch die eigene Breite und multiplizieren Sie sie mit 100, um den Prozentwert zu erhalten. Dies funktioniert, da der Polsterungsprozentsatz immer basierend auf der Breite berechnet wird, auch wenn es sich um eine vertikale Polsterung handelt.
quelle
background-size: auto
mein Problem bei allen Geräteorientierungen.Versuche dies
Vereinfachte Version
quelle
Sie können die CSS-Eigenschaft verwenden
background-size
und aufcover
oder setzencontain
je nach Wunsch . Durch das Abdecken wird das Fenster vollständig abgedeckt, während durch das Einschließen eine Seite in das Fenster passt, sodass nicht die gesamte Seite abgedeckt wird (es sei denn, das Seitenverhältnis des Bildschirms entspricht dem Bild).Bitte beachten Sie, dass dies eine CSS3-Eigenschaft ist. In älteren Browsern wird diese Eigenschaft ignoriert. Alternativ können Sie Javascript verwenden, um die CSS-Einstellungen abhängig von der Fenstergröße zu ändern. Dies wird jedoch nicht bevorzugt.
quelle
Verwenden Sie einfach ein zweifarbiges Hintergrundbild:
quelle
Fügen Sie die CSS hinzu:
Und HTML ist:
CSS: Hintergrundbild auf 100% Breite und Höhe des Bildschirms strecken?
quelle
Es ist 2017, und jetzt können Sie die Objektanpassung verwenden, die eine angemessene Unterstützung bietet . Es funktioniert auf die gleiche Weise wie ein Div,
background-size
jedoch auf dem Element selbst und auf jedem Element, einschließlich Bildern.quelle
quelle