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

CSS 實現自適應文本的頭像

開發 前端
cqw 容器查詢寬度(Container Query Width)占比。1cqw等于容器寬度的1%。假設容器寬度是1000px,則此時1cqw對應的計算值就是10px。

Ant-design 中有一個這樣的頭像組件,當字符串較長時,字體大小可以根據頭像寬度自動調整,效果如下:

圖片

當然,這里是通過JS根據字符數量自動縮放文本實現的。

圖片

而現在,僅僅通過 CSS也能達到類似的效果,如下:

圖片

一起看看吧!

一、CSS 容器尺寸單位

實現這個效果需要借助容器尺寸單位。這些單位是跟隨CSS容器查詢[1]一起出現的,有以下幾種。

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

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

cqh  容器查詢高度(Container Query Height)占比。1cqh等于容器高度的1%。

cqi  表示容器查詢內聯方向尺寸(Container Query Inline-Size)占比。這個是邏輯屬性單位,默認情況下等同于cqw

cqb  容器查詢塊級方向尺寸(Container Query Block-Size)占比。同上,默認情況下等同于cqh。。

cqmin  容器查詢較小尺寸的(Container Query Min)占比。取 cqw和cqh中較小的一個。

cqmax  表示容器查詢較大尺寸的(Container Query Min)占比。取 cqw和cqh中較大的一個。

有了這些尺寸單位,可以很輕易的實現文字大小隨著容器尺寸的變化而變化,下面舉個例子:

<div class="con">
<p class="text">大家好,歡迎關注前端偵探</p>
</div>

在不聲明容器類型的情況下,cqw等同于vw,也就是相當于把整個頁面當成容器,這里希望將這個div作為參考對象,需要提前聲明container-type,如下:

.con {
container-type: inline-size;
}
.text{
font-size: 10cqw;
}

效果如下:

圖片

這樣就很輕易的實現了文本縮放效果。

原理很簡單,怎么應用呢?

二、自適應文本頭像

再回過頭來看看實際案例,如何讓字體大小根據頭像寬度自適應呢?也就是文字越多,字號越小。

有一個比較簡單的思路就是,文字越多,占據的寬度越多,然后根據前面的原理,讓文字大小隨著寬度的變化而變化,只不過這里是成反比,寬度越寬,字號越小。

假設HTML是這樣的。

<div class="avator">
<span>偵探</span>
</div>

簡單修飾一下:

.avator{
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border-radius: 8px;
background: bisque;
color: rgb(250, 84, 28);
white-space: nowrap;
}

效果如下:

圖片

現在問題來了,目前外層寬度是固定的,好像沒辦法根據文字占據寬度就行容器查詢,怎么辦呢?

我的思路是這樣的,創建一份一模一樣的文本,讓外層容器(A)寬度由內部文本決定,然后將容器盒子(B)的寬度設置成和(A)一樣,這樣不就完成了容器查詢嗎?

根據這個思路,可以將HTML改造成這樣:

<div class="avator">
<div class="avator-inner" alt="偵探"><!--外層容器A-->
<div class="avator-container"><!--容器盒子B-->
<span>偵探</span>
</div>
</div>
</div>

外層容器 A 的文本可以通過偽元素生成:

.avator-inner::before{
content: attr(alt);
font-size: 40px;
}

這時外層容器 A ,也就是.avator-inner的尺寸完全由偽元素::before撐開,如下:

圖片

然后,將容器盒子B,也就是.avator-container設置成和外層容器 A 一樣,可以采用絕對定位的方式。

.avator-container {
position: absolute;
inset: 0;
container-type: inline-size;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}

這樣,容器盒子就可以跟隨偽元素所占大小自動變化了,然后給內部文字設置一個合適的大小,由于是成反比,所以可以采取相減的方式,如下:

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

效果如下:

圖片

再換一下文本,比如4個字的;

圖片

可以看到,文本越多,內部文字大小越小,正好是我們需要的效果。

下面把偽元素生成的文本隱藏起來,就可以得到文章開頭的效果了,如下:

圖片

需要注意的是,由于是font-size實現,需要在瀏覽器解除最小字號限制。

下面是完整代碼:

