当前位置: 首页 > news >正文

CSS 锚点定位

简介

Chrome 125 引入了一个 CSS Anchor Position API,它能够让元素相对于页面上的其它元素(锚点)进行定位。相比于传统的定位方式,锚点定位则更加简单灵活。

接下来就简单介绍下锚点定位的基本使用

基本定位

设置锚点,将 anchor-name 属性应用于所选元素,并为其分配唯一标识符,标识符前面必须添加双短划线。

.anchor-ele {
  anchor-name: --anchor-el;
}

连接锚点.anchor-ele 将充当锚点,引导其它元素连接至此锚点。可通过以下两种方式连接:隐式锚点 和 显式锚点,区别在于是否在 anchor() 函数中指定锚点名称,显式锚点就显得更加灵活,可用于锚定多个元素。

/* 隐式锚点 */
.position-ele {
  position-anchor: --anchor-el;
  top: anchor(bottom);
}

/* 显式锚点 */
.position-ele {
  top: anchor(--anchor-el bottom);
}

锚点定位基于 CSS 绝对定位。如需使用定位值,您需要为定位的元素添加 position: absolute。然后,使用 anchor() 函数应用定位值。

.position-ele {
  position: absolute;
  bottom: anchor(--anchor-el top);
}

Base Position

多个锚点

元素可以绑定至多个锚点。在以下示例中,元素的左上角固定在第一个锚点的右下角,元素的右下角固定在第二个锚点的左上角:

.one {
  anchor-name: --one;
}
.two {
  anchor-name: --two;
}
.anchored {
  position: absolute;
  top: anchor(--one bottom);
  left: anchor(--one right);
  right: anchor(--two left);
  bottom: anchor(--two top);
}

Multi

调整锚点位置

如果当元素到达页面边缘的时候需要调整位置,可以创建备用锚点位置。(使用 @position-try 指令和 position-try-options 属性)

接下来写一个 select 浮层来展示效果:

首先展示一下初始化的界面效果

<input class="input" type="text" />
<div class="overlay"></div>
.input {
  anchor-name: --anchor-input;
}
.overlay {
  width: 400px;
  height: 200px;
  background-color: #fff;
  box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
  position: absolute;
  position-anchor: --anchor-input;
  inset-area: bottom span-right;
}

Init

创建四个备用位置,浮层的位置分别在 左上、右上、左下、右下,对应了控件在屏幕四个角的时候浮层的位置调整。

@position-try --top-left {
  inset-area: top span-left;
}
@position-try --top-right {
  inset-area: top span-right;
}
@position-try --bottom-left {
  inset-area: bottom span-left;
}
@position-try --bottom-right {
  inset-area: bottom span-right;
}
.overlay {
  position-try-options: --bottom-left, --bottom-right, --top-left, --top-right;
}

当控件在左上角的时候浮层展示效果:

跟初始化的位置是一样的

当控件在右上角的时候浮层展示效果:

overlay top right

当控件在左下角的时候浮层展示效果:

overlay bottom left

当控件在右下角的时候浮层展示效果:

overlay bottom right

总结

从以上几个示例来看,只用简单的几行代码,就能够实现复杂的布局效果,足以见得这个功能的强大!
CSS Anchor Positioning API 的推出或许是 Web 开发领域的颠覆性改变,大家可以尝试使用这项新特性,以便为未来的广泛应用做好准备。

相关文章:

  • spring-ai-openai调用Xinference1.4.1报错
  • 【ZYNQ Linux移植】1-前期准备
  • 【C++初阶】--- string类模拟实现
  • Springboot JPA ShardingSphere 根据年分表
  • CentOS 7无法上网问题解决
  • 由小到大的数列,寻找是否存在一个数的耗时最小的算法
  • Linux红帽:RHCSA认证知识讲解(十 二)调试 SELinux,如何管理 SELinux 的运行模式、安全策略、端口和上下文策略
  • WEB安全--内网渗透--捕获NET-NTLMv2 Hash
  • 【Android Audio】Parameter Framework - pfw
  • 解锁轨道交通 UI 界面设计的奥秘,打造出行新体验
  • Langfuse的使用带样例
  • 车辆视频检测器linux版对于密码中包含敏感字符的处理方法
  • `uia.WindowControl` 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式
  • 批量压缩 jpg/png 等格式照片|批量调整图片的宽高尺寸
  • LINUX 5 cat du head tail wc 计算机拓扑结构 计算机网络 服务器 计算机硬件
  • 计算机网络体系结构(一)
  • # 项目部署指南:Flask、Gradio与Docker实现流程
  • Three.js 系列专题 5:加载外部模型
  • STM32cubmax配置STM32407VET6,实现网络通信
  • Kotlin与HttpClient编写视频爬虫
  • 海外seo网站建设/百度如何发布作品
  • 自己做游戏app的网站/网推项目平台
  • 建设厅网站/googleseo优化
  • 自己做的网站怎么加入微信支付/aso排名优化
  • wordpress网站搭建教程视频/广州:推动优化防控措施落地
  • 怎么用java 做网站/网站优化要多少钱