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

CSS魔法!如何將任意CSS類型轉換為數值?

開發 前端
如何通過 CSS 獲取當前字號呢?根據上一節的原理,只要通過Tan() 和Atan2()就可以將任意長度轉換為數值了。

在 CSS 中有各式各樣的類型值,例如 1rem、10vw、100cqw等等,這些相對值給與了 CSS 強大的適應能力。但有時候,我們還需要知道這些相對值所對應的真實值,也就是px值,比如在移動端,我們經常會設置這樣的根字號:

:root{
  font-size: max(12px, min( 12px + (100vw - 320px) / 55 * 4, 20px ));
}
p{
  font-size: 2rem;
}

那么,p此時的真實px值應該是多少呢?

在以往,我們只能通過 JS去獲取,但是現在,僅僅憑 CSS也能做到,一起了解一下吧!

一、CSS 三角函數

從理論上來講,將一個長度除以1px就應該得到具體的數值,相當于將這個長度以1px被分成了多少份。

2rem / 1px

但是,大家可能都知道,calc在進行除法運算時,除數是不能帶單位的。

calc(2rem / 1px) /*不合法*/

不排除瀏覽器以后會支持。

不過現在終于迎來了轉機,在 Chrome 111中,CSS 新增了一系列三角函數。

  • sin()[1]:正弦
  • cos()[2]:余弦
  • tan()[3]:正切
  • asin()[4]:反正弦
  • acos()[5]:反余弦
  • atan()[6]:反正切
  • atan2()[7]:反正切

這里我們不聊三角函數的作用,只是作為一個橋梁中轉一下。

關于「正切函數」,這里簡單回顧一下高中數學

在「直角三角形」中,其中一個銳角的「對邊」和「臨邊」的比值就是這個角的「正切值」,「反正切」就是通過兩條直角邊反向去求出該角的「弧度值」,示意如下:

這些函數本身沒什么特別的,業界通用,但有一個非常例外,那就是atan2,它和atan作用是一樣的,都是反正切函數。唯一的區別是,atan2支持兩個值

前端中的 atan 就是數學中的 arctan。

atan2(y, x)

例如:

transform: rotate(atan2(3, 2));
/*等同于*/
transform: rotate(atan(1.5));

看似好像沒啥意義,直接用tan不就好了?

transform: rotate(atan2(3/2));

和JS不同的是,CSS 中還能「支持單位」,如下:

transform: rotate(atan2(1rem, 20px));
/*等同于?*/

這就不得了了,如果此時的1rem是16px,那么瀏覽器會根據1rem的真實長度和20px做對比,相當于讓兩個帶單位的長度做除法運算。

/*等同于*/
transform: rotate(atan(.8)); /* 16px / 20px */

也就是說,y/x的值可以得到兩個CSS長度之間的真實比值,而無需額外轉換。

然后,通過正切函數tan將括號里面的值解析出來。

tan(atan2(1rem, 20px)) /*.8*/

這一點其實在 JS 中也可以驗證一下,只是 CSS 可以帶單位的值。

如果將后面的值設置為1px,就相當于把任意長度按照1px進行切分,也就得到了任意長度的px數值,如下:

tan(atan2(1rem, 1px)) /*16*/

有了這個不帶單位的絕對值,我們就可以做很多事情了,下面舉幾個例子。

二、CSS 獲取當前字號

回到文章開頭的問題,如何通過 CSS 獲取當前字號呢?

根據上一節的原理,只要通過tan() 和 atan2()就可以將任意長度轉換為數值了。

:root{
  font-size: max(12px, min( 12px + (100vw - 320px) / 55 * 4, 20px ));
}
body{
  --px-font: tan(atan2(1rem, 1px));
}

這樣--px-font就得到了真實的px數值。

然后,我們還可以借助 CSS計數器,將這個數字渲染到頁面。

body::after{
  counter-reset: font var(--px-font);
  content: "當前根字號:" counter(font);
}

結果...效果如下:

好像不太對?貌似是瀏覽器的 bug,這種情況下忽略了tan(atan2(1rem, 1px))中的1rem單位。

要修復這個問題其實很容易,需要通過@property定義一個CSS變量,類型為長度,然后將需要計算的值賦給這個變量,如下:

@property --font {
  syntax: "<length>";
  initial-value: 1px;
  inherits: false;
}
:root{
  font-size: max(12px, min( 12px + (100vw - 320px) / 55 * 4, 20px ));
}
body::after{
  --font: 1rem; /*定義好的CSS變量*/
  --px-font: tan(atan2(var(--font), 1px));
  counter-reset: font var(--px-font);
  content: "當前根字號:" counter(font);
}

