[THIS IS A RESIZED IFRAME]

Setting the height of an iframe to match the height of its content
Remarks, requirements (plus a script)

I. Proportional heights inside an iframed document must be (re)calculated with respect to the height of the parent document
There exists a variety of methods for setting the height of an iframe to match the height of its content. But I haven't found one that correctly handles the case of iframed documents containing elements with proportional heights ('vh' or '%'; correct me if I'm wrong). The problem is that, in a standard situation, any information sent to the iframe as regards to the proportional height ('%' or 'vh') of elements inside it will be interpreted by the iframe as information about percentages related to its own height, not as percentages related to the height of the main document. A script for setting the height of an iframe to match the height of its content should take this problem into account and make sure that proportional heights inside an iframed document will be (re)calculated with respect to the height of the parent document, not with respect to the height of the iframed document.

II. Fixed positioned elements inside an iframed document
'Position: fixed' inside a resized iframe doesn't make sense because the element is fixed relative to the iframe (which doesn't scroll anymore once it is resized), not to the parent document. Fixed positioned elements can even spoil the results of resizing an iframe, so a script for setting the height of an iframe to match the height of its content should replace all instances of 'position: fixed' with 'position: absolute'.

III. The height of the iframe should continue to match the height of its content when the iframe's content changes or when the window is resized
This seems a trivial remark but even a rather well-known code as that offered by https://www.dyn-web.com/tutorials/iframes/height/ doesn't always meet this requirement (as it does not meet the requirements made in I and II above either).

IV. A script that meets the requirement of I - III above
This commented script (in the head or the body of the main page) meets all above mentioned requirements. Usage: something like
<iframe id="ifr_id" name="ifr_name" scrolling="no" style="width: 100%; height: 0; border: 1px solid gray; box-sizing: border-box; " src="your_page.html" onload="ifr_resize('ifr_id'); window.addEventListener('resize', function (){ifr_resize('ifr_id')}, false)"></iframe>
The ID for the iframe is required because it is referenced by the onload handler for the iframe. Giving the iframe a name is optional. You will need it when you want to change the iframe's content by doing something like <a href="some_other_page.html" target="ifr_name">load some_other_page.html</a>. The height should be set to zero for best results. You may want to change the other styles. As for the scrolling attribute (scrolling="no"), it is used to make absolutely sure that the iframe doesn't have a vertical scrollbar. Although this attribute is deprecated in HTML5, it is still widely supported and even more solid than the CSS that could be used in its place.



Lorem ipsum dolor sit amet, ornare accumsan, dictum non vestibulum neque sapien, diam ac netus ac. Eu aliquam. Phasellus sed sodales vulputate dui. Amet rutrum parturient viverra euismod, pulvinar eu wisi hendrerit vivamus vel, quis donec molestie laoreet, in quam amet ad neque. Dictum fugiat leo. Amet aenean ipsum similique, donec bibendum sit vulputate, in nonummy tellus nam dignissim, leo arcu maecenas quam.

Erat urna lectus, ultrices rhoncus vehicula, eu enim facilisis convallis sit sollicitudin venenatis. Donec convallis tempor metus. Enim nulla congue vitae, orci ullamcorper, aliquam dolor magna pharetra enim excepturi. Proin diam integer massa. Posuere tellus wisi nec fusce justo, vitae integer cras lorem donec urna dui, massa ac sollicitudin sociis, sapien sed. Praesent egestas, dictum elit odio metus, morbi porttitor adipiscing justo auctor, velit penatibus aliquam accumsan pulvinar. Eu lacus vero mauris nunc, hendrerit nullam vestibulum ac ad metus non, urna cursus proin phasellus mi neque urna, ac condimentum wisi aliquam fringilla.

A semper vel purus eros lacus, ac non sed mus dui donec nulla. Posuere arcu elit, at eleifend totam mi, pellentesque in. Turpis viverra eget egestas non enim luctus, tempus a ornare non sociosqu ultricies hac. Suspendisse ligula felis iaculis montes tincidunt leo. Diam id molestie aptent nonummy, nec ridiculus aliquet enim, rutrum voluptate fusce mattis integer diam aliquam, risus mauris aenean. Ligula libero at laoreet dignissim quam morbi, felis et nec fermentum fusce tempor, ipsum mi sed leo aliquam elementum, rutrum leo at velit velit tempus. Do malesuada, dapibus etiam reprehenderit aliquam vitae ligula donec, egestas lectus. Magna sit enim lobortis ac fermentum tincidunt, cras curabitur turpis ut ut, arcu quis porttitor nulla, ut pede, nunc integer. Pulvinar facilisis sollicitudin mauris venenatis feugiat, pariatur lectus lacus tincidunt nonummy consequat, est ante ante, natoque commodo wisi odio, sit et sed. Tristique suscipit pede ultricies, at enim. Faucibus nunc sed.