.avator{
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border-radius: 8px;
background: bisque;
color: rgb(250, 84, 28);
white-space: nowrap;
}
.avator-inner{
position: relative;
}
.avator-inner::before{
content: attr(alt);
visibility: hidden;
font-size: 40px;
}
.avator-container {
position: absolute;
inset: 0;
container-type: inline-size;
text-align: center;
display: flex;
justify-content: center;
align-items: center;
}
.avator-container span {
font-size: calc( 24px - 10cqw );
overflow: hidden;
max-width: 40px;
text-overflow: ellipsis;
}

你也可以訪問線上 demo:CSS avator (codepen.io)[3] 或者 CSS avator (runjs.work)[4]。

三、容器查詢的一些局限性

雖然前面實現這樣的效果,但是還不是很優雅,主要是由于容器查詢有諸多的限制。

1. 首先,容器查詢只對容器的子元素有效,對本身無效,這樣導致結構有些冗余。

在上面的例子中,div容器中還包含了一個p元素,文字大小是設置在p元素上,看似有些多余,能不能直接設置在div上呢?這樣就可以省一層標簽了。答案是不可以!下面是直接設置在div上的效果。

圖片

可以看到,文字大小依賴于頁面視圖寬度了。所以,如果直接設置在div上,那么此時cqw參考的容器就不再是本身了,而是繼續向上查找,直到最外層,也就是說cqw查找的對象是最近的父級容器元素,并不包含自身,這個需要多多注意。

2. 再者,容器查詢盒子尺寸本身不能由內部元素所決定。

上面的例子中為啥要創建一份相同的文本呢,原因就是這個,比如在容器盒子本身不設置寬度的情況下,正常的inline-block元素寬度應該是有內部文本決定的,但是設置container-type之后就不行了,完全沒有寬度了,這也就是為啥前面要通過絕對定位的方式直接設置寬度了。

圖片

不過這個原因也容易理解:假設這個成立,如果子元素字號發生變化,導致容器寬度發生變化,容器寬度發生變化又會導致字號發生變化,這樣就死循環了,所以不允許這種情況。

3. 最后,容器查詢尺寸對應的具體的尺寸,是一種尺寸單位,這樣導致有很多屬性無法應用,比如scale。

在上面的例子中,文字大小是通過font-size改變的,其實最好的方式是scale,因為瀏覽器有最小字號的限制,而scale就沒這個限制了,但是cqw這種單位無法用在scale之上,略微遺憾,如果有一種百分比單位就好了。

圖片

當然,不嫌麻煩的可以用@container進行精準控制。

四、總結一下

以上就是本文全部內容了,主要是利用容器尺寸單位實現了一個自適應文本大小的效果,以及總結了一些容器查詢目前的一些局限性,下面總結一下:

容器尺寸單位是跟隨CSS容器查詢一起出現的新單位,有 cqw、cqh、cqi、cqb、cqmin、cqmax。

容器尺寸單位需要在聲明容器類型的盒子內才有效,不然會把整個頁面當成容器,等同于 vw、vh。

由于頭像寬度是固定的,無法直接根據文字寬度容器查詢,需要創建一份相同的文本來創建容器查詢條件。

頭像文字越多,字號越小,所以是成反比,可以采用相減的方式。

實現還不是很優雅,HTML結構比較多,主要是由于容器查詢有諸多的限制。

容器查詢只對容器的子元素有效,對本身無效,這樣導致結構有些冗余。

容器查詢盒子尺寸本身不能由內部元素所決定,會導致死循環。

容器查詢尺寸對應的具體的尺寸,不支持相對單位,比如百分比。

不過,盡管有諸多限制,容器查詢仍然是目前最具價值的新特性之一了,以前很多需要用到的奇技淫巧都可以用新的方式來實現了,這個后面再分享。


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

2023-10-23 08:48:04

CSS寬度標題

2025-08-18 09:18:46

2020-02-21 13:55:35

CSS分隔線前端

2025-05-13 00:00:05

2010-08-26 16:27:46

CSS高度

2014-04-15 13:09:08

Android配色colour

2013-09-04 11:02:52

手機web網頁設計

2017-06-06 10:30:12

前端Web寬度自適應

2010-08-26 10:56:16

CSStextarea

2015-04-24 10:05:15

HTML+CSS阿童木頭像

2022-03-21 15:29:35

CSSHarmonyOS鴻蒙

2022-05-05 18:32:18

瀏覽器圖片CSS

2025-01-21 08:00:00

自適應框架框架開發

2010-08-25 13:10:43