這樣就正常了,在改變屏幕尺寸時會自動渲染出當前字號。

你也可以訪問在線鏈接

  • CSS font-size (juejin.cn)[8]
  • CSS font-size (codepen.io)[9]

三、實時顯示容器尺寸

CSS容器查詢中出現了幾個新的尺寸單位。這里只介紹下面兩種。

關于容器查詢,可以參考這篇文章:介紹2022最期待且已正式支持的CSS container容器查詢 ? 張鑫旭-鑫空間-鑫生活 (zhangxinxu.com),本文并不涉及具體容器查詢語句。

  • 「cqw」 容器查詢寬度(Container Query Width)占比。「1cqw等于容器寬度的1%」。假設容器寬度是1000px,則此時1cqw對應的計算值就是10px。
  • 「cqh」 容器查詢高度(Container Query Height)占比。「1cqh等于容器高度的1%」。

利用前面的技巧,可以將cqw、cqh這些單位轉換為具體的px值。

假設有這樣一個容器。

.box{
  display: grid;
  place-content: center;
  width: 200px;
  height: 200px;
  background-color: #fff;
}

為了使容器尺寸生效,必須聲明容器類型。

.box{
  /**/
  container-type: size;
}

然后用同樣的技巧,在偽元素中通過計數器將寬高渲染出來。

.box::before{
  --w: 100cqw;
  --h: 100cqh;
  --px-width: tan(atan2(var(--w), 1px));
  --px-height: tan(atan2(var(--h), 1px));
  counter-reset: w var(--px-width) h var(--px-height);
  content: counter(w) " x " counter(h);
}

別忘了修復 bug。

@property --w {
  syntax: "<length>";
  initial-value: 100px;
  inherits: false;
}
@property --h {
  syntax: "<length>";
  initial-value: 100px;
  inherits: false;
}

效果如下,完全沒有任何 JS。

你也可以訪問在線鏈接

  • CSS resize (juejin.cn)[10]
  • CSS resize (codepen.io)[11]

四、自適應文本的頭像

下面看一個自適應文本的頭像,當文本較多時,會自動縮放,讓文本可以完整展示,如下

原理其實是通過容器尺寸的映射關系來動態設置文本大小,關鍵實現如下:

.avator-container span {
  font-size: calc( 24px - 10cqw );
}

但是,通過文字大小來縮放有一個限制,在PC上,一般會有最小字號限制(通常是12號),所以更好的方式應該是通過scale來實現。

現在,我們可以通過上面的技巧,將容器尺寸轉換成scale能夠識別的數值,通過文本寬度和容器尺寸的比值來確實縮放比例,關鍵實現如下:

.avator-container span {
  --w: 100cqw;
  --scale: tan(atan2(30px, var(--w)));
  transform: scale(var(--scale));
}

這樣就得到了完全自適應尺寸的文本頭像了。

完整代碼可以訪問在線鏈接

  • CSS auto text avator (juejin.cn)[12]
  • CSS avator auto scale (codepen.io)[13]

五、總結一下

以上就是本文的全部內容了,介紹了一個非常巧妙并且有用的 CSS 小技巧,下面總結一下

  • CSS 有很多類型的尺寸,這些尺寸給與了 CSS 強大的適應能力。
  • 從理論上講,將一個長度除以 1px 就可以得到具體的數值,但是calc不支持。
  • CSS 反正切函數 atan2(y,x) 支持兩個參數,并且還支持帶CSS單位。
  • 通過 tan(atan2(y,x))可以得到y/x的比值,如果x是1px,可以得到y的實際px值。
  • 利用這個技巧,可以將任意類型值轉換為數值。
  • 純數值可以在各個地方都可以使用了,比如scale(var(--n)),如果需要 px,直接calc(var(--n) * 1px )。

參考資料:

