Inhalt soll sich am background:contain Image orientieren!

Bruhno

Grünschnabel
Ich habe ein Hintergrundbild welches per background-size:contain positioniert ist. Darüber liegt ein div mit hoverbaren Links, die über dem Hintergrund per position:absolute andere Bilder platzieren. Größen und top bzw left Werte sind mit %Angaben gemacht.
Da das Hintergrundbild immer zur Gänze sichtbar sein muss, damit die einzelnen Links zugänglich bleiben, hab ich mich nach langem Rumprobieren für background-size:contain entschieden cover wär natürlich schicker.
Ich habe jetzt aber immer noch das Problem, dass sich die Positionierung der Links und auch der jeweiligen Bilder am gesamten Body orientieren und nicht am Hintergrundbild selbst.

Gibt es in Javascript die Möglichkeit die tatsächliche Höhe und Breite des Hintergrundbildes festzustellen und diese Werte weiterzugeben? Oder gibt es dafür eine CSS- Lösung? Wusste jetzt nicht genau in welchem Forum ich da am Besten aufgehoben bin...

Poste den relevanten Code, tschuldigt bitte, dass es so viel ist. Ist aber anders leider nicht zu veranschaulichen.


Vielen Dank für jede Anregung oder Weiterleitung, die Ihr habt. Und da das meine erste Frage ist in all den Jahren, will heissen, sonst bin ich hier oder woanders immer fündig geworden: Toll, dass es diese Seite gibt******

HTML:
<head>
<style type="text/css">

html,body,#bg{
	width:100%;
	height:100%;
	overflow:hidden;
}

#bg {
	position:relative;
	width:100%;
	height:100%;
	
}


#bg img {
	width:100%;
	height:auto;
	margin:auto;
	display:block;

}

#map {
       width:100%; 
       height:100%; 
       position:relative; 
       z -index:100;
}

#map a {
        display:block; 
        text-decoration:none;
}

#map a b {
        display:block; 
        z-index:10; 
        position:absolute; 
        cursor:pointer;
}

#map em {
        display:none; 
        width:100%; 
        height:100%;
}

#map em img{
        width:100%; 
        height:auto;
}


#map a:hover em {
         display:block; 
}

#map a:active em, #map a:focus em{
          display:block;  
          background-color:#F30;
}


#base1 .p1 {width:17%; height:40%; left:82%; top:44%;} 
#base1 em {display:none; width:42%; height:20%; position:absolute; left:14%; top:62%;}

#base2 .p1 {width:15%; height:40%; left:55%; top:38%;} 
#base2 em {display:none; width:48%; height:45%; position:absolute; left:12%; top:65%;}

#base3 .p1 {width:12%; height:35%; left:2%; top:42%;} 
#base3 em {display:none; width:35%; height:44%; position:absolute; left:17%; top:27%;}


#k1 {position:absolute; height:5em; width:18em; top:133%; right:-53%; background:#FFF;}
	
#k2 {position:absolute; height:5em; width:18em; top:52%; right:-35%; background:#FFF;}
	
#k3 {position:absolute; height:5em; width:18em; top:138%; right:-67%; background:#FFF;}

</style>
</head>
<body>

<div id="bg"  style="background: url(images/base.jpg) no-repeat center center fixed; 
	-webkit-background-size: contain;
	-moz-background-size: contain;
	-o-background-size: contain;
    background-size: contain;">
    
  <div id="map"> 
    <a href="path" id="base1">
			<b class="p1"></b>
			
			<em><span id="k1"><b> Titel</b><br />
            Beschreibung</br>
           </span><br />
            <img src="path" alt="Titel" id="title" border="0"/>
            </em>
		</a>
        
        <a href="path" id="base2">
			<b class="p1"></b>
			
			<em><span id="k2"><b>Titel</b><br />
			 Beschreibung<br />
            </span><br />
            <img src="path" alt="Title" id="title" border="0"/></em>
		</a>
        
        <a href="path" id="base3">
			<b class="p1"></b>
			
			<em><span id="k3"><b>Titel</b><br />
             Beschreibung<br />
             </span><br />
            <img src="path" alt="Titel" id="title" border="0"/> 
            </em>
		</a>
	

        </div>
        </div>