Quisque morbi, et nec magna, nulla nec nec ultricies vitae. Nulla faucibus duis et nullam, inceptos in maecenas, eget diam tenetur orci ipsum porta sed. Sociis sit ligula natoque mauris, nunc vel, tincidunt porta urna aliquet, iaculis volutpat orci faucibus et. Fringilla pulvinar cubilia ipsum sit ullamcorper pellentesque, vestibulum amet. Sed pede lobortis eros sed pede id, ultrices posuere libero adipiscing ad nunc potenti, arcu lacinia, cras purus. Turpis nec pharetra amet, pulvinar adipiscing neque nulla cursus est, pede sed aliquam aliquam ultricies, maecenas nec optio cum tristique et. Tempor mi maecenas mollis augue accumsan, justo vitae, a dolor viverra porttitor nunc, ut eu pellentesque nunc. Magnis wisi sapien pulvinar iusto mauris adipiscing.

Lorem ipsum dolor sit amet, ornare accumsan, dictum non vestibulum neque sapien, diam ac netus ac. Eu aliquam. Phasellus sed sodales vulputate dui. Amet rutrum parturient viverra euismod, pulvinar eu wisi hendrerit vivamus vel, quis donec molestie laoreet, in quam amet ad neque. Dictum fugiat leo. Amet aenean ipsum similique, donec bibendum sit vulputate, in nonummy tellus nam dignissim, leo arcu maecenas quam.

Erat urna lectus, ultrices rhoncus vehicula, eu enim facilisis convallis sit sollicitudin venenatis. Donec convallis tempor metus. Enim nulla congue vitae, orci ullamcorper, aliquam dolor magna pharetra enim excepturi. Proin diam integer massa. Posuere tellus wisi nec fusce justo, vitae integer cras lorem donec urna dui, massa ac sollicitudin sociis, sapien sed. Praesent egestas, dictum elit odio metus, morbi porttitor adipiscing justo auctor, velit penatibus aliquam accumsan pulvinar. Eu lacus vero mauris nunc, hendrerit nullam vestibulum ac ad metus non, urna cursus proin phasellus mi neque urna, ac condimentum wisi aliquam fringilla.

A semper vel purus eros lacus, ac non sed mus dui donec nulla. Posuere arcu elit, at eleifend totam mi, pellentesque in. Turpis viverra eget egestas non enim luctus, tempus a ornare non sociosqu ultricies hac. Suspendisse ligula felis iaculis montes tincidunt leo. Diam id molestie aptent nonummy, nec ridiculus aliquet enim, rutrum voluptate fusce mattis integer diam aliquam, risus mauris aenean. Ligula libero at laoreet dignissim quam morbi, felis et nec fermentum fusce tempor, ipsum mi sed leo aliquam elementum, rutrum leo at velit velit tempus. Do malesuada, dapibus etiam reprehenderit aliquam vitae ligula donec, egestas lectus. Magna sit enim lobortis ac fermentum tincidunt, cras curabitur turpis ut ut, arcu quis porttitor nulla, ut pede, nunc integer. Pulvinar facilisis sollicitudin mauris venenatis feugiat, pariatur lectus lacus tincidunt nonummy consequat, est ante ante, natoque commodo wisi odio, sit et sed. Tristique suscipit pede ultricies, at enim. Faucibus nunc sed.

Quisque morbi, et nec magna, nulla nec nec ultricies vitae. Nulla faucibus duis et nullam, inceptos in maecenas, eget diam tenetur orci ipsum porta sed. Sociis sit ligula natoque mauris, nunc vel, tincidunt porta urna aliquet, iaculis volutpat orci faucibus et. Fringilla pulvinar cubilia ipsum sit ullamcorper pellentesque, vestibulum amet. Sed pede lobortis eros sed pede id, ultrices posuere libero adipiscing ad nunc potenti, arcu lacinia, cras purus. Turpis nec pharetra amet, pulvinar adipiscing neque nulla cursus est, pede sed aliquam aliquam ultricies, maecenas nec optio cum tristique et. Tempor mi maecenas mollis augue accumsan, justo vitae, a dolor viverra porttitor nunc, ut eu pellentesque nunc. Magnis wisi sapien pulvinar iusto mauris adipiscing.
END