[1]sin(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/sin。

[2]cos(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/cos。

[3]tan(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/tan。

[4]asin(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/asin。

[5]acos(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/acos。

[6]atan(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/atan。

[7]atan2(): https://developer.mozilla.org/zh-CN/docs/Web/CSS/atan2。

[8]CSS font-size (juejin.cn): https://code.juejin.cn/pen/7289041195483791416。

[9]CSS font-size (codepen.io): https://codepen.io/xboxyan/pen/XWoObZX。

[10]CSS resize (juejin.cn): https://code.juejin.cn/pen/7289046442864279591。

[11]CSS resize (codepen.io): https://codepen.io/xboxyan/pen/MWZLYZz。

[12]CSS auto text avator (juejin.cn): https://code.juejin.cn/pen/7289095309752270906。

[13]CSS avator auto scale (codepen.io): https://codepen.io/xboxyan/pen/qBLLexW。

責任編輯:姜華 來源: 前端偵探
相關推薦

2009-07-15 16:56:59

Jython類型Java類型

2025-08-25 09:15:12

2009-06-05 11:16:58

字符串動態轉換

2024-02-19 15:38:08

JsonPython字符串

2020-12-17 08:08:15

CentOS

2017-05-25 15:14:36

2010-08-27 09:11:20

XHTMLCSS

2024-05-30 08:40:41

大型語言模型LLM人工智能

2009-07-31 14:09:41

c#時間格式轉換

2021-12-29 16:40:54

Python語言字符串

2016-10-19 15:15:26

2020-04-06 20:30:37

JavaScriptBoolean開發

2011-04-08 10:16:13

文本文件ACCESS數據庫

2025-08-14 09:10:01

JavaScript前端開發

2009-11-25 16:55:45

PHP函數explod

2024-01-04 09:17:03

前端開發CSV 格式JSON 字符串

2010-09-13 09:47:25

XHTML/CSS

2022-05-11 17:21:05

Btrfs文件系統Fedora

2018-09-10 15:14:27

前端WebURL

2021-10-29 15:13:21

LinuxPDF文件
點贊
收藏

51CTO技術棧公眾號

亚洲人成绝费网站色www| 精品国产成人在线| 99re资源| 日韩 欧美 中文| 精品国产91| 在线91免费看| 国产无套内射久久久国产| 欧美三级黄网| 91在线视频播放| 91亚洲人电影| 久久久精品毛片| 欧美日本一区| 亚洲社区在线观看| 国产成人精品一区二区三区在线观看 | 日本视频中文字幕一区二区三区| 日韩中文字幕精品视频| 污污污www精品国产网站| 久久青草免费| 欧美日韩亚洲一区二区| 久久视频免费在线| 国产三区四区在线观看| 成人动漫av在线| 91久热免费在线视频| www.国产com| 激情综合自拍| 久久精品2019中文字幕| 免费看污片网站| 一区二区免费| 欧美精品18+| 国产v亚洲v天堂无码久久久| 黄色影院在线看| 亚洲色图清纯唯美| 日韩一区二区三区高清| 亚洲精品国产手机| 国精产品一区一区三区mba视频 | 99视频精品免费视频| 成人在线视频福利| 国产成人精品一区二区色戒| 免费视频一区二区三区在线观看| 欧美精品激情在线观看| 免费中文字幕在线观看| 欧美福利网址| 久热99视频在线观看| 婷婷综合在线视频| 国产九一精品| 在线观看国产精品91| 30一40一50老女人毛片| 欧美人妖视频| 亚洲国产成人精品电影| 国产ts在线观看| 一区二区三区四区高清视频 | 国产视频第一区| 久久久久久9999| 麻豆av福利av久久av| 色婷婷av一区二区三区之e本道| 国产成人一级电影| 国产精品10p综合二区| 精品国产区一区二| 国产91精品精华液一区二区三区| 91久久精品www人人做人人爽| 国产精品系列视频| 国产精品亚洲一区二区三区妖精 | 亚洲宅男网av| 国产香蕉97碰碰久久人人| 中文字幕av久久爽一区| 日本久久综合| 久久综合国产精品台湾中文娱乐网| 免费成人美女女在线观看| 婷婷另类小说| 欧美激情精品久久久久久蜜臀| 精品在线视频免费观看| 一本色道久久综合一区| 国产成人高清激情视频在线观看 | 国产精品中文字幕日韩精品| 99高清视频有精品视频| 亚洲色图欧美视频| 国产日韩高清在线| 爱爱爱视频网站| 日本一本在线免费福利| 五月天欧美精品| 国产xxxxx视频| 91成人福利社区| 精品国产一区二区三区忘忧草| 91精品国产自产| 久久在线视频免费观看| 欧美日韩ab片| 伊人久久久久久久久久久久| 久久99国产精品免费| 国产精品青青草| 国产精品一区二区婷婷| 亚洲综合免费观看高清完整版在线| 精品免费日韩av| 黄网站色视频免费观看| 色偷偷色偷偷色偷偷在线视频| 欧洲亚洲国产日韩| 中国男女全黄大片| 国产欧美日韩免费观看| 欧美成人激情图片网| av中文在线播放| 国内精品写真在线观看| 免费精品视频一区| av大大超碰在线| 91黄色免费观看| 四虎永久免费观看| 成人写真视频| 91精品国产乱码久久久久久久久 | 爱啪视频在线观看视频免费| 欧美视频你懂的| 国产情侣久久久久aⅴ免费| 奇米777国产一区国产二区| www.久久色.com| 青青草免费观看视频| 国产精品一区在线观看你懂的| 欧美日韩一区二区三区在线观看免| 国产成人在线视频免费观看| 色94色欧美sute亚洲线路二| 逼特逼视频在线观看| 欧美国产一级| 国产成人精品午夜| 日本精品久久久久| 亚洲视频资源在线| 亚洲成人av免费看| 日韩手机在线| 久久青草精品视频免费观看| 国产原创中文av| 久久久国产综合精品女国产盗摄| 免费无码毛片一区二三区| 国产日韩在线观看视频| 色香阁99久久精品久久久| 毛片毛片女人毛片毛片| 成人18视频日本| av动漫在线播放| 成年永久一区二区三区免费视频| 国产午夜精品全部视频在线播放 | 国产精品亚洲欧美| 国产精品区一区二区三含羞草| 超碰个人在线| 91精品国产高清一区二区三区蜜臀| 中文天堂资源在线| 免费亚洲电影在线| 色姑娘综合av| www.com污| 精品99re| 色综合色综合久久综合频道88| 国产欧美第一页| 亚洲婷婷在线视频| 色婷婷激情视频| 午夜国产一区二区| 91久久久久久久久久久久久| 麻豆tv免费在线观看| 欧美人狂配大交3d怪物一区| 国产一区二区三区四区五区六区 | 欧美午夜aaaaaa免费视频| 同性恋视频一区| 日本道色综合久久影院| 欧美女子与性| 欧洲亚洲国产日韩| 久久一级免费视频| 国产一区二区三区黄视频 | 亚洲精品在线电影| 男女视频免费看| 久久久久久9999| 亚洲精品综合在线观看| 亚洲天天综合| 国产精品视频一区二区三区经| 亚洲影院在线播放| 杨幂一区二区三区免费看视频| 欧美高清激情视频| 囯产精品一品二区三区| 婷婷夜色潮精品综合在线| 日韩人妻一区二区三区| 美女久久久精品| www.99riav| 日韩欧美四区| 国产精品香蕉在线观看| 精品美女在线观看视频在线观看 | 精品资源在线看| 欧美日韩中文精品| 私库av在线播放| 91免费观看视频| 国产野外作爱视频播放| 91精品99| 精品一卡二卡三卡四卡日本乱码 | 久久免费手机视频| 国产精品99久久久久久有的能看| 五月丁香综合缴情六月小说| 欧美美女在线观看| 亚洲综合中文字幕在线| 欧美aaaaa性bbbbb小妇| 日韩有码在线电影| 日韩中文字幕免费在线观看| 欧亚一区二区三区| 久久久精品99| 国产欧美视频一区二区三区| 亚洲成人激情小说| 久久亚洲国产精品一区二区| 国产麻豆电影在线观看| 外国成人在线视频| 亚洲xxxxx性| 亚洲高清黄色| 韩国日本不卡在线| 成人看av片| 亚洲网址你懂得| 日韩中文字幕综合| 欧美一区二区人人喊爽| 久久国产视频一区| 亚洲午夜精品一区二区三区他趣| 欧美性猛交xxxx乱大交少妇| 99精品视频在线观看免费| 99re6在线观看| 日韩黄色片在线观看| 18黄暴禁片在线观看| 久久国产综合| 免费成人av网站| 中文字幕久久精品一区二区| 国产精品永久免费观看| 成人av观看| 韩国19禁主播vip福利视频| 网友自拍视频在线| 亚洲欧美日韩直播| 少妇人妻一区二区| 日韩精品中文字幕一区二区三区 | 久久久久国产精品夜夜夜夜夜| 国产午夜一区二区三区| 怡红院一区二区| 国产精品一区二区久激情瑜伽| 老头吃奶性行交视频| 亚洲少妇自拍| 秋霞无码一区二区| 欧美视频二区| 日本老太婆做爰视频| 91中文字幕精品永久在线| 日韩国产高清一区| 日韩啪啪网站| 久久青青草原| 欧洲亚洲成人| 久久精品国产综合精品| 久久丝袜视频| 久久99精品久久久久久青青日本| 综合激情久久| 国产高清一区视频| 永久免费精品视频| 成人动漫视频在线观看完整版 | 欧美哺乳videos| 国产超碰人人模人人爽人人添| 91 com成人网| 99国产精品久久久久99打野战| 欧美久久久一区| 国产视频在线免费观看| 91精品国产高清一区二区三区| 99热精品在线播放| 欧美va亚洲va| 天天色综合久久| 亚洲欧美变态国产另类| 黄色大片在线看| 中文字幕日韩精品有码视频| 男人和女人做事情在线视频网站免费观看 | 好吊一区二区三区| 亚洲精品无码国产| 亚洲影音先锋| 嫩草影院国产精品| 精品一区二区三区日韩| 中文字幕第六页| 99久久国产综合精品麻豆| 国产三级国产精品| 亚洲国产激情av| 男女全黄做爰文章| 一区二区视频在线看| 亚州国产精品视频| 色欧美片视频在线观看在线视频| 久久久久精彩视频| 欧美一区二区三区白人| 天天操天天射天天舔| 亚洲天堂网站在线观看视频| 韩国av网站在线| 久久久久久久久亚洲| 精品91久久| 亚洲a在线观看| 亚洲第一论坛sis| 亚洲综合欧美日韩| 亚洲国内欧美| 亚洲成人福利在线观看| 国产一区二区三区观看| 右手影院亚洲欧美| 日韩一区欧美小说| 国产精品第二十页| 欧美性极品少妇| 亚洲第一成年人网站| 亚洲精品一区中文| 91网址在线观看| 国产不卡av在线免费观看| 国产精品毛片无码| 欧美日韩另类丝袜其他| 亚洲精品国产偷自在线观看| 欧洲黄色一级视频| 国内不卡的二区三区中文字幕 | 久久久久久久久久久9不雅视频| 日本男女交配视频| 久久午夜电影| 黄色激情在线观看| 国产精品乱码一区二区三区软件 | 欧美三级中文字幕| 免费观看黄色av| 精品精品国产国产自在线| 精品国产第一福利网站| 国产成人亚洲欧美| 国产精品88久久久久久| 免费高清在线观看免费| 国产精品18久久久久| 麻豆视频免费在线播放| 欧美日韩国产一区在线| 成人av免费播放| 最近中文字幕2019免费| av日韩亚洲| 国产精品视频500部| 国产精品久久久久久影院8一贰佰| 狠狠爱免费视频| 成人性视频网站| 免费在线黄色网| 欧美日韩情趣电影| 国产中文在线| 奇米四色中文综合久久| 久久超级碰碰| 成年人视频网站免费| 激情综合色播五月| 国产又黄又粗的视频| 一本到高清视频免费精品| 午夜性色福利视频| 久久久亚洲精选| xvideos.蜜桃一区二区| 欧美aaa在线观看| 精品一区二区免费在线观看| 久操视频在线观看免费| 日本二三区不卡| 免费a级毛片在线观看| 97视频在线观看播放| 成人三级av在线| 久久手机在线视频| 成人在线一区二区三区| 国产无套在线观看| 亚洲精品一线二线三线| 激情图片在线观看高清国产| 99久久精品免费看国产一区二区三区| 性欧美欧美巨大69| 国产九九九视频| 一区二区三区精品在线观看| 99国产揄拍国产精品| 欧美成人在线免费| 香蕉大人久久国产成人av| 嫩草影院中文字幕| 成人福利视频网站| 日韩毛片在线视频| 精品无人区太爽高潮在线播放| 手机在线观看av| 日韩高清专区| 韩国精品久久久| 欧美人妻精品一区二区三区 | 无码国产69精品久久久久网站| 亚洲一区二区欧美| 午夜影院在线视频| 国产福利精品av综合导导航| 不卡日本视频| 日韩欧美理论片| 亚洲一区免费在线观看| 亚洲欧美丝袜中文综合| 国产精品99久久久久久人 | 少妇性饥渴无码a区免费| 久久久久久久久久久久久夜| 中文字幕欧美人妻精品| 美日韩精品视频免费看| 东京久久高清| 欧美亚洲高清一区二区三区不卡| 亚洲三级黄色片| 国产精品永久在线| 欧美三区视频| 手机免费看av| 91精品国产91久久综合桃花| sm捆绑调教国产免费网站在线观看 | 国产精品网站导航| 国产福利免费视频| 2019中文在线观看| 中文字幕欧美人妻精品一区蜜臀| 亚洲第一国产精品| 欧美国产日韩电影| 欧美一级爱爱视频| 91香蕉国产在线观看软件| 中文字幕日本视频| 欧美激情综合色| 精品视频黄色| 天天躁日日躁狠狠躁av| 色屁屁一区二区| 黄色在线看片| 一区二区成人国产精品| av午夜一区麻豆| 国产一区二区三区成人| 97av在线播放| 中文字幕免费一区二区| 亚洲性猛交xxxx乱大交| 精品剧情v国产在线观看在线| 成人做爰免费视频免费看|