Wie kann ich ein Div automatisch an die Größe des Hintergrunds anpassen, den ich dafür festgelegt habe, ohne eine bestimmte Höhe (oder Mindesthöhe) dafür festzulegen?
css
html
background
height
JohnIdol
quelle
quelle
img
in Ihrem Markup sowieso, warum nicht einfach nicht verstecken die tatsächliche<img>
und nicht mit Mühebackground-image
entweder? Welchen Vorteil hat es, Dinge auf diese Weise zu tun?background-image
ist, dass es CSS- Mischmodi verwenden kann , währendimg
dies nicht möglich ist.Es gibt eine sehr schöne und coole Möglichkeit, ein Hintergrundbild wie ein
img
Element wirken zu lassen, sodass esheight
automatisch angepasst wird. Sie müssen das Bildwidth
und dasheight
Verhältnis kennen. Setzen Sie denheight
Container auf 0 und denpadding-top
Prozentsatz basierend auf dem Bildverhältnis.Es wird wie folgt aussehen:
Sie haben gerade ein Hintergrundbild mit automatischer Höhe erhalten, das genau wie ein img-Element funktioniert. Hier ist ein funktionierender Prototyp (Sie können die Größe ändern und die Div-Höhe überprüfen): http://jsfiddle.net/TPEFn/2/
quelle
@mixin div-same-size-as-background-img($url) { background-image: url($url); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: percentage(image-height($url) / image-width($url)); }
position:relative
auf die div setzen und eine andere div mitposition:absolute; top:0; bottom:0; left:0; right:0;
setEs gibt keine Möglichkeit, die Hintergrundbildgröße mithilfe von CSS automatisch anzupassen.
Sie können es umgehen, indem Sie das Hintergrundbild auf dem Server messen und diese Attribute dann auf das div anwenden, wie andere bereits erwähnt haben.
Sie können auch Javascript hacken, um die Größe des Div basierend auf der Bildgröße zu ändern (sobald das Bild heruntergeladen wurde) - dies ist im Grunde das Gleiche.
Wenn Sie Ihr Div benötigen, um das Bild automatisch anzupassen, frage ich Sie vielleicht, warum Sie nicht einfach ein
<img>
Tag in Ihr Div einfügen.quelle
src
vonimg
mit Medienabfragen nicht ändern , aber Sie können die als Hintergrundbild verwendete Datei mit Medienabfragen ändern.Diese Antwort ähnelt anderen, ist jedoch für die meisten Anwendungen insgesamt die beste. Sie müssen die Bildgröße vorher kennen, was Sie normalerweise tun. Auf diese Weise können Sie Overlay-Text, Titel usw. hinzufügen, ohne das Bild negativ aufzufüllen oder absolut zu positionieren. Der Schlüssel besteht darin, den Abstand% so einzustellen, dass er dem Bildseitenverhältnis entspricht, wie im folgenden Beispiel gezeigt. Ich habe diese Antwort verwendet und im Wesentlichen nur einen Bildhintergrund hinzugefügt.
quelle
Vielleicht kann dies helfen, es ist nicht gerade ein Hintergrund, aber Sie bekommen die Idee:
quelle
float: left;
seine Position gebrochen hatIch bin mir ziemlich sicher, dass dies hier unten nie zu sehen sein wird. Aber wenn Ihr Problem dasselbe war wie meins, war dies meine Lösung:
Ich wollte ein Div in der Mitte des Bildes haben, und das wird mir das erlauben.
quelle
Es gibt eine reine CSS-Lösung, die die anderen Antworten übersehen haben.
Die Eigenschaft "content:" wird hauptsächlich zum Einfügen von Textinhalten in ein Element verwendet, kann jedoch auch zum Einfügen von Bildinhalten verwendet werden.
Dadurch ändert das div seine Höhe auf die tatsächliche Pixelgröße des Bildes. Um auch die Breite zu ändern, fügen Sie hinzu:
quelle
Sie können es serverseitig tun: indem Sie das Bild messen und dann die Div-Größe einstellen ODER das Bild mit JS laden, seine Attribute lesen und dann die DIV-Größe einstellen.
Und hier ist eine Idee: Fügen Sie dasselbe Bild als IMG-Tag in das Div ein, aber geben Sie ihm Sichtbarkeit: Versteckt + Spielen mit der relativen Position + Geben Sie diesem Div das Bild als Hintergrund.
quelle
Ich hatte dieses Problem und fand Hasanavis Antwort, aber ich bekam einen kleinen Fehler beim Anzeigen des Hintergrundbilds auf einem breiten Bildschirm - Das Hintergrundbild breitete sich nicht über die gesamte Breite des Bildschirms aus.
Hier ist meine Lösung - basierend auf Hasanavis Code, aber besser ... und dies sollte sowohl auf extra breiten als auch auf mobilen Bildschirmen funktionieren.
Wie Sie vielleicht bemerkt haben,
background-size: contain;
passt die Eigenschaft nicht gut in besonders breite Bildschirme, und diebackground-size: cover;
Eigenschaft passt nicht gut auf mobile Bildschirme. Daher habe ich dieses@media
Attribut verwendet, um mit den Bildschirmgrößen herumzuspielen und dieses Problem zu beheben.quelle
Wie wäre es damit :)
Demo: http://jsfiddle.net/josephmcasey/KhPaF/
quelle
Wenn es sich um ein einzelnes vorbestimmtes Hintergrundbild handelt und Sie möchten, dass das Div reagiert, ohne das Seitenverhältnis des Hintergrundbilds zu verzerren, können Sie zuerst das Seitenverhältnis des Bildes berechnen und dann ein Div erstellen, das das Seitenverhältnis beibehält, indem Sie die folgenden Schritte ausführen ::
Angenommen, Sie möchten ein Seitenverhältnis von 4/1 und die Breite des Div beträgt 32%:
Dies ergibt sich aus der Tatsache, dass die Auffüllung basierend auf der Breite des enthaltenden Elements berechnet wird.
quelle
Vielleicht kann dies helfen, es ist nicht gerade ein Hintergrund, aber Sie bekommen die einfache Idee
quelle
Sie können so etwas tun
quelle
Wenn Sie das Verhältnis des Bildes zur Erstellungszeit kennen, die Höhe von der Fensterhöhe abhängen möchten und auf moderne Browser (IE9 +) abzielen , können Sie hierfür Ansichtsfenstereinheiten verwenden:
Nicht ganz das, was das OP verlangte, aber wahrscheinlich gut für viele, die diese Frage sehen, und wollte hier eine andere Option geben.
Geige: https://jsfiddle.net/6Lkzdnge/
quelle
Angenommen, Sie haben so etwas:
und Sie möchten einen Hintergrund hinzufügen, kennen aber die Dimension des Bildes nicht.
Ich hatte ein ähnliches Problem und löste es mithilfe des Rasters:
HTML
CSS
z-index
dient nur zum platzieren von bild tatsächlich im hintergrund, man kann es natürlichimg.background
über dem platzierendiv.content
.HINWEIS : Dies kann dazu führen
div.content
, dass das Bild dieselbe Höhe hat. Wenndiv.content
also Kinder entsprechend ihrer Höhe platziert werden, möchten Sie möglicherweise eine Zahl festlegen, die nicht so gut wie "Auto" lautet.quelle
Hatte dieses Problem mit dem Umbraco CMS und in diesem Szenario können Sie das Bild dem div hinzufügen, indem Sie Folgendes für das Attribut 'style' des div verwenden:
quelle
Ich habe mich eine Weile mit diesem Problem befasst und beschlossen, ein JQuery-Plugin zu schreiben, um dieses Problem zu lösen. Dieses Plugin findet alle Elemente mit der Klasse "show-bg" (oder Sie können es Ihrem eigenen Selektor übergeben) und berechnet deren Hintergrundbildabmessungen. Alles was Sie tun müssen, ist diesen Code einzuschließen und die gewünschten Elemente mit class = "show" zu markieren
Genießen!
https://bitbucket.org/tomeralmog/jquery.heightfrombg
quelle
Die beste Lösung, die ich mir vorstellen kann, ist die Angabe Ihrer Breite und Höhe in Prozent. Auf diese Weise können Sie Ihren Bildschirm basierend auf Ihrer Monitorgröße verkleinern. Es ist mehr reaktionsschnelles Layout.
Zum Beispiel. du hast
Dies ist die beste Option, wenn Sie ein ansprechendes Layout wünschen. Ich würde float nicht empfehlen. In bestimmten Fällen ist float in Ordnung zu verwenden. In den meisten Fällen vermeiden wir jedoch die Verwendung von float, da dies bei Cross-Browser-Tests eine Reihe von Auswirkungen hat.
Hoffe das hilft :)
quelle
Ich habe mir einige der Lösungen angesehen und sie sind großartig, aber ich denke, ich habe einen überraschend einfachen Weg gefunden.
Zuerst müssen wir das Verhältnis aus dem Hintergrundbild erhalten. Wir teilen einfach eine Dimension durch eine andere. Dann bekommen wir so etwas wie zum Beispiel 66,4%
Wenn wir ein Bildverhältnis haben, können wir einfach die Höhe des Div berechnen, indem wir das Verhältnis mit der Breite des Ansichtsfensters multiplizieren:
Für mich funktioniert es, stellt die Div-Höhe richtig ein und ändert sie, wenn die Fenstergröße geändert wird.
quelle
Eigentlich ist es ganz einfach, wenn man weiß, wie es geht:
Der Trick besteht lediglich darin, das eingeschlossene Div als normales Div mit den gleichen Dimensionswerten wie die Hintergrunddimensionswerte (in diesem Beispiel 100% und 40 VW) festzulegen.
quelle
Ich habe das mit jQuery gelöst. Bis neue CSS-Regeln diese Art von Verhalten nativ zulassen, finde ich, dass dies der beste Weg ist, dies zu tun.
Richten Sie Ihre Divs ein
Unten haben Sie Ihr Div, auf dem der Hintergrund erscheinen soll ("Held") und dann den inneren Inhalt / Text, den Sie über Ihr Hintergrundbild legen möchten ("inner"). Sie können (und sollten) die Inline-Stile in Ihre Heldenklasse verschieben. Ich habe sie hier gelassen, damit schnell und einfach zu sehen ist, welche Stile darauf angewendet werden.
Berechnen Sie das Bildseitenverhältnis
Berechnen Sie als Nächstes Ihr Seitenverhältnis für Ihr Bild, indem Sie die Höhe Ihres Bildes durch die Breite dividieren. Wenn Ihre Bildhöhe beispielsweise 660 und Ihre Breite 1280 beträgt, beträgt Ihr Seitenverhältnis 0,5156.
Richten Sie ein Ereignis zum Ändern der Größe eines jQuery-Fensters ein, um die Höhe anzupassen
Fügen Sie abschließend einen jQuery-Ereignis-Listener für die Fenstergröße hinzu, berechnen Sie die Größe Ihres Heldendivs anhand des Seitenverhältnisses und aktualisieren Sie sie. Diese Lösung hinterlässt aufgrund unvollständiger Berechnungen unter Verwendung des Seitenverhältnisses normalerweise ein zusätzliches Pixel am unteren Rand, sodass wir der resultierenden Größe ein -1 hinzufügen.
Stellen Sie sicher, dass es beim Laden der Seite funktioniert
Sie sollten den obigen Aufruf zum Ändern der Größe ausführen, wenn die Seite geladen wird, damit die Bildgrößen zu Beginn berechnet werden. Wenn Sie dies nicht tun, wird das Heldendiv erst angepasst, wenn Sie die Fenstergröße ändern. Ich habe eine separate Funktion eingerichtet, um die Größenanpassungen vorzunehmen. Hier ist der vollständige Code, den ich verwende.
quelle
Wenn Sie in Photoshop ein Bild erstellen können, bei dem die Hauptebene eine Deckkraft von etwa 1 hat und im Grunde genommen transparent ist, fügen Sie dieses Bild in das Div ein und machen Sie das reale Bild zum Hintergrundbild. DANN setzen Sie die Deckkraft des Bildes auf 1 und fügen Sie die gewünschten Größenmaße hinzu.
Das Bild wird auf diese Weise erstellt, und Sie können das unsichtbare Bild nicht einmal von der coolen Seite ziehen.
quelle
einfach hinzufügen
div
quelle