3.9k Aufrufe
Gefragt in Webseiten HTML von friedel Experte (3.3k Punkte)
Hallo.

Ich habe mal wieder ein Problem, für das ich keine Lösung finde. Ich bastel gerade eine Seite, bei der ein Bild so ins Browserfenster eingepasst werden soll, dass es möglichst groß ist, aber vollständig sichtbar ist. Mein Script hat bei kleinen Fensterbreiten nicht funktioniert und ich habe angefangen, nach und nach alles aus der Seite zu löschen, sodass das Problem gerade noch besteht.

Ich habe jetzt folgende Minimalseite:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<script type="text/javascript" src="file.js"></script>
<link rel="stylesheet" type="text/css" href="file.css">
</head>

<body>
</body>
</html>


Die file.css sieht so aus:
* {margin:0;padding:0;}
html, body {width:100%; height:100%;}
Aber ich glaube, die ist nicht relevant.

Die file.js enthält jetzt nur noch:
function init() {
Breite = Fensterbreite();
alert("Breite:"+Breite);
};

window.onload = init;

function Fensterbreite() {
if (window.innerWidth) return window.innerWidth; // Ermitteln der inneren Fensterbreite
else if (document.body.clientWidth) return document.body.clientWidth; // Ermitteln der inneren Fensterbreite für alte IE
else if (document.documentElement.clientWidth) return document.documentElement.clientWidth; // Ermitteln der inneren Fensterbreite für neue IE
};


Der Firefox verarbeitet window.innerWidth, sodass die anderen Zeilen der function Fensterbreite() nicht greifen. Die Alertbox gibt mir auch die korrekte Fensterbreite aus, wenn das Fenster schön breit ist. Wenn ich das Fenster verkleinere und aktualisiere (neu lade) wird ein kleinerer Wert ausgegeben, solange das Fenster mindestens 512px breit ist. Wenn ich das Fenster weiter verkleinere, bleibt der Wert immer bei 512. Bei meinem Notebook (mit gleicher Firefoxversion) passiert genau das gleiche, nur geht es hier bis 343 runter. Egal wie schmal ich das Fenster mache, es bleibt immer bei mindestens 343.

Woran liegt das? Wie kann ich die korrekte innere Fensterbreite ermitteln?

Vielen Dank.
Friedel

11 Antworten

0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
Update: Inzwischen habe ich herausgefunden, dass die Adressleiste die Probleme macht. Wenn die ausgeblendet wird, funktioniert alles. Aber natürlich kann ich nicht erwarten, dass alle Besucher der Seite ihre Adressleiste ausblenden, bevor sie die Seite besuchen. Offensichtlich also ein Browserbug. Gibt es einen Workaround?
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
ich habe Deinen code kopiert, (allerdings habe ich alles in eine einzige datei geschrieben),
und bei mir (FF 11) wird anscheinend immer die richtige fensterbreite angezeigt.
(unter 140 lässt sich das browser fenster nicht mehr verkleinern, aber das hat ja nix mit deinem script zu tun)
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
Bei mir tritt das Problem unter FF11 mit allen Rechnern auf, allerdings mit unterschiedlichen Grenzen, ab denen das Problem auftritt.

Warum kann man bei dir das Fenster nicht schmaler als 140px machen? Bei mir geht das.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
kleiner als diese größe lässt sich bei mir (winXP) gar kein fenster verkleinern. Möglicherweise ist das von irgendwelchen windows einstellungen abhängig, aber:
Gibts bei Dir keine Beschränkung? Ich meine, das Fenster lässt sich doch sicher nicht so weit verkleinern, bis es weg ist, oder?

