精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

原子化的未來?了解一下全面進化的CSS attr函數

開發 前端
CSS attr函數相信大家都用過了吧,通常會配合偽元素content動態生成內容,比如一個簡易的tooltip。

CSS attr函數相信大家都用過了吧,通常會配合偽元素content動態生成內容,比如一個簡易的tooltip。

<span class="css-tips" data-title="我是tooltip" >提示上</span>

通過attr動態生成

.css-tips[data-title]:after {
  content: attr(data-title);
  /*...*/
}

效果如下:

image-20250516200454818image-20250516200454818

你可以訪問這個鏈接查看完整demo: https://codepen.io/xboxyan/pen/MLJjWQ

不過,之前僅僅支持字符串形式,對于數字、顏色等都無法識別,例如

<div w="10"></div>
<style>
  div{
    width: attr(w) /**不生效/
  }
</style>

現在,CSS attr迎來了全面進化(chrome 133+),很多問題都得到了很好的解決,一起看看吧~

一、快速上手

比如這樣一個結構,是不是看著有些眼熟?

<div w="100" h="100"></div>
<style>
  div{
    background: royalblue;
  }
</style>

那么,如何讓屬性上的尺寸傳遞應用到實際的寬高上呢?你可以這樣

[w]{
  width: attr(w px)
}
[h]{
  height: attr(h px)
}

來看看效果:

image-20250516170508419image-20250516170508419

我們可以用之前的規則,將尺寸通過content顯示出來

div:before{
  content: attr(w) '*' attr(h);
  color: white;
  font-size: 14px;
}

效果如下:

image-20250516170636866image-20250516170636866

更為關鍵的是,這些完全是自動獲取的,你可以設置多個任意尺寸

<div w="100" h="100"></div>
<div w="200" h="100"></div>
<div w="300" h="100"></div>

效果如下:

image-20250516170814615image-20250516170814615

是不是非常靈活?

二、語法詳解

現在來看看語法規則

attr(<attr-name> <attr-type>? , <fallback-value>?)

其實相比之前的規則,多了兩個可選參數,一個是attr-type,表示屬性類型,完整類型可以參考

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units/CSS_data_types

還有一個是allback-value,表示回退值,一些寫法如下

/* Basic usage */
attr(data-count)
attr(href)

/* With type */
attr(data-width px)
attr(data-size rem)
attr(data-name raw-string)
attr(id type(<custom-ident>))
attr(data-count type(<number>))
attr(data-size type(<length> | <percentage>))

/* With fallback */
attr(data-count type(<number>), 0)
attr(data-width px, inherit)
attr(data-something, "default")

前面的例子其實帶類型的值,除了使用px,還可以使用任何已有的CSS單位,比如

<div w="100" h="100" rotate="45"></div>

這里定義了一個旋轉角度,可以直接加上角度單位deg

[rotate]{
  rotate: attr(rotate deg)
}

效果如下:

image-20250516172610893image-20250516172610893

但是,有些值其實是不帶單位的,比如顏色,并沒有什么后綴單位,比如

<div w="100" h="100" rotate="45" bg="red"></div>

這時,可以采用type來手動指定

[bg]{
  background: attr(bg type(<color>));
}

效果如下:

image-20250516181308281image-20250516181308281

有些屬性可能不止一種類型,比如background,支持顏色,也支持漸變,還支持圖像,這里其實也能定義多種類型

[bg]{
  background: attr(bg type(<color>|<image>));
}

我們換成漸變試試:

<div w="100" h="100" rotate="45" bg="linear-gradient(orange,red)"></div>

也能完美適配

image-20250516182249509image-20250516182249509

多個值寫起來可能比較麻煩,可以用「通配符」來代替,相當于傳入什么,讀取的就是什么

[bg]{
  background: attr(bg type(*));
}

最后就是回退值,非常類CSS變量,當屬性不存在時(注意不能是空),采用回退值,比如

div{
  background: attr(bg type(*), royalblue);
}

現在去除bg屬性

<div w="100" h="100" rotate="45"></div>

就回到了默認的寶藍色

image-20250516183003948image-20250516183003948

你也可以訪問在線demo真實體驗: https://codepen.io/xboxyan/pen/dPPremp

三、帶數字顯示的進度條

下面來看一個案例:

image-20250516185648485image-20250516185648485

在過去,如果想用單個標簽、單一變量來實現,通常會用到CSS變量,就像這樣

<div class="progress" style="--value:30"></div>
<div class="progress" style="--value:42.5"></div>
<div class="progress" style="--value:50"></div>
<div class="progress" style="--value:90"></div>

進度很好辦,直接用這個變量計算就好了,那后面的數字怎么辦呢?直接使用變量是不行的

::before{
  content: var(--value) /*不生效*/
}

其實可以用計數器來實現,類似于這樣

.progress::before {
   --value: 50;
    counter-reset: progress var(--value);
    content: counter(value);
}

有興趣可以查看張老師的這篇文章: 小tips: 如何借助content屬性顯示CSS var變量值[1]

不過計數器在正常場景下不支持小數,導致有些場景受限

如果需要展示小數可以參考這篇文章: 如何讓CSS計數器支持小數的動態變化?[2]

現在有了attr,可以直接用屬性來實現,實現更方便

<div class="progress" value="30"></div>
<div class="progress" value="42.5"></div>
<div class="progress" value="50"></div>
<div class="progress" value="90"></div>

直接通過漸變繪制進度attr(value %)

.progress {
  color: royalblue;
  width: 300px;
  height: 20px;
  background: linear-gradient(currentColor, currentColor) 0 0 / attr(value %) 100% no-repeat #ccc;
  border-radius: 2px;
  position: relative;
}
.progress::after {
  content: attr(value);
  position: absolute;
  top: 50%;
  left: 100%;
  transform: translate(10px, -50%);
  font-size: 20px;
}

你也可以訪問在線demo真實體驗:https://codepen.io/xboxyan/pen/JoozZry

四、原子化的未來?

回頭再來看看這種寫法,是不是非常類似現在流行的原子化CSS?

<div w="100" h="100"></div>
<div w="200" h="100"></div>
<div w="300" h="100"></div>

嗯...等到兼容性沒有問題后,現在的原子化框架都得革新了 ,只需要極少部分原子CSS即可適配大量的樣式,而不是這樣生成大量用到的樣式

image-20250516195921515image-20250516195921515

用attr可能就兩行,類似這樣

[fs]{
  font-size: attr(fs type(<length>))
}
p{
  padding: attr(p type(*))
}

是不是可以節省大量CSS代碼?

五、優勢和局限

其實很多特性和CSS變量還是比較相似,不過相比而言還是有不少優勢的

  1. 支持content內容生成
  2. html結構更直觀,個人覺得CSS變量放在style上有些冗余
  3. 天然原子化,比現在框架生成要高效的多

然后有一個局限性,那就是不支持鏈接格式,比如

<div src="xxx.png"></div>

如果直接這樣使用,是不會生效的

div{
  background: url(attr(src)); /*無效*/
}

只能用這種形式,其實和現在CSS變量差不多了

<div src="url(xxx.png)"></div>

官方說明是為了安全考慮,不能用于動態構造 URL

??太可惜了,一直想用這個功能能實現自定義 img 標簽,將圖片轉成背景圖片,這樣就能做更多事情了

<img src="xxx.png">
<style>
  img{
    background: url(attr(src));
  }
</style>


責任編輯:武曉燕 來源: 前端偵探
相關推薦

2023-12-11 13:09:00

CSSlinear緩沖函數

2023-04-24 09:23:31

CSS動畫合成

2023-04-23 09:01:43

CSS動畫合成

2018-12-05 20:58:53

2020-02-10 14:26:10

GitHub代碼倉庫

2020-08-06 14:03:48

戴爾

2020-03-01 17:53:38

Excel大數據微軟

2025-10-29 08:00:00

2020-12-10 08:44:35

WebSocket輪詢Comet

2018-04-25 06:46:52

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2023-03-02 08:00:55

包管理工具pnpm 包

2019-03-11 14:33:21

Redis內存模型數據庫

2022-10-11 23:26:54

css3attr函數

2021-05-12 10:59:39

Kubernetes容器集群

2022-02-24 17:37:47

低代碼拖拽前端

2018-03-21 09:08:06

超融合架構本質

2022-03-10 07:39:33

.NET部署模式

2019-02-20 14:16:43

2024-04-11 12:19:01

Rust數據類型
點贊
收藏

51CTO技術棧公眾號

欧美18视频| 久久人体大胆视频| 国产综合av在线| 国产三级电影在线| 国产伦精品一区二区三区免费迷 | 国产精品亚洲视频在线观看| 男女性高潮免费网站| 秋霞蜜臀av久久电影网免费| 欧美日韩一区二区在线观看视频| 国产卡一卡二在线| 亚洲色图狠狠干| 经典三级在线一区| 欧美综合一区第一页| 五月天av网站| 欧美禁忌电影网| 日韩一区二区三| 国产成人久久777777| 天堂av中文在线| 国产欧美日韩在线观看| 99热最新在线| 在线视频1卡二卡三卡| 亚洲承认在线| 久久久国产精品免费| 狠狠人妻久久久久久综合蜜桃| 91精品亚洲一区在线观看| 欧美午夜精品久久久久久人妖| 在线视频一二三区| 午夜视频在线| 久久久精品国产免大香伊| av一本久道久久波多野结衣| 亚洲视频在线观看免费视频| 亚洲欧美久久久| 久久久久久久久久久人体| 极品美妇后花庭翘臀娇吟小说| 少妇精品导航| 亚洲高清久久网| 深夜视频在线观看| 久久伊人影院| 欧美精品乱人伦久久久久久| 美女网站免费观看视频| 亚洲一级少妇| 精品久久久久久久久久ntr影视| av影院在线播放| 成人免费观看视频大全| 亚洲视频小说图片| 在线亚洲美日韩| av在线电影播放| 亚洲国产成人一区二区三区| 午夜精品福利一区二区| 国产精品毛片一区二区三区四区| 久久奇米777| 香蕉久久a毛片| 欧美日韩激情一区二区三区| 国产成人无码av在线播放dvd| 日本在线影院| 色屁屁一区二区| 精品国产成人av在线免| 韩漫成人漫画| 色网综合在线观看| 视色视频在线观看| 欧美一级在线| 欧美一区二区在线看| 亚洲女人在线观看| 超碰成人免费| 精品无人区乱码1区2区3区在线| 亚洲午夜久久久久久久久红桃| 亚洲成a人片77777在线播放| 日韩精品在线视频| 亚洲а∨天堂久久精品2021| 波多野结衣的一区二区三区| 日韩一区二区三区国产| 538精品在线观看| 伊人影院久久| 日av在线播放中文不卡| 18国产免费视频| 国产一区二区久久| 黄色99视频| 成年人在线观看网站| 亚洲丝袜精品丝袜在线| 免费看欧美一级片| 亚洲美女久久精品| 欧美精品久久99久久在免费线 | 精品一区二区三区av| 91啪国产在线| 性xxxfllreexxx少妇| 国产欧美日韩另类一区| 午夜啪啪免费视频| 成年人视频免费在线播放| 欧美日韩人人澡狠狠躁视频| 日本熟妇人妻中出| 97久久综合精品久久久综合| 亚洲欧美在线x视频| 三上悠亚在线观看视频| 99在线精品免费视频九九视| 国产精品久久久久999| 国产高清免费av| 26uuu欧美| 日日噜噜夜夜狠狠久久丁香五月| 激情黄产视频在线免费观看| 日本韩国欧美在线| 69久久精品无码一区二区| 久久精品凹凸全集| 久久躁狠狠躁夜夜爽| 91精品国产乱码在线观看| 久久超级碰视频| 精品国产一区二区三区四区vr| 超碰国产在线| 精品久久久久久久久中文字幕| 欧美一级xxxx| 岳的好大精品一区二区三区| 欧美夫妻性生活xx| 中文字幕av影视| eeuss影院一区二区三区| 一区不卡字幕| 欧美中文字幕精在线不卡| 日韩欧美国产不卡| 亚洲国产精品一区二区久久hs| 91久久在线| 51国产成人精品午夜福中文下载 | 91麻豆国产在线| 91小视频在线免费看| 亚洲啊啊啊啊啊| 日本午夜免费一区二区| 亚洲少妇中文在线| 91美女免费看| 成人免费高清视频在线观看| 99久久久无码国产精品性色戒| 日本免费久久| 亚洲精品第一国产综合精品| 久草网视频在线观看| 久久国产人妖系列| 日韩三级电影网站| 日韩中文在线播放| 亚洲人成电影网站| 亚洲成人第一网站| 91小视频在线免费看| 给我免费播放片在线观看| 日韩亚洲精品在线观看| 日韩视频免费在线观看| 一级黄色小视频| 亚洲国产高清在线| 91极品视频在线观看| 欧美精选一区二区三区| 日韩av日韩在线观看| 精品乱码一区二区三四区视频 | 蜜桃精品在线| 日韩av综合网站| 日韩av一二三区| fc2成人免费人成在线观看播放| av网站手机在线观看| 99精品国产一区二区三区2021| 欧美伦理91i| 亚洲精品国产精品乱码不卡| 有码一区二区三区| 男生和女生一起差差差视频| 欧美91福利在线观看| 91手机在线观看| 国产盗摄精品一区二区酒店| 欧美精品一区二区高清在线观看| 日本一二三区不卡| 91蜜桃在线免费视频| 成人免费观看毛片| 日本女优一区| 91精品国产自产在线老师啪 | 怡红院亚洲色图| 97视频精品| 亚洲永久免费观看| 日韩av毛片| 日韩高清a**址| 精品一区二三区| 亚洲欧美综合在线精品| 成年人性生活视频| 日韩一级在线| 日韩午夜视频在线观看| **精品中文字幕一区二区三区| 蜜臀久久99精品久久久久久宅男 | www.久久久久爱免| 欧美精品福利视频| 九色视频在线播放| 666欧美在线视频| 日本污视频在线观看| 久久精品一区二区三区四区| 欧美一级xxxx| 日韩视频不卡| 五月天亚洲综合情| aiai久久| 国产精品一区二区久久久| 欧美xxxbbb| 亚洲午夜精品久久久久久性色| 国产精品怡红院| 福利视频一区二区| 中文字幕在线观看二区| 北条麻妃一区二区三区| 久久久久国产一区| 在线精品观看| 亚洲三级一区| 女仆av观看一区| 成人有码视频在线播放| 天堂在线中文网官网| www.亚洲免费视频| 免费在线高清av| 欧美tk—视频vk| 一区二区不卡视频在线观看| 天天综合网 天天综合色| 波多野结衣家庭教师在线观看| 成人不卡免费av| av免费一区二区| 天堂一区二区在线| 国产无限制自拍| 欧美激情第8页| 亚洲精品国产精品国自产观看| 都市激情亚洲欧美| 91久久综合亚洲鲁鲁五月天| 日韩久久一区二区三区| 久久久噜噜噜久久中文字免| 麻豆网在线观看| 伊人久久大香线蕉av一区二区| 日韩在线观看视频一区二区三区| 91精品国产综合久久久久| 免费精品一区二区| 精品免费在线观看| 精品一区二区三区人妻| 中文字幕制服丝袜成人av| 少妇毛片一区二区三区| av中文字幕一区| 欧美图片自拍偷拍| 狠狠色丁香婷婷综合| 国产高潮免费视频| 视频一区视频二区中文字幕| 国产深夜男女无套内射| 狠狠噜噜久久| 久久在线中文字幕| 综合一区av| 福利网在线观看| 亚洲成人最新网站| 午夜在线视频免费观看| 久久综合电影| 亚洲三区在线观看| 日韩一区欧美| 最新精品视频| 亚洲视频电影在线| 91制片厂免费观看| 91精品国产91久久综合| 欧美日韩成人在线观看| 师生出轨h灌满了1v1| 国产欧美一区二区三区国产幕精品| 欧美美女黄色网| 欧美+亚洲+精品+三区| 国产日产欧美一区二区| 欧美二区视频| 亚洲一区二区三区av无码| 国产中文一区| 国产自产在线视频| 亚洲深夜影院| 欧美三级午夜理伦三级| 日韩精品三区四区| 久久久精品麻豆| 久久福利资源站| 红桃视频一区二区三区免费| 国产精品夜夜嗨| 日本50路肥熟bbw| 成人国产在线观看| 久久久久国产精品区片区无码| 久久综合九色综合欧美98| 懂色av粉嫩av蜜乳av| 国产视频一区在线观看| 青青青视频在线播放| 亚洲免费av观看| 欧美精品成人久久| 欧美日韩在线第一页| 国产又粗又猛又黄视频| 欧美猛男男办公室激情| www.av黄色| 日韩精品999| 色欧美激情视频在线| 欧美大片网站在线观看| 三级在线看中文字幕完整版| 国产福利成人在线| 国产精品亚洲四区在线观看| 国产精品久久精品国产| blacked蜜桃精品一区| 9l视频自拍9l视频自拍| 亚洲人成免费| 久久久久国产一区| 成人av免费在线| 国产精品综合激情| 亚洲自拍另类综合| 波多野结衣在线电影| 欧美一区二区三区爱爱| 亚洲av成人精品毛片| 色伦专区97中文字幕| 3344国产永久在线观看视频| 国产精品美女www爽爽爽视频| 亚洲国产欧美在线观看| 欧美日韩综合另类| 欧美日韩综合| 一区二区三区入口| 成人亚洲一区二区一| 亚洲精品成人av久久| 亚洲成人av一区二区| 在线免费av网| 亚洲免费中文字幕| 美女尤物在线视频| 国产有码在线一区二区视频| 欧美黄色录像| 无码毛片aaa在线| 日本欧美久久久久免费播放网| 日本一级大毛片a一| 国产精品视频免费| 中文字幕在线观看视频网站| 日韩欧美久久一区| av在线二区| 国产成人+综合亚洲+天堂| 成人黄色av网址| 日本黄色播放器| 日韩av在线免费观看不卡| 手机免费看av片| 亚洲精品中文字幕在线观看| 欧美一区二区三区久久久| 亚洲国产一区二区三区在线观看 | 美女网站色免费| 久久久亚洲精品石原莉奈| 激情综合网五月婷婷| 欧美一区二区三区四区高清| 在线免费看a| 国产精品久久久久久久美男| 香蕉人人精品| 欧美成人免费在线观看视频| 国产福利一区二区三区| 可以免费看av的网址| 在线观看免费一区| 免费在线看v| 人人做人人澡人人爽欧美| 欧美成人午夜77777| 国产免费裸体视频| 久久99久国产精品黄毛片色诱| 亚洲色图欧美色| 欧美三级视频在线播放| 福利视频在线导航| 国产成人精品免费久久久久| 亚洲欧美tv| 欧美日韩亚洲一| 26uuu另类欧美亚洲曰本| 日韩av大片在线观看| 亚洲级视频在线观看免费1级| 91禁在线看| 乱一区二区三区在线播放| aa亚洲婷婷| 真实乱视频国产免费观看 | 久久久久亚洲精品国产| 日韩中文字幕在线一区| 300部国产真实乱| 国产aⅴ精品一区二区三区色成熟| 超碰手机在线观看| 精品国产三级电影在线观看| 高清毛片在线观看| 蜜桃91精品入口| 久久只有精品| 91麻豆精品久久毛片一级| 欧美区在线观看| 久草免费资源站| 欧美久久综合网| 网站一区二区三区| 综合久久国产九一剧情麻豆| 99国产精品久久久久久久成人 | 成人性生交大片免费看网站| 国产一区在线免费| 久久久久久久高潮| 日本黄区免费视频观看| 日韩免费在线观看| 交100部在线观看| 午夜精品视频在线观看一区二区 | 岛国av免费观看| 欧美日韩在线第一页| 91网在线播放| 91情侣在线视频| 日韩中文字幕1| 男女性高潮免费网站| 亚洲国产天堂网精品网站| 美女色狠狠久久| 黄色一级大片免费| 久久久一区二区三区| 999精品国产| 久久久亚洲影院| 国内精品视频在线观看| 亚洲欧美一区二区三区不卡| 精品久久久久久久久国产字幕| 天堂а√在线官网| 久久精品欧美| 国产在线国偷精品免费看| 97人人澡人人爽人人模亚洲| 中文字幕日韩欧美在线| 久久婷婷国产| 天堂av在线8| 欧美性感美女h网站在线观看免费| 日本在线观看免费| 久久久久久久久久码影片| 国产一区二区三区免费| 黄色污污网站在线观看| 欧美高清电影在线看|