当前位置:首页 > 科技  > 软件

CSS锚点定位终于来了!

来源: 责编: 时间:2024-07-17 16:52:30 696观看
导读盼了好久,最近 Chrome 125终于迎来了CSS 锚点定位的正式支持。这是一个和 CSS 滚动驱动动画一样,足以颠覆整个 Web 开发领域的新特性。有了这个特性,很多以前强依赖 JS 的方式,都可以纯 CSS解决,并且实现起来更加简单、更

as628资讯网——每日最新资讯28at.com

盼了好久,最近 Chrome 125终于迎来了CSS 锚点定位的正式支持。这是一个和 CSS 滚动驱动动画一样,足以颠覆整个 Web 开发领域的新特性。有了这个特性,很多以前强依赖 JS 的方式,都可以纯 CSS解决,并且实现起来更加简单、更加灵活,一起看看吧!as628资讯网——每日最新资讯28at.com

as628资讯网——每日最新资讯28at.com

可以看到,在切换tab时,底下的背景是可以无缝过渡的。在以前,我们要实现这样的功能,必须要借助 JS来获取当前点击元素的尺寸和位置,但现在,只需要借助 CSS 锚点定位就能轻松实现了。as628资讯网——每日最新资讯28at.com

位置信息前面以及提到了,用anchor(left)和anchor(top)就可以了,那尺寸呢,需要用到anchor-size。as628资讯网——每日最新资讯28at.com

anchor-size(width) /*锚点元素宽度*/anchor-size(height)  /*锚点元素高度*/

利用这个特性,我们可以很轻松的实现这样一个效果,结构如下:as628资讯网——每日最新资讯28at.com

<nav class="tab">  <a class="item" href="#HTML" name="HTML">HTML</a>  <a class="item" href="#CSS" name="CSS">CSS</a>  <a class="item" href="#JavaScript" name="JavaScript">JavaScript</a>  <a class="item" href="#React" name="React">React</a>  <a class="item" href="#Vue" name="Vue">Vue</a></nav>

我们用伪元素来当做tab高亮背景,关键实现如下:as628资讯网——每日最新资讯28at.com

.tab::after{  content: '';  position: absolute;  border-radius: 100px;  background-color: rgba(65, 105, 225, 0.2);  position-anchor: --anchor-el;  width: anchor-size(width);  height: anchor-size(height);  left: anchor(left);  top: anchor(top);  transition: .3s;  pointer-events: none;}.item:target{  anchor-name: --anchor-el;}

这样就能轻松实现这个效果了,你也可以访问以下在线链接(Chrome 125+)as628资讯网——每日最新资讯28at.com

  • CSS anchor nav (codepen.io)[2]


as628资讯网——每日最新资讯28at.com

6. 动态调整位置 position-try-options

有时候定位元素会处于屏幕边缘,当没有足够空间显示时,可以通过position-try-options来设置一个备用位置。as628资讯网——每日最新资讯28at.com

举个例子,比如一个气泡,默认是朝上的,当滚动到屏幕边缘时会自动朝下,示意如下:as628资讯网——每日最新资讯28at.com

as628资讯网——每日最新资讯28at.com

这种情况就可以用@position-try来实现了,具体做法是这样的。as628资讯网——每日最新资讯28at.com

先通过position-try-options指定一个变量名,比如--bottom。as628资讯网——每日最新资讯28at.com

tooltip{      position: fixed;      position-anchor: --anchor-el;      inset-area: top;      position-try-options: --bottom;}

然后通过@position-try来定义规则。as628资讯网——每日最新资讯28at.com

@position-try --bottom {  inset-area: bottom;}

这样就实现定位元素位置自动调整了。as628资讯网——每日最新资讯28at.com

除此之外,还有一种便捷写法,直接给position-try-options指定以下关键字。as628资讯网——每日最新资讯28at.com

position-try-options: flip-block; /*垂直翻转*/position-try-options: flip-inline; /*水平翻转*/

这样就无需@position-try定义了,实现更简单。as628资讯网——每日最新资讯28at.com

  • CSS anchor position-try-options (codepen.io)[3]