Ansonsten kann ich das, was Du beschreibst, nicht nachvollziehen, und mir auch nicht erklären, tut mir leid.
Klingt eigentlich, als ob irgendein element enthalten ist, das die body größe begrenzt. ist aber ja in dem vorliegenden code nicht der fall.
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
Bei mir kann man Fenster so klein machen, wie man will. Es ist allerdings ausgesprochen lästig, wenn da irgendwelche Fenster in 1*1Pixel sind. Man sieht sie nämlich nicht. Man kann ein Browserfenster zwar nicht durch ein Script, das im Browserfenster läuft so sehr verkleinern, aber ich kann mit der Maus meine Fenster so klein oder groß machen, wie ich will - auch deutlich größer als der Desktop ist. Das ist sehr praktisch, solange man es bewusst und absichtlich macht. Man braucht es aber normalerweise nicht. Mit meinem Problem hat es aber offensichtlich nichts zu tun. Ich habe übrigens inzwischen festgestellt, dass mein Script bei meinem Hauptrechner bis 520px Fensterbreite tadellos funktioniert. Wenn das Fenster weniger als 512px breit ist, gibt window.innerWidth trotzdem immer 512px zurück. Wenn ich die Navigationssymolleiste ausblende funktioniert es bis 250px. Wenn das Fenster weniger als 250px briet ist, gibt window.innerWidth immer 250px zurück.

Da das Problem bei allen Rechnern auftritt, an denen ich getestet habe, dürfte es wohl nicht an meinem Rechner liegen. Allerdings laufen alle diese Rechner mit Ubuntu oder Mint. Ich habe leider keinen Windowsrechner mehr, auf dem Firefox läuft. Mein einziger Windowsrechner müsste mal wieder komplett neu aufgesetzt werden, aber ich nutze ihn kaum noch. Jedenfalls ist darauf kein lauffähiger Firefox mehr.

Aber auch, wenn es "nur" unter Linux auftritt, ist es wohl ein Browserbug. Weiß jemand, wo sowas dokumentiert ist?
0 Punkte
Beantwortet von
auf meinem Win-XP-Rechner mit Firefox 9.01 ist der angezeigte Minimalwert bei 275px. Interessantes Phänomen!
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
@gast_42: Hast du mal versucht, Symbolleisten zu entfernen oder zu ergänzen? Ändert sich der Wert dadurch auch bei dir? Bei mir kommen dadurch auf manchen Rechnern Minimalwerte zustande, die durchaus so große sind, dass sie relevant sind, weil man manchmal kleinere Fenster benutzt.
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
Ich nehme an, dass die Begrenzung (bzw. Handhabung) der Fenstergröße allgemein eine Sache des Betriebssystems ist.
Innerhalb des "Betriebssystem-Fensters" baut FF seinen Inhalt auf, der vermutlich wiederum seine eigenen Limits hat.

Auf einem zweiten XP Rechner (mit einer größeren Bildschirmgröße, 1280x1024),
ist der Minimalwert bei mir 104px.
Dabei waren alle Symbolleisten außer "Menü" ausgeblendet.
Ohne Menü sinds 142px, weil dann automatisch so'n "Firefox-Statbutton" in der Titelzeile erscheint.
Das Ein-/Ausblenden verschiedener Symbolleisten machte einen großen Unterschied (zB. Nav.-leiste: 340px)

hier nochmal der Code meiner Testdatei (Nur damit es für Nachfolgende Interessierte leichter fällt, das zu testen):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title></title>
<style type="text/css">
* { margin:0; padding:0; }
html, body { width:100%; height:100%; }
</style>
<script type="text/javascript">
window.onload = init;
function init() {
var Breite = Fensterbreite();
alert("Breite:"+Breite);
};
function Fensterbreite() {
if (window.innerWidth) return window.innerWidth;
else if (document.body.clientWidth) return document.body.clientWidth; // alte IE
else if (document.documentElement.clientWidth) return document.documentElement.clientWidth; // neue IE
};
</script>
</head>
<body></body>
</html>


Ich habe außerdem mal ausprobiert: html, body { width:1px; height:px; }
hat aber keinen Unterschied gemacht.
0 Punkte
Beantwortet von
@Friedel: ich nutze FF nur zum Seitentesten, allgemein ist er mir als Browser zu unhandlich. Ich habe daher gerade keine Ahnung wo/wie ich sowas ändern könnte. Wenn du mir kurz beschreibst wie das einfach geht teste ich gern.
0 Punkte
Beantwortet von friedel Experte (3.3k Punkte)
@gast_42: Unter Ansicht &#8594; Symbolleisten kannst du bestimmen, welche Leisten eingeblendet sein sollen.

@kicia: Ich habe 3 Rechner mit identischem Betriebssystem. Alle haben verschiedene Mindestbreiten.
...