日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

CSS錨點(diǎn)定位終于來(lái)了!

來(lái)源: 責(zé)編: 時(shí)間:2024-07-17 16:52:30 595觀看
導(dǎo)讀盼了好久,最近 Chrome 125終于迎來(lái)了CSS 錨點(diǎn)定位的正式支持。這是一個(gè)和 CSS 滾動(dòng)驅(qū)動(dòng)動(dòng)畫一樣,足以顛覆整個(gè) Web 開發(fā)領(lǐng)域的新特性。有了這個(gè)特性,很多以前強(qiáng)依賴 JS 的方式,都可以純 CSS解決,并且實(shí)現(xiàn)起來(lái)更加簡(jiǎn)單、更

sMU28資訊網(wǎng)——每日最新資訊28at.com

盼了好久,最近 Chrome 125終于迎來(lái)了CSS 錨點(diǎn)定位的正式支持。這是一個(gè)和 CSS 滾動(dòng)驅(qū)動(dòng)動(dòng)畫一樣,足以顛覆整個(gè) Web 開發(fā)領(lǐng)域的新特性。有了這個(gè)特性,很多以前強(qiáng)依賴 JS 的方式,都可以純 CSS解決,并且實(shí)現(xiàn)起來(lái)更加簡(jiǎn)單、更加靈活,一起看看吧!sMU28資訊網(wǎng)——每日最新資訊28at.com

sMU28資訊網(wǎng)——每日最新資訊28at.com

可以看到,在切換tab時(shí),底下的背景是可以無(wú)縫過(guò)渡的。在以前,我們要實(shí)現(xiàn)這樣的功能,必須要借助 JS來(lái)獲取當(dāng)前點(diǎn)擊元素的尺寸和位置,但現(xiàn)在,只需要借助 CSS 錨點(diǎn)定位就能輕松實(shí)現(xiàn)了。sMU28資訊網(wǎng)——每日最新資訊28at.com

位置信息前面以及提到了,用anchor(left)和anchor(top)就可以了,那尺寸呢,需要用到anchor-size。sMU28資訊網(wǎng)——每日最新資訊28at.com

anchor-size(width) /*錨點(diǎn)元素寬度*/anchor-size(height)  /*錨點(diǎn)元素高度*/

利用這個(gè)特性,我們可以很輕松的實(shí)現(xiàn)這樣一個(gè)效果,結(jié)構(gòu)如下:sMU28資訊網(wǎng)——每日最新資訊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>

我們用偽元素來(lái)當(dāng)做tab高亮背景,關(guān)鍵實(shí)現(xiàn)如下:sMU28資訊網(wǎng)——每日最新資訊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;}

這樣就能輕松實(shí)現(xiàn)這個(gè)效果了,你也可以訪問(wèn)以下在線鏈接(Chrome 125+)sMU28資訊網(wǎng)——每日最新資訊28at.com

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


sMU28資訊網(wǎng)——每日最新資訊28at.com

6. 動(dòng)態(tài)調(diào)整位置 position-try-options

有時(shí)候定位元素會(huì)處于屏幕邊緣,當(dāng)沒(méi)有足夠空間顯示時(shí),可以通過(guò)position-try-options來(lái)設(shè)置一個(gè)備用位置。sMU28資訊網(wǎng)——每日最新資訊28at.com

舉個(gè)例子,比如一個(gè)氣泡,默認(rèn)是朝上的,當(dāng)滾動(dòng)到屏幕邊緣時(shí)會(huì)自動(dòng)朝下,示意如下:sMU28資訊網(wǎng)——每日最新資訊28at.com

sMU28資訊網(wǎng)——每日最新資訊28at.com

這種情況就可以用@position-try來(lái)實(shí)現(xiàn)了,具體做法是這樣的。sMU28資訊網(wǎng)——每日最新資訊28at.com

先通過(guò)position-try-options指定一個(gè)變量名,比如--bottom。sMU28資訊網(wǎng)——每日最新資訊28at.com

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

然后通過(guò)@position-try來(lái)定義規(guī)則。sMU28資訊網(wǎng)——每日最新資訊28at.com

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

這樣就實(shí)現(xiàn)定位元素位置自動(dòng)調(diào)整了。sMU28資訊網(wǎng)——每日最新資訊28at.com

除此之外,還有一種便捷寫法,直接給position-try-options指定以下關(guān)鍵字。sMU28資訊網(wǎng)——每日最新資訊28at.com

position-try-options: flip-block; /*垂直翻轉(zhuǎn)*/position-try-options: flip-inline; /*水平翻轉(zhuǎn)*/

這樣就無(wú)需@position-try定義了,實(shí)現(xiàn)更簡(jiǎn)單。sMU28資訊網(wǎng)——每日最新資訊28at.com

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

當(dāng)然,我覺(jué)得這個(gè)功能還是稍顯不足的,比如當(dāng)氣泡帶有箭頭時(shí),雖然也能翻轉(zhuǎn),但是卻無(wú)法改變箭頭的位置,也就是無(wú)法查詢到當(dāng)前是否已經(jīng)翻轉(zhuǎn)了,就像這樣。sMU28資訊網(wǎng)——每日最新資訊28at.com