当然,我觉得这个功能还是稍显不足的,比如当气泡带有箭头时,虽然也能翻转,但是却无法改变箭头的位置,也就是无法查询到当前是否已经翻转了,就像这样。as628资讯网——每日最新资讯28at.com

as628资讯网——每日最新资讯28at.com

首先是点击出现,这个就是popover的功能了,通过popovertarget和popover属性,将两者结合起来,就能轻松实现点击出现菜单的功能。as628资讯网——每日最新资讯28at.com

<button class="btn" popovertarget="more"></button><div class="menu" id="more" popover>  <button class="item">编辑</button>  <button class="item">删除</button></div>

然后就定位,利用CSS锚点定位,将菜单定位到按钮的右下方,也就两三行代码的事。as628资讯网——每日最新资讯28at.com

.btn{  anchor-name: --menu;}.menu{  position-anchor: --menu;  inset-area: bottom span-right;}

这样就能轻易实现悬浮菜单了,你也可以访问以下在线链接(Chrome 125+)as628资讯网——每日最新资讯28at.com

  • CSS anchor menu (codepen.io)[4]

在codepen上找到了一个更完善的多级菜单案例。as628资讯网——每日最新资讯28at.com

https://codepen.io/jh3y/pen/dyLjbwGas628资讯网——每日最新资讯28at.com

四、总结和其他

介绍了这么多,一下子肯定难以接受,多回顾几遍就明白了,至少可以知道锚点定位是干嘛的,如果以后有类似的需求也有一定的方向,下面总结一下本文要点as628资讯网——每日最新资讯28at.com

  • CSS 锚点定位是一个颠覆性的新特性,一定要学会
  • CSS 锚点定位可以设置任意元素相对任意元素做定位
  • 主要是通过anchor-name和position-anchor两个属性关联
  • 锚点的位置用anchor()来定义,比如anchor(left)表示锚定元素的最左侧,anchor(top)表示锚定元素的最上侧
  • anchor-center可以实现居中定位,水平居中justify-self: anchor-center,垂直居中align-self: anchor-center
  • inset-area是一种更人性化的定位方式,和常见的组件库表示方位比较类似
  • 还可以通过 anchor-size来锚点元素的尺寸,anchor-size(width)表示宽度,anchor-size(height)表示高度
  • position-try-options可以根据定位元素是否处于屏幕边缘而自适应定位方向
  • 实际中更推荐和popover相互配合,可以轻松实现各类悬浮层效果
  • 兼容性要求 Chrome 125+,期待早日使用吧

最近几年CSS更新的确实有点太快了,很多以往的疑难杂症都有了新的解决方式。但是很多时候学这些好像暂时没啥用,毕竟可能 5 年以后才用得上。但是原生特性不像其他,一个框架两三年就有可能被淘汰,或者有新的替代品出现,原生的学到了就学到了,只要web存在的一天,就永远都不会过时,所以也不亏是吧。as628资讯网——每日最新资讯28at.com

[1]CSS anchor (codepen.io): https://codepen.io/xboxyan/pen/dyEVVPb。as628资讯网——每日最新资讯28at.com

[2]CSS anchor nav (codepen.io): https://codepen.io/xboxyan/pen/zYQpvqg。as628资讯网——每日最新资讯28at.com

[3]CSS anchor position-try-options (codepen.io): https://codepen.io/xboxyan/pen/dyEJYRO。as628资讯网——每日最新资讯28at.com

[4]CSS anchor menu (codepen.io): https://codepen.io/xboxyan/pen/qBGpOKq。as628资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-101375-0.htmlCSS锚点定位终于来了!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: ES13 中最具变革性的五个 JavaScript 功能

下一篇: 软件版本号为什么那么奇怪?你知道吗?

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 首发天玑9200+ iQOO Neo8系列发布首销售价2299元起

    2023年5月23日晚,iQOO Neo8系列正式发布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro强悍登场,限时售价3099元起;价位段最强性能手机iQOO Neo8同期上市
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top