2012-09-14 4 views
14

Hier undicht ist einige HTML:Medienanfragen über mehrere Rahmen

<iframe src="test.html" style="width: 200px; height: 100px;"></iframe> 
<iframe src="test.html" style="width: 800px; height: 100px;"></iframe> 

Die test.html Seite enthält einige CSS aus einer externen Datei:

<link rel="stylesheet" type="text/css" href="style.css" /> 

Und das Stylesheet hat:

@media all and (max-width: 600px) { 
    body {background-color: red;} 
} 

Die oben ist vereinfacht, aber genug, um das Problem zu demonstrieren: Beide Seiten sind rot, trotz eines von ihnen c das Lernen ist breiter als das andere. Demonstration page

Was gibt?

(Anmerkung: Getestet in IE und Chrome - Chrome war in Ordnung, mit einem Rahmen rot und der andere weiß.)

+0

In welchem ​​IE testen Sie dies? Sicher wird es in IE8 oder weniger nicht funktionieren, da Medienabfragen in der vorherigen Version von IE8 nicht unterstützt werden. Es wird nur in IE9 –

+0

unterstützt. Wenn es IE8 oder weniger wäre, wären beide Iframes weiß und nicht rot. –

+0

Nicht unbedingt. Ich habe gerade versucht IE 7 und beide Seiten sind weiß. – DayS

Antwort

18

Wie Sie in this answer lesen können, unterstützt Internet Explorer 9 CSS3-Medienabfragen, jedoch nicht innerhalb von Frames, wenn das CSS mit der Medienabfrage in einer externen Datei gespeichert ist. Daher sollten Sie Ihre Medienabfrage in den Kopf der -Seite einfügen. Frühere IE-Versionen unterstützen nativ keine Medienabfragen, aber Sie könnten eine Javascript-Bibliothek verwenden (siehe respond.js oder css3-mediaqueries-js), um dieses Problem zu beheben.

+0

Super, vielen Dank! Dies ist extrem schwer zu finden und nur die Medienabfrage in den Hauptteil der HTML-Datei anstelle des Stylesheets zu bringen, funktioniert perfekt auf IE9. (Beachten Sie, dass dieser Fehler nur IE9 Win7 ist - kein Problem unter Vista oder einer anderen IE-Version). –

+3

Wenn dies für Sie nicht praktikabel ist, können Sie IE9 jede CSS-Datei als separate Entität anzeigen lassen, indem Sie die URL ändern - fügen Sie der gemeinsam genutzten CSS-Datei mit den Medienabfragen einen eindeutigen URL-Parameter hinzu. Z. B. lädt der Hauptrahmen site.css, iframe lädt site.css? Frame = 1. Gleicher Effekt. – sync

+0

@sync: tolle Lösung. Ich habe #iefix zum css des Frames hinzugefügt und jetzt funktioniert es richtig – mstaessen

-1

Sie können mit jquery mit dem folgenden Skript den Job:

<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script> 
<script> 
    $(document).ready(function() { 
     if ($(document).width() < 600) { 
      $('body').css('background-color', 'red'); 
     }; 
    }); 
</script> 
+0

Wirklich? Und was, wenn ich: a) jQuery total verachte? b) Möchten Sie keine JavaScript-Lösung für dieses CSS-Problem? c) Möchten Sie die Größe des Fensters ändern? –

+0

Nun ... Ich stimme zu, dass die Verwendung von jQuery nicht der sauberste Weg ist, um einen CSS-Job zu machen. Aber ich bin nicht einmal sicher, ob es möglich ist, das auf IE9 älteren Versionen zu tun. Außerdem können Sie das Skript anpassen, um den Hintergrund neu zu berechnen, wenn das Fenster in der Größe geändert wird :) Wenn Sie eine andere Lösung finden, vergessen Sie nicht, sie hier zu schreiben. Ich bin neugierig darauf. – DayS

+1

Nun ja, in diesem Beispiel würde eine JS-Lösung funktionieren. Dies ist jedoch ein viel vereinfachtes Beispiel. Es kann eine beliebige Anzahl von Elementen geben, die angepasst werden müssen, und die Kaskadierung müsste immer noch richtig funktionieren. –