html-fly
html-fly
HTML flying out of devices — ten html3d choreographies.
Read the rig's notes
`html3d(overlay=screen …)` inside a device is the html twin of the ui3d overlay: every TOP-LEVEL markup child mounts as a REAL plane anchored flush on the glass, in the screen's own px space (an iphone glass is 71×154mm, `coords_width=390` lays the CSS out at phone px). Because each child is a world plane, its delta tracks LEAVE the screen: `position` "dx dy dz" in mm (+z toward the camera, y down like the page), `rotation` in degrees, `scale`, `opacity`. The flat `html` behind it stays on the glass — that is the app the parts jump out of, and back into. 01. peel iphone · notification cards peel off the glass one by one, hover, snap back 02. assemble iphone · the app flies IN from scattered origins (reverse of 01) 03. lift laptop · dashboard tiles rise to staggered depths, the chart swings out 04. handoff iphone → laptop · a receipt card leaves the phone and lands on the desk screen 05. fan ipad · photo cards fan out of the tablet into a 3D arc 06. widgets imac · widgets pop out and hover with a slow drift 07. modal chrome · a dialog jumps toward the camera, the page stays behind 08. bubbles iphone · chat bubbles leave the phone and stack in the world beside it 09. swarm laptop · twelve tiles converge from twelve origins into the grid 10. layers iphone · the UI splits into z-layers, one card flies THROUGH the lens Capture: `nx run tools:capture:browser -- --project promos/primitives/html/html-fly.promo` Preview: /packages/runtime/index.html?project=promos/primitives/html/html-fly.promo
- Topic
- uis
- Scenes
- 10
- Kind
- reference rig
//
HTML flying out of devices — ten html3d choreographies.
`html3d(overlay=screen …)` inside a device is the html twin of the ui3d
overlay: every TOP-LEVEL markup child mounts as a REAL plane anchored flush
on the glass, in the screen's own px space (an iphone glass is 71×154mm,
`coords_width=390` lays the CSS out at phone px). Because each child is a
world plane, its delta tracks LEAVE the screen: `position` "dx dy dz" in mm
(+z toward the camera, y down like the page), `rotation` in degrees,
`scale`, `opacity`. The flat `html` behind it stays on the glass — that is
the app the parts jump out of, and back into.
01. peel iphone · notification cards peel off the glass one by one, hover, snap back
02. assemble iphone · the app flies IN from scattered origins (reverse of 01)
03. lift laptop · dashboard tiles rise to staggered depths, the chart swings out
04. handoff iphone → laptop · a receipt card leaves the phone and lands on the desk screen
05. fan ipad · photo cards fan out of the tablet into a 3D arc
06. widgets imac · widgets pop out and hover with a slow drift
07. modal chrome · a dialog jumps toward the camera, the page stays behind
08. bubbles iphone · chat bubbles leave the phone and stack in the world beside it
09. swarm laptop · twelve tiles converge from twelve origins into the grid
10. layers iphone · the UI splits into z-layers, one card flies THROUGH the lens
Capture: `nx run tools:capture:browser -- --project promos/primitives/html/html-fly.promo`
Preview: /packages/runtime/index.html?project=promos/primitives/html/html-fly.promo
promo#html-fly
// =======================================================================
// 01 · PEEL — cards peel off the phone toward the camera, then snap back
// =======================================================================
scene#s01-peel(duration=8 transition=match-move transition-duration=0.8)
camera(type=perspective fov=36 near=8.5 far=17000 position="0 0 420" look_at="0 0 0")
position
0 30 10 450
3.5 easeInOutCubic -50 16 390
8 easeInOutCubic 0 0 420
look_at
0 0 0 0
8 easeInOutCubic 0 0 0
background(top=#0b1020 bottom=#04060c)
lights
light(type=ambient color=#8fb2ff intensity=0.6)
light(type=directional color=#ffffff intensity=2.1 position="340 680 510")
light(type=directional color=#7aa2ff intensity=0.9 position="-510 170 340")
environment(hdr="studio_small_04_2k" as_background=false background_color=#05070f exposure=1.0 blurriness=0.5 intensity=0.5)
postprocessing
step(name=render)
step(name=unreal_bloom strength=0.18 radius=0.45 threshold=0.88)
haze#s01-hz-a(match=hz-a blend=add opacity=0.24 position="-380 200 -600" color=#2563EB size="2400 1800" pulse=0 decay=0)
position
0 0 0 0
8 easeInOutSine 60 -30 0
haze#s01-hz-b(match=hz-b blend=add opacity=0.2 position="360 -160 -620" color=#7C3AED size="2600 2000" pulse=0 decay=0)
haze#s01-hz-c(match=hz-c blend=add opacity=0.16 position="40 240 -640" color=#00C8FF size="1600 1300" pulse=0 decay=0)
text#s01-title(text="peel" kind=layer size=220 worldHeight=24 color=#eaf4ff weight=800 align=center position="0 200 40")
text#s01-sub(text="html3d overlay · each card is a plane on the glass, and a +z track lifts it off" kind=layer size=120 worldHeight=12 color=#8ea3c8 weight=500 align=center position="0 172 40")
iphone#s01-phone(body=space-black body-scope=all safe-top=off rotation="0 -10 0" position="0 -14 0")
rotation
0 0 0 0
8 easeInOutSine 0 22 0
html(width=71 height=154 coords_width=390 fill=#0b0d14)
style(text=".app{height:100%;box-sizing:border-box;padding:66px 22px;font-family:-apple-system,system-ui,sans-serif;color:#eef0f6;background:radial-gradient(120% 60% at 50% -10%,#1b2340,#0b0d1