weiß ich, das eine alte Frage, aber da die Menschen in Richtung der vh
Einheit bewegen, wird diese Frage viel häufiger geworden.
Um zu verdeutlichen, hier ist ein Beispiel für das Problem. Wir haben eine HTML-Datei, die eine iframe
lädt:
<!DOCTYPE html>
<html>
<head></head>
<style>
iframe {
height: 50vh;
width: 100%;
}
</style>
<body>
<iframe src="iframe.html"/>
</body>
</html>
Und seine iframe
:
<!DOCTYPE html>
<html>
<head></head>
<style>
div {
height: 50vh;
width: 100%;
background: blue;
}
</style>
<body>
<div></div>
</body>
</html>
Wichtig ist hierbei zu beachten ist, dass sowohl die iframe
und das iframe's
div
Element bezeichnet werden als eine Höhe von 50vh
. Das beabsichtigte Verhalten kann sein, dass die iframe
die Ansichtsfensterhöhe oder -breite des übergeordneten Kontexts berücksichtigt. Stattdessen sieht das Ergebnis wie folgt aus:
Das heißt, die Höhe des blauen Elements ist ~ 25% des Browserfensters, statt der erwarteten 50% (100% des iframe
). Obwohl wir wünschen, dass die iframe
das Ansichtsfenster des übergeordneten Elements respektiert, macht dieses Beispiel einen guten Beweis dafür, wie unintuitiv das sein könnte, obwohl es die v*
Einheiten wertvoller machen würde, da der Inhalt iframe
ist. Das Problem muss reichen mit wie Höhe des Ansichtsfensters bestimmt wird.
Von the spec:
Ansichtsfenster prozentiger Längen sind in Bezug auf die Größe des anfänglichen umschließenden Blocks. Wenn die Höhe oder Breite des ursprünglichen umschließenden Blocks geändert wird, werden sie entsprechend skaliert.
Sowohl ein iframe
und das Browser-Fenster kann die initial containing block sein, da sie beide gültig Ansichtsfenster sind. Ein Ansichtsfenster ist nicht auf das Browserfenster beschränkt, sondern stattdessen als ein Fenster oder ein anderer Anzeigebereich auf dem Bildschirm definiert, über den Benutzer ein Dokument einsehen können.
Ein iframe
erstellt einen nested browsing context, wenn er in ein Dokument eingefügt wird, und hat somit sein eigenes Ansichtsfenster.
Also ja, das ist das beabsichtigte Verhalten - und leider gibt es keine reine CSS-Problemumgehung - jedoch hat www139 ein Beispiel dafür geliefert, wie dies mit JavaScript erreicht werden kann. Das Problem damit beginnt, wenn viele Elemente Größe mit v*
Einheiten gesteuert werden.
Verwenden Sie Javascript dafür. Überprüfen Sie 'window.innerWidth' und' window.innerHeight'. – www139
Ist der Iframe auf derselben Domain? – www139
Können Sie uns etwas antun? – www139