sMU28資訊網(wǎng)——每日最新資訊28at.com

首先是點(diǎn)擊出現(xiàn),這個(gè)就是popover的功能了,通過(guò)popovertarget和popover屬性,將兩者結(jié)合起來(lái),就能輕松實(shí)現(xiàn)點(diǎn)擊出現(xiàn)菜單的功能。sMU28資訊網(wǎng)——每日最新資訊28at.com

<button class="btn" popovertarget="more"></button><div class="menu" id="more" popover>  <button class="item">編輯</button>  <button class="item">刪除</button></div>

然后就定位,利用CSS錨點(diǎn)定位,將菜單定位到按鈕的右下方,也就兩三行代碼的事。sMU28資訊網(wǎng)——每日最新資訊28at.com

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

這樣就能輕易實(shí)現(xiàn)懸浮菜單了,你也可以訪問(wèn)以下在線鏈接(Chrome 125+)sMU28資訊網(wǎng)——每日最新資訊28at.com

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

在codepen上找到了一個(gè)更完善的多級(jí)菜單案例。sMU28資訊網(wǎng)——每日最新資訊28at.com

https://codepen.io/jh3y/pen/dyLjbwGsMU28資訊網(wǎng)——每日最新資訊28at.com

四、總結(jié)和其他

介紹了這么多,一下子肯定難以接受,多回顧幾遍就明白了,至少可以知道錨點(diǎn)定位是干嘛的,如果以后有類似的需求也有一定的方向,下面總結(jié)一下本文要點(diǎn)sMU28資訊網(wǎng)——每日最新資訊28at.com

  • CSS 錨點(diǎn)定位是一個(gè)顛覆性的新特性,一定要學(xué)會(huì)
  • CSS 錨點(diǎn)定位可以設(shè)置任意元素相對(duì)任意元素做定位
  • 主要是通過(guò)anchor-name和position-anchor兩個(gè)屬性關(guān)聯(lián)
  • 錨點(diǎn)的位置用anchor()來(lái)定義,比如anchor(left)表示錨定元素的最左側(cè),anchor(top)表示錨定元素的最上側(cè)
  • anchor-center可以實(shí)現(xiàn)居中定位,水平居中justify-self: anchor-center,垂直居中align-self: anchor-center
  • inset-area是一種更人性化的定位方式,和常見的組件庫(kù)表示方位比較類似
  • 還可以通過(guò) anchor-size來(lái)錨點(diǎn)元素的尺寸,anchor-size(width)表示寬度,anchor-size(height)表示高度
  • position-try-options可以根據(jù)定位元素是否處于屏幕邊緣而自適應(yīng)定位方向
  • 實(shí)際中更推薦和popover相互配合,可以輕松實(shí)現(xiàn)各類懸浮層效果
  • 兼容性要求 Chrome 125+,期待早日使用吧

最近幾年CSS更新的確實(shí)有點(diǎn)太快了,很多以往的疑難雜癥都有了新的解決方式。但是很多時(shí)候?qū)W這些好像暫時(shí)沒(méi)啥用,畢竟可能 5 年以后才用得上。但是原生特性不像其他,一個(gè)框架兩三年就有可能被淘汰,或者有新的替代品出現(xiàn),原生的學(xué)到了就學(xué)到了,只要web存在的一天,就永遠(yuǎn)都不會(huì)過(guò)時(shí),所以也不虧是吧。sMU28資訊網(wǎng)——每日最新資訊28at.com

[1]CSS anchor (codepen.io): https://codepen.io/xboxyan/pen/dyEVVPb。sMU28資訊網(wǎng)——每日最新資訊28at.com

[2]CSS anchor nav (codepen.io): https://codepen.io/xboxyan/pen/zYQpvqg。sMU28資訊網(wǎng)——每日最新資訊28at.com

[3]CSS anchor position-try-options (codepen.io): https://codepen.io/xboxyan/pen/dyEJYRO。sMU28資訊網(wǎng)——每日最新資訊28at.com

[4]CSS anchor menu (codepen.io): https://codepen.io/xboxyan/pen/qBGpOKq。sMU28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-101375-0.htmlCSS錨點(diǎn)定位終于來(lái)了!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: ES13 中最具變革性的五個(gè) JavaScript 功能

下一篇: 軟件版本號(hào)為什么那么奇怪?你知道嗎?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 鞍山市| 三台县| 靖州| 鄂州市| 鄂托克前旗| 乌鲁木齐县| 永川市| 永胜县| 黎平县| 始兴县| 时尚| 马山县| 修水县| 哈巴河县| 吉木乃县| 武乡县| 蒙城县| 泌阳县| 襄樊市| 泸州市| 隆子县| 乐业县| 清镇市| 渝北区| 营山县| 胶南市| 新乐市| 城市| 金阳县| 即墨市| 富锦市| 塔城市| 黎平县| 璧山县| 原平市| 新田县| 肇源县| 黔南| 峨眉山市| 肥乡县| 崇明县|