</body>

Ich hoffe ich hab beim Übertragen keinen blöden Fehler eingebaut...

Ist das zu komplex bzw. geht das gar nicht? Soll ich das Thema zu HTML/CSS verschieben? Hab ich mich unklar ausgedrückt?

Vielen Dank für jeden Hinweis!
 
Naja, du kannst mit Javascript z.B. Breite und Höhe des Background-DIVs auslesen und verarbeiten!

Javascript:
var divheight = document.getElementById('divname').style.height;
var divwidth = document.getElementById('divname').style.width;

Gibt es zu deiner Seite eine Live-Demo? Ohne die ganzen Bilder kann man mit dem Code (beinahe) nichts anfangen...

Edit: Bitte beachte, dass der JS-Code erst ausgeführt wird, wenn die Seite vollständig geladen ist. Ansonsten wird (vielleicht) ein noch nicht existierender DIV ausgelesen, was nicht geht!
 
Vielen Dank erstmal für Deine Antwort!
Wegen der Live Demo werd ich sehen, ob ich das kurz auf den Server spielen kann.
Das Problem bei Deiner Lösung ist glaube ich, dass das Background-DIV sich ja über das ganze Ausmaß des Body erstreckt, bloß halt nicht das Background Bild was je nach Auflösung des Browser-Windows vertical oder horizontal zentriert ist...
Ich hab den "Inhalt" ja schon versucht per nested DIV am Background-DIV zu orientieren, was aber auch nicht funktioniert.


Hier also der Link: http://pirminblum.net/test/probe_live.html

Ich hatte noch über einen andern Weg nachgedacht. Und zwar ein Fallback-Script für background-size:contain zu benutzen weil dieses müsste ja die aktuellen Werte des Hintergrundbildes verwenden und weitergeben und ich müsste ihm dann "nur" noch sagen diese Werte auch an das Content-DIV weiter zu geben...
Ich habe bisher aber nur Scripte für background-size:cover gefunden.

Vielleicht weisst Du da ja was, oder jemand anders?!
 
Ich muss gestehen, die ganzen Background-Begriffe wie cover, contain usw hab ich noch nie gehört oder gelesen. Muss hier also passen.

Andere Frage:
Wieso frägst du nicht im Browser ab, wie viel Platz ist und generierst dann die DIVs? So könntest du einen DIV erstellen mit margin:0px auto; welcher genau die Breite des Bildes hat. Wenn zu wenig Platz ist, nimmst du die Breite des Fensters und zentrierst das Bild, wobei das bei deinem Vorhaben eher Schrott wäre glaube ich. Man muss ja alles sehen! Also mach einfach einen DIV in der Größe des Bildes?
 
Nur kurz zur Erklärung:

background-size:contain heisst, das Hintergrundbild ist immer ganz zu sehen (wie in meinem Beispiel) und wird je nach Auflösung entweder vertikal oder horizontal zentriert.
Heisst: Ist das Browserfenster im Verhältnis breiter wird height mit 100% angegeben, ist das Browserfenster höher wird width mit 100% angegeben.
Oder füllt bei Einhaltung des Seitenverhältnisses das ganze Browserfenster.

background-size:cover heisst, das Bild füllt immer das ganze Browserfenster und wird bei Unter- oder Überschreitung der Aspect-Ratio (Seitenverhältnis) vertikal oder horizontal verschoben und eben abgeschnitten.

Für das "Cover"- Hintergrundbild gibt es ein schönes simples Script namens anystretch.js was man auf github finden kann.
Aber zu contain habe ich halt noch nichts gefunden.

Zu Deiner Frage:
Klingt super. Aber geht das auch bei dynamischen Größen? Das Bild ist ja mit width:100%; height:auto; angegeben und hat nur als jpg eine feste Größe.
Mit festen Größen wär das natürlich alles sehr viel einfacher, nur hätte ich dann dauerhaft einen "Rahmen" um das Bild, was schade wäre und bei größeren Auflösungen son kleines Ding in der Mitte und das ist nicht wirklich eindrucksvoll ^^.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück