溢出回退与 @position-try
浮层默认贴在锚的上方;锚已经贴着视口顶边时,浮层会被挤出可视区。position-try-fallbacks 用于声明一串「首选位置不行就换这个」的候选,浏览器自动挑第一个放得下的。本页的首选位置沿用 position-area 页的九宫格关键字。
CSS.supports() 探测。1 · 内置翻转关键字
浮层首选 position-area: top center。锚贴到顶边时上方放不下,浮层按候选列表翻到下方;贴到侧边时横向同样会翻。
注 · 内置关键字有三个:flip-block 沿块轴镜像,通常表现为上下翻;flip-inline 沿行内轴镜像,通常表现为左右翻;flip-start 沿主对角线交换两轴,适合「右下与左上」之间的切换。逗号分隔表示多个候选依次尝试,空格连写表示同一个候选里同时翻两个方向。
2 · @position-try 的具名候选
内置翻转只做镜像。回退时若要改尺寸、改对齐或换一套完全不同的摆法,用 @position-try 定义具名候选,再写进 position-try-fallbacks,图 1-1 下拉里的 --compact-below 即出自此。
@position-try 具名候选的定义及其生效后的浮层形态。可对照候选内改写的属性与浮层的实际变化。3 · position-try-order 的选取策略
默认从首选开始,取第一个不溢出的候选。若更希望「哪个候选给浮层的空间最多就用哪个」,设 position-try-order: most-height,另有 most-width / most-block-size / most-inline-size。内容较多、希望尽量展开的长菜单适用这一档。图 1-1 的下拉也可调这个属性。
4 · position-visibility 与锚的可见性
锚滚出可视区后,浮层若仍停在原地会造成误导。position-visibility: anchors-visible 让浮层随锚一起隐藏,no-overflow 则在浮层自身溢出时隐藏。
建议 · 一套完整的组合是:先用 position-area 摆一个理想位,再用 position-try-fallbacks 给两三个翻转候选,需要时用 position-try-order 选空间最大的,最后加 position-visibility: anchors-visible 处理锚不可见的情形。贴边自适应到此不必再写
JS。position-try 简写可以把顺序与候选写在一起:position-try: <order> <fallbacks>。