Optimized embeds for Notion and modern web applications
Embeds must be optimized specifically for Notion's embed container to ensure seamless integration and optimal user experience.
| Requirement | Specification |
|---|---|
| Viewport | Must fill 100% of Notion embed container |
| Aspect Ratio | Preserve content aspect ratio within fluid container |
| No Scrollbars | Content must not overflow; hide or prevent scrollbars |
| No Borders/Margins | Zero default browser chrome |
| HTTPS | Required for Notion embed security |
| X-Frame-Options | Must allow embedding (Content-Security-Policy: frame-ancestors *) |
| Load Time | < 1s initial paint |
💡 Pro Tip: Use transparent backgrounds and ensure your CSS sets overflow: hidden on both html and body elements.
Frame.io embeds require special handling to strip all UI elements and present only the video content with native aspect ratio.
✅ Goal: When embedded in Notion, it should look like a native video — not like a Frame.io review link. Just the footage, nothing else.
object-fit: contain| Breakpoint | Behavior |
|---|---|
| Mobile (< 480px) | Fluid scaling, maintain native aspect ratio |
| Tablet (480-1024px) | Fluid scaling, native aspect ratio |
| Desktop (> 1024px) | Fluid scaling, max-width optional |
| Notion Default (~700px) | Primary optimization target |
| Priority | Type | Notes |
|---|---|---|
| 🔴 P0 | Frame.io | Primary use case — video only, native aspect ratio |
| 🔴 P0 | YouTube | Standard iframe, native aspect ratio |
| 🟡 P1 | Loom | Video walkthroughs |
| 🟡 P1 | Custom HTML/CSS | Widgets, cards |
| 🟢 P2 | Interactive React | Calculators, forms |
| 🟢 P2 | Calendly | Scheduling |
| 🟢 P2 | Static Images | With optional overlays |
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html, body {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
background: transparent;
}/* Padding-bottom technique for responsive aspect ratio */
.container {
width: 100%;
position: relative;
padding-bottom: 56.25%; /* 16:9 = 9/16 * 100 */
height: 0;
}
.iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
object-fit: contain;
}Content-Security-Policy: frame-ancestors *; X-Frame-Options: (removed or not set)
These headers allow your content to be embedded in any iframe, including Notion.
Built with Next.js • Optimized for Notion •View Demo