You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: css-sizing-4/responsive-iframes-explainer.md
+12-13Lines changed: 12 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,22 +5,22 @@
5
5
[Iframes]([url](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/iframe)) are very useful for sandboxing web content into different documents. The options currently available are:
6
6
1. A [same-origin]([url](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)) iframe, which provides full style &
7
7
layout isolation, and by-default script isolation. This prevents the parent and child documents from accidentally interfering with each other.
8
-
2. A cross-origin iframe, which additionally provides robust security against untrusted embedders or embedees.
8
+
2. A cross-origin iframe, which additionally provides robust security and privacy against untrusted embedders or embedees.
9
9
10
10
In addition, iframes participate in the layout of the parent document, via the style and layout of their owning `<iframe>` element.
11
-
However, unlike other HTML elements such as `<div>`, iframe elements do not have the ability to support *responsive layout*, i.e. size themselves automatically to contain the [natural dimensions]([url](https://drafts.csswg.org/css-images-3/#natural-dimensions)) of the contents of the iframe. Instead, browser automatically add scrollbars to ifrmaes as necessary, so that users can access the content.
11
+
However, unlike other HTML elements such as `<div>`, iframe elements do not have the ability to support *responsive layout*, i.e. size themselves automatically to contain the [natural dimensions]([url](https://drafts.csswg.org/css-images-3/#natural-dimensions)) of the contents of the iframe. Instead, browsers automatically add scrollbars to iframes as necessary, so that users can access the content.
12
12
13
13
This is a problem:
14
14
* From a user's perspective, iframe scrollbars are a worse UX in cases where the iframe contents are important to them and can fit reasonably in the visible viewport without these additional scrollbars.
15
-
* From a developer's perspective, they are forced to use script to communicate natural dimensions, in order to help the user have better UX without scrollbars.
15
+
* From a developer's perspective, they are forced to use non-trivial script to communicate natural dimensions across frames in order to help the user have better UX without scrollbars.
16
16
17
-
Embedded SVG documents already support responsive layout. *Responsive iframes* add responsive layout to iframes, as long as the embedding and embedded document both opt into do so. This allows supporting responsive layout without losing any of the advantages of iframes in (1) and (2) above.
17
+
Embedded SVG documents already support responsive layout. *Responsive iframes* add responsive layout to iframes, as long as the embedding and embedded document both opt into do so, thus providing support for responsive layout without losing any of the advantages of iframes in (1) and (2) above.
@@ -29,23 +29,22 @@ In general, there is a lot of demand for this feature, as evidenced by:
29
29
30
30
## Solution
31
31
32
+
The embedding document opts in via the `contain-intrinsic-size: from-element` CSS property on the `<iframe>` element, and the embedded document opts in via a new `<meta name="responsive-embedded-sizing">` tag.
32
33
33
-
The embedding document does so via the `contain-intrinsic-size: from-element` CSS property on the `<iframe>` element, and the embedded document via a new `<meta>` tag with name `responsive-embedded-sizing`.
34
-
35
-
When both are set, then at the time the `load` event on the embedded document fires, the embedding document is notified with the new [natural height]([url](https://drafts.csswg.org/css-images-3/#natural-height)) of the embedded (iframe) document. This height is then taken into account in the final size of the `<iframe>` element, along with other constraints specified by the HTML and CSS of the embedding document. Subsequent changes to content, styling or layout fo the embedded document do not affect the `<iframe>` sizing.
34
+
When the meta tag is present at the time the `load` event on the embedded document fires, the embedding document is notified with the new [natural height]([url](https://drafts.csswg.org/css-images-3/#natural-height)) of the embedded (iframe) document. If `contain-intrinsic-size` is set on the `<iframe>` element, it takes this heigh into consideration in the same way as any other replaced element's layout, along with other constraints specified by the HTML and CSS of the embedding document. Subsequent changes to content, styling or layout fo the embedded document do not affect the `<iframe>` sizing.
36
35
37
36
The double opt-in preserves:
38
-
* Backward compatibility for existing content.
39
-
* Privacy and security guarantees of cross-origin content.
37
+
* Backward compatibility for existing content
38
+
* Privacy and security guarantees of cross-origin content
40
39
41
40
The "one-shot" sizing to natural dimensions avoids:
42
-
* Performance issues and CLS due to changing iframe sizing. (To further mitigatge performance risks, limitations on levels of `<iframe>` nesting may be imposed.)
43
-
* Potential infinite layout loops.
41
+
* Performance issues and CLS due to changing iframe sizing (To further mitigatge performance risks, limitations on levels of `<iframe>` nesting may be imposed.)
42
+
* Potential infinite layout loops
44
43
45
44
## Future extensions
46
45
47
46
A JavaScript API could be added in the future that would allow embedded documents to request relayout in their embedding document context.
48
47
49
48
## Privacy and security
50
49
51
-
Information about the contents of a cross-origin iframe can be exfiltrated by an embedding malicious document that observes the laid-out size of the iframe. This can be mitigated through use of the the `X-Frame-Options` HTTP header to allow embedding into only trusted embedding documents, plus the `responsive-embedded-sizing``<meta>` tag to further opt into responsive layout. Additional restrictions could be put in place through contents of the `<meta>` tag that would restrict to only explicitly allowed origins.
50
+
Information about the contents of a cross-origin iframe can be exfiltrated by embedding it in a malicious document that observes the laid-out size of the iframe. This can be mitigated through use of the the `X-Frame-Options` HTTP header to allow embedding into only trusted embedding documents, plus the `responsive-embedded-sizing``<meta>` tag to further opt into responsive layout. Additional restrictions could be put in place through contents of the `<meta>` tag that would restrict to only explicitly allowed origins.
0 commit comments