精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文一区一区三区高中清不卡免费 | 久久久久久久久久影院| 欧美激情极品| 欧洲视频一区二区| 女女百合国产免费网站| 日韩中文字幕免费观看| 午夜一区不卡| 久久亚洲春色中文字幕| 黄色录像a级片| 成人精品一区二区三区电影| 一区二区三区免费网站| 欧美精品在线一区| aaa一区二区| 久久三级福利| 欧美国产日本在线| 成人一级片免费看| 日韩大胆成人| 日韩欧美国产电影| 少妇激情一区二区三区| 久久青青色综合| 国产精品入口麻豆原神| 精品久久精品久久| 99国产精品久久久久久久成人| 国产欧美不卡| 欧美黄色片视频| 美女av免费看| 天堂俺去俺来也www久久婷婷| 欧美一三区三区四区免费在线看| aa在线免费观看| 日韩免费影院| 亚洲欧洲日产国产综合网| 精品中文字幕一区| 亚洲av色香蕉一区二区三区| 美女一区二区视频| 26uuu另类亚洲欧美日本一| 波多野结衣不卡视频| 国产一区二区精品福利地址| 精品99999| 日批视频在线看| 日韩黄色三级| 欧美亚洲国产一区二区三区| 日韩精品视频一区二区在线观看| 草美女在线观看| 一个色妞综合视频在线观看| 亚洲午夜精品久久久中文影院av | 91在线免费视频观看| 亚洲最大的av网站| 97人妻精品一区二区三区软件| 久久黄色影院| 情事1991在线| www.伊人久久| 男人的天堂亚洲| 668精品在线视频| 精品午夜福利在线观看| 亚洲免费二区| 美女av一区二区三区| 日韩三级在线观看视频| 国产精品国内免费一区二区三区| 一区二区三区视频观看| 国产精品久久久久久成人| 欧美视频免费| 最近中文字幕mv在线一区二区三区四区 | 男人天堂网站在线| 成年人黄视频在线观看| 亚洲精品免费电影| 精品日韩在线播放| а√天堂在线官网| 亚洲欧美日韩国产成人精品影院| 日韩第一页在线观看| 成人欧美在线| 亚洲午夜av在线| 少妇人妻无码专区视频| 九色porny丨国产首页在线| 欧美日韩视频在线| 日韩免费高清在线| 欧美黄页在线免费观看| 欧美一区二区三区四区五区| 不卡的一区二区| 好吊妞国产欧美日韩免费观看网站| 精品国产伦一区二区三区观看方式 | 蜜桃视频成人在线观看| 香蕉久久aⅴ一区二区三区| 亚洲一区二区三区美女| 波多野结衣50连登视频| 欧美不卡高清一区二区三区| 欧美精品在欧美一区二区少妇| 捷克做爰xxxⅹ性视频| 成人免费在线电影网| 亚洲男人av在线| 国产精品久久久久久成人| 午夜日韩av| 欧美在线观看网址综合| 一级aaaa毛片| 成人av在线网| 亚洲国产日韩美| 影音先锋中文在线视频| 日韩欧美一区二区三区| 国产一区二区在线观看免费视频| 99精品中文字幕在线不卡| 亚洲精品自拍偷拍| 欧美一区二区三区观看| 亚洲一级影院| 国产精品夜间视频香蕉| 日本精品一区二区在线观看| 欧美国产1区2区| www成人免费| julia一区二区三区中文字幕| 日韩一区二区在线观看| 亚洲天堂视频一区| 国产一区二区三区四区三区四| 欧美最近摘花xxxx摘花| 国产成人a人亚洲精品无码| 久久综合狠狠综合久久综合88| 在线播放 亚洲| 成人免费看黄| 日韩免费一区二区三区在线播放| 亚洲AV无码国产成人久久| 国产精品s色| 国产一区二区丝袜| 你懂的在线播放| 亚洲国产精品人人做人人爽| 亚洲av无日韩毛片久久| 国产精品一国产精品| 97久久超碰福利国产精品…| 国产日本精品视频| 中文文精品字幕一区二区| 国产青青在线视频| 亚洲天堂av资源在线观看| 中文字幕欧美日韩| 天天爱天天做天天爽| 99国产精品视频免费观看| 亚洲自拍偷拍一区二区三区| 91成人抖音| 亚洲色在线视频| 亚洲不卡视频在线观看| 99久久精品国产网站| 国产一区二区三区小说| 涩涩屋成人免费视频软件| 久久精品国产综合| 中文字幕理论片| 国产视频在线观看一区二区三区 | 久草中文在线视频| 国内外成人在线| 一区二区不卡在线视频 午夜欧美不卡'| 澳门成人av网| 亚洲精品视频在线观看视频| 国产午夜福利精品| 成人午夜视频网站| 福利视频免费在线观看| 亚洲经典视频| 久久久久久成人精品| 精品国产乱码一区二区三 | 国产亚洲日本欧美韩国| 成人免费毛片视频| 国产性色一区二区| 久久久久久香蕉| 不卡视频在线| 国产欧美在线视频| 久久国产精品一区| 欧美一区二区在线看| 欧美日韩在线视频免费播放| 国产不卡视频一区| 欧美乱大交xxxxx潮喷l头像| 国产精品调教视频| 77777少妇光屁股久久一区| 五月天婷婷视频| 色悠悠久久综合| 成人黄色免费网址| 久久99国产精品久久| 中文字幕欧美人与畜| 亚洲2区在线| 韩剧1988在线观看免费完整版| 偷拍自拍在线| 日本高清视频一区二区| 你懂得视频在线观看| 激情丁香综合五月| 野外做受又硬又粗又大视频√| 国产一区二区在线视频你懂的| 97av视频在线| 啊v在线视频| 欧美一区二区视频观看视频| 国产手机在线视频| 中文字幕成人av| 少妇性l交大片7724com| 一区二区三区四区五区精品视频 | 91成人在线免费观看| 国产麻豆a毛片| 国产不卡视频在线播放| 亚洲人成无码www久久久| 99久久精品国产亚洲精品 | 国产成人精品一区二区三区| 日本免费视频在线观看| 亚洲第一二三四五区| 瑟瑟视频在线免费观看| 一区二区在线免费观看| 亚洲精品理论片| 国产综合成人久久大片91| 成人午夜视频在线观看免费| 精品国产精品| 99re6在线| 日本一道高清亚洲日美韩| 九九久久国产精品| 久久久pmvav| 91精品国产一区二区| 国产香蕉视频在线| 亚洲欧洲性图库| 性欧美13一14内谢| 国产二区国产一区在线观看| 天堂中文视频在线| 亚洲高清久久| 一本久道久久综合| 西野翔中文久久精品字幕| 成人国产在线视频| 免费欧美电影| 国外成人在线视频| 超碰在线无需免费| 中文字幕亚洲欧美在线| 国产精品久久综合青草亚洲AV| 色综合久久66| 国产手机在线视频| 亚洲精品中文字幕乱码三区 | 日韩三级视频| 99国产超薄肉色丝袜交足的后果| 91精品国产66| 欧美一级淫片丝袜脚交| 黑人玩欧美人三根一起进 | 2021天堂中文幕一二区在线观| 日韩性生活视频| 欧美成熟毛茸茸| 亚洲精品97久久| 亚洲乱码精品久久久久..| 欧美嫩在线观看| 老熟妇一区二区三区啪啪| 欧美丝袜一区二区| 九九热国产视频| 亚洲精品videosex极品| 最新日韩免费视频| 国产精品网曝门| 日本少妇xxxxx| 91老司机福利 在线| 女同性恋一区二区三区| 成人午夜电影网站| 国产香蕉精品视频| 国产99久久久国产精品免费看| www.五月天色| 国产综合色视频| 欧美美女性视频| 日韩电影在线免费看| 日韩在线第三页| 久久性天堂网| 特级丰满少妇一级| 三级亚洲高清视频| 99草草国产熟女视频在线| 久久久久久9| 国产真人无码作爱视频免费| 久久综合影视| 五月婷婷深爱五月| 久久99精品久久久久| 色18美女社区| 处破女av一区二区| 中文字幕av观看| 国产午夜亚洲精品午夜鲁丝片| 免费一级特黄3大片视频| 国产精品卡一卡二卡三| 伊人在线视频观看| 亚洲综合色婷婷| 91在线看视频| 91福利视频网站| 一级黄色a视频| 日韩欧美中文一区二区| 免费激情视频网站| 亚洲精品一区二区三区婷婷月| 国产天堂素人系列在线视频| 中文字幕在线精品| av电影高清在线观看| 欧美激情xxxxx| 成人欧美一区二区三区的电影| 国产国语videosex另类| 高清在线一区二区| 粉嫩高清一区二区三区精品视频 | 国产电影精品久久禁18| 插我舔内射18免费视频| 国产亚洲欧美激情| 182在线观看视频| 亚洲大尺度视频在线观看| 成年人视频免费| 欧美一区二区三级| 天堂成人在线观看| 一区二区三区国产视频| 亚洲性图自拍| 国产97在线视频| 日韩一级淫片| 欧美日韩在线精品| 性欧美69xoxoxoxo| www精品久久| 美女mm1313爽爽久久久蜜臀| 五月天丁香社区| 日本一区二区三区四区| 精品少妇一二三区| 在线看日本不卡| 国模无码一区二区三区| 中文字幕在线亚洲| 丁香花高清在线观看完整版| 国产精品网站大全| 免费成人三级| 欧美少妇一区二区三区| 丝袜美腿亚洲色图| 催眠调教后宫乱淫校园| 国产精品国产馆在线真实露脸 | 人妻视频一区二区| 亚洲国产成人av好男人在线观看| 伊人精品一区二区三区| 亚洲福利影片在线| 超碰在线观看免费| 国产精品久久久久久av下载红粉| 99精品在免费线中文字幕网站一区 | 五月婷婷综合久久| 大胆欧美人体视频| 日本在线视频一区二区| 久久精品magnetxturnbtih| 伊人色**天天综合婷婷| 激情五月婷婷久久| 99视频超级精品| 真实国产乱子伦对白在线| 欧美日韩大陆在线| 国产福利在线视频| 欧美综合第一页| 婷婷成人综合| 国产美女网站在线观看| 国产99精品在线观看| 日韩福利小视频| 欧美电影一区二区三区| 北岛玲一区二区三区| 国产精品成人av在线| 亚洲品质自拍| 成人在线免费观看av| 成人av综合在线| 国产无遮挡又黄又爽| 欧美tk丨vk视频| 制服丝袜在线播放| 91久久国产精品| 99re66热这里只有精品8| 色婷婷狠狠18| 国产精品久久影院| 一卡二卡三卡在线观看| 色777狠狠综合秋免鲁丝| 蜜桃成人精品| 深夜福利成人| 奇米精品一区二区三区四区| 免费成人深夜天涯网站| 欧洲一区二区av| av在线资源网| 成人免费网站在线看| 亚洲午夜精品一区 二区 三区| 潘金莲激情呻吟欲求不满视频| 最新日韩在线视频| 国产日韩一级片| 欧美激情久久久久| 玖玖玖免费嫩草在线影院一区| 极品美女扒开粉嫩小泬| 久久影院午夜片一区| 波多野结衣高清在线| 最好看的2019的中文字幕视频| 国产成人精选| 韩国黄色一级大片| 丁香天五香天堂综合| 国产精品人人人人| 亚洲亚裔videos黑人hd| 色婷婷成人网| av在线免费观看国产| jlzzjlzz亚洲日本少妇| 国产主播第一页| 久久激情视频免费观看| 日韩欧洲国产| 国产精品后入内射日本在线观看| 国产亚洲精品超碰| 国产在成人精品线拍偷自揄拍| 久久久久久久999| 天天操综合520| 成人日韩在线视频| 亚洲免费色视频| 日韩欧美在线观看一区二区| 国产精品免费福利| 午夜精品电影| 蜜桃精品一区二区| 制服丝袜国产精品| 日本蜜桃在线观看视频| 中文字幕一区二区三区乱码| 成人在线视频一区二区| 中文字幕高清在线免费播放| 日韩一区二区三区在线播放| 超碰在线成人| www.涩涩涩| 亚洲大尺度视频在线观看| a黄色在线观看| 精品久久精品久久| 狠狠色综合播放一区二区| 久久久午夜影院| 久久的精品视频| 国产精品欧美在线观看|