1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Clamp()、Max() 和 Min() CSS 函數(shù)的用例

        共 5000字,需瀏覽 10分鐘

         ·

        2022-10-21 14:19

        點擊上方 前端Q,關注公眾號

        回復加群,加入前端Q技術交流群


        英文 | https://ishadeed.com/article/use-cases-css-comparison-functions/

        2020 年 4 月開始支持 CSS 比較函數(shù),當時我寫了一篇介紹關于它們的文章。我喜歡使用所有這些,但我最喜歡的一個是clamp(),它是我最常用的一個。

        在本文中,我將探討一些比較函數(shù)的用例,并詳細解釋每一個用例,大多數(shù)情況下,用例將是關于將它們用于流動尺寸以外的情況,因為這是最流行的用例,我將把它留到最后。
        如果你不了解比較函數(shù),那也沒有關系,現(xiàn)在我們一起來學習。
        Clamp()、Max() 和 Min() CSS 函數(shù)的用例
        流體尺寸和定位
        在此示例中,我們有一個帶有手機的部分,以及位于頂部的兩個圖像。最初,它將如下圖所示:

        當容器的寬度變小時,我們希望縮小圖像的大小以適應可用空間。我們可以通過使用寬度或高度的百分比值(例如:寬度:20%)來做到這一點,但這并沒有給我們太多的控制權。
        我們希望能夠有一個流體大小,它同時尊重最小值和最大值,這就是clamp來救援的地方!
        CSS:
        .section-image {  width: clamp(70px, 80px + 15%, 180px);}

        通過設置最小、首選和最大寬度,圖像將根據(jù)其容器寬度縮小或增長,這是由于使用了固定值和百分比 80px + 15% 的混合。

        演示地址:https://codepen.io/shadeed/pen/qBYPdOq?editors=1100

        裝飾元素

        如果你需要在部分項目中添加裝飾元素,大多數(shù)時候,元素需要響應,并且可能需要根據(jù)視口大小進行不同的定位,你會怎么做?

        如下示例效果:

        兩側有兩個裝飾元素。在移動設備上,它們會占用太多空間,因此我們只想展示其中的一小部分。

        為了解決這個問題,我們可以在移動設備上使用媒體查詢來控制它們。

        CSS:

        .decorative--1 {  left: 0;}
        .decorative--2 { right: 0;}
        @media (max-width: 600px) { .decorative--1 { left: -8rem; }
        .decorative--2 { right: -8rem; }}

        雖然這可行,但我們可以使用帶有 CSS clamp() 函數(shù)的無媒體查詢解決方案。

        CSS:

        @media (max-width: 600px) {  .decorative--1 {    left: clamp(-8rem, -10.909rem + 14.55vw, 0rem);  }
        .decorative--2 { right: clamp(-8rem, -10.909rem + 14.55vw, 0rem); }}

        讓我剖析一下上面的 CSS,讓你更容易理解:

        • 我們想要的是設置最小左偏移為-8rem,最大值為0rem。

        • 有了這個,我們把它留給 CSS clamp() 來決定首選值并尊重我們設置的最小值和最大值。

        我用這個計算器(https://min-max-calculator.9elements.com/)得到了上面的 clamp() 數(shù)字。

        演示地址:https://codepen.io/shadeed/pen/LYmzVZW?editors=1100

        流體英雄高度

        與前面的示例相關,英雄部分的高度可以根據(jù)視口大小而不同。因此,我們傾向于通過媒體查詢或使用視口單元來改變它。

        CSS:

        .hero {  min-height: 250px;}
        @media (min-width: 800px) { .hero { min-height: 500px; }}

        我們可以混合使用固定值和視口單位,但我們需要注意不要在較大的視口上設置很大的高度,然后,我們需要設置一個最大高度。

        CSS:

        .hero {  min-height: calc(350px + 20vh);}
        @media (min-width: 2000px) { .hero { min-height: 600px; }}

        使用 CSS clamp(),我們可以只用一個 CSS 聲明來設置最小、首選和最大高度。

        .hero {  min-height: clamp(250px, 50vmax, 500px);}

        調(diào)整屏幕大小時,你會注意到高度會根據(jù)視口寬度逐漸變化。在上面的示例中,50vmax 表示“視口最大尺寸的 50%。

        演示地址:https://codepen.io/shadeed/pen/LYmzVZW?editors=1100

        加載條

        這個例子的靈感來自 Andy Bell 的一條推文,我真的很喜歡在這個用例中使用 CSS clamp()!

        條形按鈕應該從左到右進行動畫處理,反之亦然。在 CSS 中,按鈕可以絕對定位在左側。

        CSS:

        .loading-thumb {  left: 0%;}

        要將按鈕放在最右邊,我們可以使用 left: 100% 但這會帶來一個問題,按鈕將從裝載桿容器中吹出。

        CSS:

        .loading-thumb {  left: 100%;}

        這是意料之中的,因為在這種情況下 100% 從拇指末端開始,因此將其推出。

        我們可以使用 CSS calc() 減去按鈕寬度,它會起作用,但這不是 100% 靈活的。

        CSS:

        .loading-thumb {  /* 40px represents the thumb width. */  left: calc(100% - 40px);}

        讓我們探索如何使用 CSS 變量和比較函數(shù)來改進 CSS。

        CSS:

        .loading-thumb {  --loading: 0%;  --loading-thumb-width: 40px;  position: absolute;  top: 4px;  left: clamp(    0%,    var(--loading),    var(--loading) - var(--loading-thumb-width)  );  width: var(--loading-thumb-width);  height: 16px;}

        以下是上述 CSS 的工作原理:

        • 首先,我們將最小值設置為 0%。

        • 首選值是 --loading CSS 變量的當前值。

        • 最大值表示當前加載減去按鈕寬度。

        CSS clamp() 在這里為我們提供了這個組件的三個不同的統(tǒng)計信息,我個人喜歡這個解決方案!

        不僅如此,我們還可以為不同的設計擴展相同的概念。考慮下圖:

        當前進度值在它上面有一個小句柄,當值為 100% 時,我們需要寬度來尊重它。

        如下圖所示,圓圈必須在最右側結束,如果我們不注意這一點,它最終會吹出手柄寬度的一半(參見帶有紅色標志的第二行)。

        在這種情況下,我們可以使用 CSS clamp() 函數(shù)。

        CSS:

        .loading-progress {  width: clamp(10px, var(--loading), var(--loading) - 10px);}

        最小值等于半圓寬度,優(yōu)選值是當前加載百分比,最大值是半圓減去當前百分比的結果。

        演示地址:https://codepen.io/shadeed/pen/rNvGVOa?editors=0100

        動態(tài)線分隔符

        今年早些時候,我寫了一篇關于我正在開發(fā)的 UI 的有趣 CSS 解決方案的文章。

        考慮下圖,我們在兩個部分之間有一個行分隔符。

        在移動設備上,該分隔符應變?yōu)樗?,如下所示?/span>

        我的解決方案是使用邊框和彈性框,這個方法是帶有邊框的偽元素可以擴展以填充垂直和水平狀態(tài)的可用空間。

        CSS:

        .section {  display: flex;  flex-direction: column;  gap: 1rem;}
        .section:before { content: ""; border: 1px solid #d3d3d3; align-self: stretch;}
        @media (min-width: 700px) { .section { align-items: center; flex-direction: row; }}

        我們甚至可以通過使用 CSS clamp 來實現(xiàn),Temani Afif 提出了一個根本不需要媒體查詢的解決方案。

        CSS:

        .section {  --breakpoint: 400px;  display: flex;  flex-wrap: wrap;}
        .section:before { content: ""; border: 2px solid lightgrey; width: clamp(0px, (var(--breakpoint) - 100%) * 999, 100%);}

        讓我們剖析一下上面的 CSS:

        • 0px:最小值,用于垂直分隔符。它為零,因為我們使用的是 CSS 邊框。

        • (var(--breakpoint) - 100%) * 999 根據(jù)視口寬度在 0px 或 100% 之間切換。

        條件邊界半徑

        大約一年前,我在 Facebook 提要 CSS 中發(fā)現(xiàn)了一個巧妙的 CSS 技巧。它是關于使用 CSS max() 比較函數(shù)根據(jù)視口寬度將卡片的半徑從 0px 切換到 8px。

        CSS:

        .card {  border-radius: max(    0px,    min(8px, calc((100vw - 4px - 100%) * 9999))  );}

        讓我們詳細了解一下上面的 CSS。

        現(xiàn)在我們來剖析一下上面的 CSS:

        • 我們有一個 max() 函數(shù),用于比較 0px 和 min() 的計算值,它將選擇較大的值。

        • min() 函數(shù)在 8px 和 calc((100vw - 4px - 100%) * 9999) 的計算值之間進行比較,這將導致非常大的正數(shù)或負數(shù)。

        • 9999 是一個很大的數(shù)字,強制該值為 0px 或 8px。

        有了上面的內(nèi)容,當卡片占據(jù)整個視口寬度時,它的半徑為零,或者在更大的屏幕上為 8px。

        CSS 文章標題

        在構建CSS 文章標題時,我需要一種方法來為內(nèi)容添加動態(tài)填充,同時,在較小的視口上保持最小值。

        這個想法是文章標題不包含在包裝元素中,因此我們需要一種方法來模擬內(nèi)容實際上被包裝并與下面的內(nèi)容對齊。

        為此,我們需要一種在 CSS 中使用以下公式的方法:

        動態(tài)填充 = (視口寬度 - 包裝寬度) / 2

        感謝 CSS max() 函數(shù),我們可以添加最小填充,以及在需要時切換到動態(tài)填充的方法。

        CSS:

        :root {  --wrapper-width: 1100px;  --wrapper-padding: 16px;  --space: max(    1rem,    calc(      (          100vw - calc(var(--wrapper-width) - var(--wrapper-padding) *                2)        ) / 2    )  );}
        .article-header { padding-left: var(--space);}

        這個想法是我們需要最小填充為 1rem,然后,它將根據(jù)視口寬度動態(tài)變化。

        間距

        有時,我們可能需要根據(jù)視口寬度更改組件或網(wǎng)格的間距。不帶 CSS 比較功能!我們只需要設置一次。

        .wrapper {  display: grid;  grid-template-columns: repeat(3, 1fr);  grid-gap: min(2vmax, 32px);}

        關于間距的知識,我們后面將會詳細介紹,今天的內(nèi)容就先分享到這里,感謝你的閱讀。

        往期推薦


        5 種瀑布流場景的實現(xiàn)原理解析
        純前端實現(xiàn)「羊了個羊」小游戲
        你的圖片加載,一點都不酷炫!不信 You Look Look

        最后


        • 歡迎加我微信,拉你進技術群,長期交流學習...

        • 歡迎關注「前端Q」,認真學前端,做個專業(yè)的技術人...

        點個在看支持我吧

        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人三级视频在线观看| 成人在线观看网| 91av在线播放| 黄色片免费在线观看| a天堂视频| 97成人人妻一区二区三区| 亚欧免费视频| 最近中文字幕免费mv第一季歌词大全| 成人免费视频国产在线观看| 97超碰资源站| 无码国产+白浆| 国产精品人人人人| 友田真希一级婬片A片| 亚洲Av在线观看| 伊人久久大香色综合久久| 亚洲欧美熟妇久久久久久久久| 在线免费观看黄片| 日韩日逼| AV解说| 欧美三区| 国产无遮挡又黄又爽免费网站| 国产在线观看| 波多野结衣在线无码| 成人激情五月天| 色婷婷免费视频| 国产操逼视频网站| 午夜性爱网站| 亚洲怡春院| 国产精品久久无码| 日韩伊人网| 亚洲中文字幕观看| 色视频在线观看免费| 一区二区三区四区在线看| 日本成人A片| 免费黄色视频网站大全| 亚洲精品一区二区三区四区五区六区| www.五月天.con| 插穴网站| 大地av| 免费日韩一级| 久久久69| 成人免费视频在线| 国产白丝精品91爽爽久久| 久久久69| 成人网站在线看。| 大香蕉五月丁香| 五月天一区二区三区| 大香蕉午夜视频| 亚洲天堂视频在线播放| 欧美性猛交XXXX乱大交HD| 精品人妻一区二区免费蜜桃| 国产av中文| 欧美精品乱码99久久蜜桃| 国产性色AV| 99久久伊人| 激情久久AV一区AV二区AV三区| 天天爽日日澡| 自拍亚洲欧美| 国产精品久久久久久久久久久久久久久| 蝌蚪久久| 一本无码视频| 777.av| AV大全在线观看| 日韩中文字幕免费| 一区二区三区无码免费| 日本爱爱视频免费| 成人毛片在线| 欧美猛交| 三级网址在线观看| 黄色片网站| 麻豆一区二区三区| 久久精品一区| 女同二人91| 久久无码黄片| 婷婷视频网站| 欧美精品国产动漫| 亚洲AV久久无码| 日韩在线免费看| 四虎www| 色噜噜人妻av中文字幕| 摸BBB搡BBB搡BBBB| 天堂a在线| 亚洲AV无码国产综合专区| 嫩BBB槡BBBB搡BBBB视频| 456亚洲影院| 亚洲无码小电影| 岛国无码在线观看| 91久久99久久91熟女精品| 国产成人精品AV在线观| 欧美成人A片| 婷婷五月情| 免费一级无码成人片| 大香蕉网伊人| 高清无码免费观看| 久久精品视频在线观看| 黄色精品视频| 欧美精品一区二区三区四区| 日本三级片视频不卡| 2025最新偷拍| 欧美精品在线免费| 中日韩中文字幕一区二区区别| 中国老熟女2老女人| 91无码一区二区| AV资源在线免费观看| 91大神shunv| 中文字幕乱码中文乱码91| 91蜜桃在线观看| 91精品国产aⅴ一区二区| 一区二区三区精品视频| 男女视频网站| 男女午夜福利| 玩弄小怮女在线观看| 国产黄色电影| 蜜桃av秘一区二区三区| 国产美女久久久| 日韩欧美国产一区二区| 91视频在线观看免费大全| 91精品久久久久久久久久久久| 欧美熟妇BBB搡BBB| 成人网站高清无码| 狠操在线| 97碰碰碰| 午夜福利黄色| 99热| 人人操人人操人人操人人操人人操| 国产高清黑人| 成人手机在线视频| 91精品婷婷国产综合久久蝌蚪| 亚洲免费视频网| 九色自拍视频| 老女人毛片| 天堂中文在线视频| 超碰人人在线| 欧美综合网在线观看| 午夜操B| 日韩精品中文字幕在线观看| 欧美生活片18| 国产麻豆性爱视频| 北条麻妃无码精品AV| 中文字幕亞洲高清手機版第617| 国产a级毛片| 嫩草视频在线观看免费网站| 亚洲影院第一页| 日韩毛片一区二区| 婷婷欧美日韩| 波多野结衣av中文字幕| 在线免费A片| 欧美狠狠| 91视频在线观看网| A一级黄片| 欧产日产国产swag| 久草不卡| A片免费在线播放| 翔田千里一区二区| 中文字幕免费高清| 青草成人在线视频| 91精品少妇| 欧美黄片一区二区| 在线观看中文字幕AV| 婷婷五月天网址| 色猫av| 久久久久久久久久国产精品免费观看-百度| 免费观看高清无码视频| av在线无码观看| 日韩亚洲在线观看| 国产小电影在线| 亚洲精品资源| 另类av| 国产伦子伦一级A片免费看老牛| 人妻操逼视频| 操鸡巴网站| 91丨国产丨熟女熟女| 久久99深爱久久99精品| adn日韩av| 亚洲成人AV一区二区| 国产午夜精品一区二区三区四区 | 久久老女人| 男女黄网站| 欧美日比视频| 91久| 亚洲精品无码人妻| 免费国产精品视频| 亚洲AV永久无码成人| 91久久香蕉囯产熟女线看蜜桃| 欧美一卡二卡三卡| 天天噜噜色| 中文字幕在线观看网| 美女靠逼视频| 中文字幕av久久爽Av| 国产乱妇无码毛片A片在线看下载| 免费观看色情视频| а√天堂中文官网8| 青青青青青操| 91小视频| 在线观看黄色片| 狠狠大香蕉| 一本一道波多野结衣潮喷视频| 国产多人搡BBBB槡BBBB| 久久久成人视频| 亚洲无码电影在线观看| 日本一级片中文字幕| 国产乱子伦一区二区三区免看| 91在线无码精品秘入口国战| 夜夜操免费视频| 黄色3A片在线观看| 国产白浆一区二区三区| 日韩精品人妻中文字幕有| 少妇搡BBBB搡BBB搡造水爽| 欧美操逼网| 美日韩一级| 大帝av| 人妻无码久久| 樱桃av| 日韩欧美一级A片| 黄色电影大香蕉| 久操视频免费| 成人无码免费毛片A片| 国产精品色呦呦| 天天艹天天干| 欧美日韩日逼| 无码国产精品一区二区| 影音先锋91视频| HEYZO少婦AV無碼精品| 九色PORNY国产成人| 日本成人性爱视频网站一区| 毛片天天干| 麻豆一区在线观看| AV女人天堂| 2014亚洲天堂| 精品日韩中文字幕| 九色自拍视频| 天天伊人| 成人毛片在线大全免费| 日韩综合在线观看| 真实国产乱子伦毛片| 永井玛丽亚av无码中出流出| 一级黄在线观看| 精品国产欧美| 美国久久久| 免费福利在线视频| 特色毛片| 爱逼AV| 国产P片内射天涯海角| 婷婷网五月天| 91啦丨露脸丨熟女色啦| 欧美福利导航| 啪啪啪网址| 成人网站免费视频| 永久免费一区二区三区| 澳门簧片| 亚洲视频五区| h片在线观看免费| 中文字幕日本欧美| 欧美中文字幕视频| 靠逼免费视频| 国产探花视频在线免费观看| 99re这里只有精品6| jjzz国产| 久久久久亚洲AV成人无码电影| 久久久久亚洲AV无码成人片| 国产秘精品一区二区三区免费| 夜夜躁狠狠躁日日躁av| 一级a一级a爰片免费免免在线| 蜜桃AV无码一区二区三区| 日日干天天| 日皮视频网站| 天天干妹子| 色老汉视频| 亚洲日韩一区二区三区| 色婷婷小说| 国产精品你懂的| 国产一视频| 男女黄网站| 三级片在线观看视频| 天堂av中文字幕| 国产三级片在线观看视频| 露脸丨91丨九色露脸| 成人片网站在线观看| 成人视频一区| 黄色日本视频| 11一12周岁女毛片| 精品人妻午夜一区二区三区四区| 一级操逼视频| 亚洲国产精品VA在线看黑人| 亚洲天堂第一页| 美日韩在线观看| 亚洲精品操逼| 免费AV大全| 欧美在线观看网站18| 天天日天天操天天摸天天干天日射天天插 | 国产一区二区成人久久919色| 国产96在线亚洲| 亚洲ww国产a大作| 91爽爽| 五月婷婷黄色| 久久私拍| 日韩免费视频在线观看| 婷婷久久久久久| www.尤物视频| 久久黄色免费看|