div高度CSS

2012-05-09 10:58:25

JavaMEJava

2014-09-05 10:10:32

Android自適應布局設計

2010-08-30 09:52:03

DIV高度自適應

2023-07-31 08:24:34

MySQL索引計數

2010-08-30 10:26:20

DIV自適應高度

2015-06-08 10:49:04

點贊
收藏

51CTO技術棧公眾號

国产96在线亚洲| 性一交一乱一透一a级| 一区二区在线免费播放| 午夜影院久久久| 黑人中文字幕一区二区三区| 久久久精品免费看| 久久一本综合| 精品人在线二区三区| 日韩精品一区二区三区久久| 国产裸舞福利在线视频合集| 免费在线成人网| 欧美黑人狂野猛交老妇| 9.1成人看片免费版| 99re久久| 亚洲国产一区在线观看| 欧美在线一区二区三区四区| 国产精品久久久久久久久久久久久久久久久久 | 三级小视频在线观看| 日韩和欧美一区二区| 欧美日韩成人在线观看| 亚洲性猛交xxxx乱大交| 日本一区二区三区视频在线看| 黑人巨大精品欧美一区二区免费| 中文字幕一区二区三区乱码| 外国精品视频在线观看 | jizzzz日本| 91破解版在线观看| 国产精品二区一区二区aⅴ污介绍| www.久久爱.cn| 国产精品高清无码| 亚洲狠狠婷婷| 久久精品99久久久香蕉| av小说在线观看| 8x国产一区二区三区精品推荐| 欧美在线视频你懂得| 蜜臀av色欲a片无码精品一区 | 亚洲免费视频二区| 国产日韩欧美三级| 欧美第一淫aaasss性| 欧美88888| 国产精品三级| 亚洲美女在线观看| 第四色在线视频| 伊人久久影院| 日韩一区二区三区四区五区六区 | 国产精品九九九九九九| 日韩综合在线| 伊人伊成久久人综合网小说| 女同毛片一区二区三区| 久久a级毛片毛片免费观看| 日韩一区二区三区av| 五月天中文字幕在线| 亚洲伦乱视频| 欧美日韩在线观看视频| 少妇人妻在线视频| 国产伦理精品| 欧美日韩国产综合新一区 | 欧美24videosex性欧美| 亚洲日本在线观看| 三年中国中文在线观看免费播放| 无遮挡动作视频在线观看免费入口| 久久久不卡网国产精品一区| 久久综合色一本| 天堂av电影在线观看| 91性感美女视频| 久久99精品久久久久久秒播放器| 十八禁一区二区三区| www.欧美色图| 免费在线国产精品| 国产一级免费在线观看| 久久精品一区二区三区不卡牛牛| 欧洲精品一区色| 高清av电影在线观看| 中文欧美字幕免费| 亚洲 欧洲 日韩| bt在线麻豆视频| 亚洲一区二区在线免费看| 国产日韩欧美精品在线观看| 成人影音在线| 色综合久久88色综合天天免费| 成人三级视频在线播放| 99只有精品| 欧美一区二区三区精品| 91精品啪在线观看国产| 丝袜美腿一区二区三区动态图| 亚洲精品视频在线播放 | 亚洲男人的天堂av| 国产曰肥老太婆无遮挡| 免费日韩电影| 在线播放视频一区| 丰满岳乱妇一区二区| 综合伊思人在钱三区| 伊人精品在线观看| 日本a级片视频| 在线亚洲欧美| 国产精品自产拍高潮在线观看| 国产又粗又猛又爽又黄的| 国产91丝袜在线18| 免费在线国产精品| 高h视频在线观看| 午夜精品久久一牛影视| 在线免费观看视频黄| 影音先锋欧美激情| 亚洲人成在线观| 男女羞羞免费视频| 久久蜜桃精品| 动漫3d精品一区二区三区| 久青草国产在线| 亚洲黄色小说网站| 免费在线观看的毛片| 欧美成年网站| 一区二区三区精品99久久| 麻豆changesxxx国产| 石原莉奈在线亚洲三区| 成人在线视频网址| melody高清在线观看| 亚洲大片精品永久免费| 在线不卡一区二区三区| 久久av电影| 久久久久久久久久国产| 97超碰人人模人人人爽人人爱| 91日韩在线专区| 青青在线免费视频| 粉嫩91精品久久久久久久99蜜桃| 亚洲第一区第二区| 99视频只有精品| 蜜桃一区二区三区在线| 蜜桃视频成人| 草莓视频丝瓜在线观看丝瓜18| 欧美日韩国产bt| 干b视频在线观看| 亚洲影音一区| 国产精品99久久久久久久| 日本电影全部在线观看网站视频 | 日本精品一区在线观看| 欧美高清hd| 久久韩剧网电视剧| 精品国产青草久久久久96| 26uuu欧美| 青青在线免费观看| 亚洲天堂av资源在线观看| www.欧美免费| 中文字幕日韩第一页| 久久婷婷久久一区二区三区| 国产精品无码人妻一区二区在线| 日本免费一区二区视频| 久久久999精品免费| 一卡二卡在线视频| 中文字幕在线免费不卡| www欧美激情| 成人羞羞在线观看网站| 国产成人亚洲综合青青| 久久经典视频| 在线观看欧美精品| 美国黄色特级片| 麻豆一区二区三区| 中文字幕日韩精品久久| 开心久久婷婷综合中文字幕| 深夜精品寂寞黄网站在线观看| 精品乱码一区内射人妻无码| 中文成人av在线| 孩娇小videos精品| 四季av一区二区三区免费观看 | 亚洲91网站| 欧美日韩成人在线播放| 黄片毛片在线看| 天天综合天天综合色| 亚洲AV无码国产精品| 麻豆久久婷婷| 亚洲精品国产精品国自产| 欧美成人黄色| 精品少妇一区二区30p| 黄色片一区二区三区| 福利二区91精品bt7086| 受虐m奴xxx在线观看| 美国一区二区三区在线播放 | 欧美手机在线视频| 污污的视频在线免费观看| 国产一区二区三区在线看麻豆| 99视频精品全部免费看| 精品国产18久久久久久洗澡| 欧美一级视频免费在线观看| 国产高清视频在线观看| 制服丝袜中文字幕一区| 国产无套粉嫩白浆内谢| 久久久美女艺术照精彩视频福利播放| 黑森林福利视频导航| 国产精品久久久久久影院8一贰佰| 亚洲精品免费av| 超碰91在线观看| 精品亚洲一区二区| 91麻豆一区二区| 亚洲国产欧美在线| 在线国产视频一区| 国产乱色国产精品免费视频| 全黄性性激高免费视频| 欧洲grand老妇人| 成人国产一区二区| 日韩欧美一区二区三区在线观看| 久久成人精品视频| 日本天堂影院在线视频| 91麻豆精品国产| 国产又粗又爽视频| 亚洲女爱视频在线| 国产激情在线免费观看| 国产一二精品视频| 久久精品99国产| 一区在线播放| 国产又爽又黄ai换脸| 精品三级av| 亚洲精品欧美极品| 99只有精品| **欧美日韩vr在线| h视频在线免费观看| 国产一区二区激情| 欧美一级一区二区三区| 欧美高清dvd| 精品国产一区二区三区四| 一区二区三区四区av| 国产一区二区三区视频播放| 91丨九色丨国产丨porny| 精品人妻一区二区三| 日韩黄色小视频| 99色精品视频| 亚洲一级电影| dy888午夜| 日韩激情在线| 日本一区免费观看| 久久人人爽人人爽人人片av不| 成人一区二区电影| 成人国产一区| 国产精品白嫩美女在线观看| 精精国产xxxx视频在线播放| 九九热在线精品视频| 免费黄网站在线播放| 一区二区三区高清国产| 搞黄视频在线观看| 亚洲欧美日韩国产中文| 深夜福利在线看| 日韩久久免费视频| 特黄aaaaaaaaa真人毛片| 日韩欧美国产系列| 精品欧美在线观看| 日韩午夜在线观看| 成人激情四射网| 日韩精品一区国产麻豆| 国产99久久九九精品无码免费| 欧美日韩亚洲综合在线 | 91精品国产手机| 亚洲最大成人av| 欧美精品电影在线播放| 一女二男一黄一片| 欧美一区在线视频| 国产a级免费视频| 日韩精品一区二区三区三区免费| 精品国精品国产自在久不卡| 日韩午夜激情av| 成人1区2区3区| 亚洲国产另类 国产精品国产免费| 后入内射欧美99二区视频| 亚洲激情 国产| 日本一级在线观看| 国产亚洲a∨片在线观看| 春暖花开成人亚洲区| 中文字幕日韩精品在线| 在线观看免费黄色| 久热精品视频在线观看| 伊人影院在线视频| 久久免费精品视频| 亚洲私拍视频| 国产精品三级网站| 国产亚洲字幕| 国产欧美日韩一区二区三区| 欧美人妖视频| 日韩欧美精品在线不卡| 欧美aaaa视频| 国产在线无码精品| 国产美女一区| 天天干天天玩天天操| 国产乱淫av一区二区三区| 催眠调教后宫乱淫校园| 久久一日本道色综合| 毛片aaaaaa| 一区二区三区在线播放| 中日韩黄色大片| 欧美午夜一区二区三区| 国产色综合视频| 亚洲精品久久久久久久久| 成人在线高清视频| 九九久久综合网站| 樱桃视频成人在线观看| 国产综合视频在线观看| 国产精品网址| 四虎影视永久免费在线观看一区二区三区| 99久久激情| 六月丁香激情网| 毛片一区二区三区| 国产人妻黑人一区二区三区| 中文字幕+乱码+中文字幕一区| 中文字幕影音先锋| 欧美丝袜第三区| 熟妇人妻系列aⅴ无码专区友真希| 中文字幕综合一区| 国产中文在线播放| 91亚洲va在线va天堂va国| 亚洲国产网址| 免费看日本黄色| 美女免费视频一区| 日本少妇色视频| 亚洲黄色av一区| 中文字幕欧美人妻精品一区蜜臀| 日韩av影视在线| www.久久ai| 国产日本欧美在线观看| 三级精品视频| 人妻av无码专区| 精品一二三四区| www.黄色在线| 精品欧美激情精品一区| 99国产精品99| 中文字幕视频在线免费欧美日韩综合在线看| 黄色影院在线看| 91九色综合久久| 精品久久91| 97av视频在线观看| 成人午夜电影小说| 丝袜美腿小色网| 欧美年轻男男videosbes| 狠狠色伊人亚洲综合网站l| 国内精品久久久| 亚洲精品观看| 国产成人三级视频| 久久精品国产免费| 精品人妻中文无码av在线| 精品久久久久久久久久ntr影视| 精品国产免费无码久久久| 日韩日本欧美亚洲| 成人精品高清在线视频| 日韩高清国产一区在线观看| 欧美一区=区| 女同毛片一区二区三区| 欧美日韩免费看| 日本wwwxxxx| 国自产精品手机在线观看视频| 视频二区欧美| 精品人妻大屁股白浆无码| 国产不卡一区视频| 久久久久久久黄色| 日韩欧美国产一区在线观看| 午夜羞羞小视频在线观看| 亚洲自拍偷拍视频| 午夜性色一区二区三区免费视频 | 无码视频一区二区三区| 亚洲欧美国内爽妇网| 成人软件在线观看| 日本一区免费在线观看| 免费高清成人在线| 欧美日韩色视频| 欧美一区二区三区免费| 国产经典三级在线| 黑人另类av| 日韩av一区二区三区四区| 精品丰满少妇一区二区三区| 欧美军同video69gay| 在线三级电影| 国产自产在线视频一区| 午夜宅男久久久| 三年中国中文观看免费播放| 欧美裸体一区二区三区| 91小视频xxxx网站在线| 国产精品制服诱惑| 国产精品一国产精品k频道56| caopeng视频| 678五月天丁香亚洲综合网| 青草影视电视剧免费播放在线观看| 国产激情美女久久久久久吹潮| 国产偷自视频区视频一区二区| 美女脱光内衣内裤| 欧美精品乱码久久久久久按摩 | 久久国产成人精品| 国产精品熟女一区二区不卡| 无码av免费一区二区三区试看| 国产小视频在线播放| 91精品啪在线观看麻豆免费| 尤物在线精品| 国产熟妇久久777777| 在线播放/欧美激情| 国模私拍一区二区国模曼安| 手机成人在线| 国产91在线|亚洲| 69av视频在线观看| 欧美高清在线观看| 欧美人与物videos另类xxxxx| 国产精品久久久久久久av福利| 亚洲国产一区视频| 成a人v在线播放| 国产精品亚洲综合| 免费在线观看成人| 97免费在线观看视频| 久久久精品在线|