搜尋
首頁web前端css教學詳解css中的比較函數(範例介紹)

CSS比較函數從2020年4月就開始支援了,我喜歡使用這些函數,但最喜歡的是 clamp(),它也是我最常用的一個。在這堂課中,我們詳細來看這些比較函數。

詳解css中的比較函數(範例介紹)

Clamp(), Max(), 和Min() 函數

clamp() 函數的作用是把一個值限制在一個上限和下限之間,當這個值超過最小值和最大值的範圍時,在最小值和最大值之間選擇一個值使用。它接收三個參數:最小值、首選值、最大值。 【學習影片分享:css影片教學web前端

#流體的尺寸與定位

在下面這個例子中,有一個手機樣式,同時有兩張圖片放置在上面,如下所示:

詳解css中的比較函數(範例介紹)

#當容器的寬度變小時,我們要縮小圖片的尺寸,這樣才不會變形。一般使用百分比單位來解決,如 width: 20%,但是這種方式沒有給我們太多的控制。

我們希望能夠有一個流體尺寸,要求有最小值和最大值,這就是 clamp 出場的地方。

.section-image {
  width: clamp(70px, 80px + 15%, 180px);
}

詳解css中的比較函數(範例介紹)

事例位址:codepen.io/shadeed/pen…

裝飾性元素

#有時候,我們需要在頁面角落加上一些修飾元素,該修飾元素需要具有響應式,例如PC 端是這樣的(黑點部分):

詳解css中的比較函數(範例介紹)

然後在行動端是長這樣的:

詳解css中的比較函數(範例介紹)

為了做到這,我們可以使用媒體查詢:

.decorative--1 {
  left: 0;
}

.decorative--2 {
  right: 0;
}

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

  .decorative--2 {
    right: -8rem;
  }

雖然這樣做可以,但我們可以clamp()函數,這樣更簡潔:

  .decorative--1 {
    left: clamp(-8rem, -10.909rem + 14.55vw, 0rem);
  }

  .decorative--2 {
    right: clamp(-8rem, -10.909rem + 14.55vw, 0rem);
  }

事例位址:codepen.io/shadeed/pen…

流體高度

有時候,我們頁面的主區的高度需要根據視窗大小而改變。這種場景,我們傾向於透過媒體查詢或使用視口單位來改變這種情況。

詳解css中的比較函數(範例介紹)

.hero {
  min-height: 250px;
}

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

我們也可以混合使用固定值和視窗單位:

.hero {
  min-height: calc(350px + 20vh);
}

@media (min-width: 2000px) {
  .hero {
    min-height: 600px;
  }
}

但需要注意在較大的視口上高度不能太過高,所以我們需要設定一個最大高度,使用CSS clamp(),我們可以只用一個CSS宣告來設定最小、首選和最大高度。

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

當調整螢幕大小時,我們會看到,高度會根據視窗寬度逐漸改變。在上面的範例中,50vmax表示著視窗最大尺寸的 50%

詳解css中的比較函數(範例介紹)

事例位址:codepen.io/shadeed/pen…

Loading Bar

詳解css中的比較函數(範例介紹)

進度條一般是從左到右一個載入過程,在CSS 中,我們可以定位在左邊:

.loading-thumb {
  left: 0%;
}

為了將進度條定位到最右邊,我們可以使用left: 100%,但這會帶來一個問題。進度條會跑到容器外:

詳解css中的比較函數(範例介紹)

.loading-thumb {
  left: 100%;
}

這是正常的情況,100% 是從進度條的末端開始的,而進度條本身也有自己的寬度,所以實際寬度會大於容器的寬度。

我們可以用calc() 來減去的進度條寬度,這樣就可以了,但這並不是100%有效:

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

我們來看下,如何利用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;
}

上面的步驟如下:

  • 首先,我們設定一個最小值為 0%

  • 首選值是--loading CSS變數的目前值

  • 最大值代表当前的加载量减去进度条件的宽度

这里的CSS clamp()为我们提供了这个组件的三种不同的状态信息,这个方案很 nice:

詳解css中的比較函數(範例介紹)

不仅如此,我们还可以以相同的方式来处理不同UI

詳解css中的比較函數(範例介紹)

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

最小值等于圆圈宽度的一半,首选值是当前的加载百分比,最大值是当前百分比与圆圈一半的减去结果。

1詳解css中的比較函數(範例介紹)

事例地址:codepen.io/shadeed/pen…

动态分割器

考虑下图,我们在两个区域之间有一个行分隔符。

1詳解css中的比較函數(範例介紹)

在移动端上,这个分隔符应该变成水平的,如下图:

1詳解css中的比較函數(範例介紹)

我的解决方案是使用一个边框和flex。思路是,边框作为伪元素,以填补垂直和水平状态的可用空间:

.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;
  }
}

我们也可以使用 clamp 而不需要媒体查询的解决方案:

.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:最小值,用于垂直分隔符。它的值是 0,因为我们使用的是一个CSS边框
  • (var(--breakpoint) - 100%) * 999 是一个个切换器,根据视口宽度在 0px100% 之间切换。

1詳解css中的比較函數(範例介紹)

动态 border Radius

一年前,发现了一个巧妙的CSS技巧。使用CSS max()函数,根据视口宽度,将卡片的border-radius0px 切换到 8px

1詳解css中的比較函數(範例介紹)

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

来剖析一下上面的CSS:

  • 我们有一个 max() 函数,在 0pxmin()的计算值之间进行比较,并选择较大的值。

  • min() 函数在 8pxcalc((100vw - 4px - 100%) * 9999 的计算值之间进行比较,这会得到一个非常大的正数或负数。

  • 9999 是一个很大的数字,这样 min 的值都是 8px

间距

1詳解css中的比較函數(範例介紹)

有时,我们可能需要根据视口宽度来改变一个组件或一个网格的间距。有了CS函数就不一样了,我们只需要设置一次。

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

詳解css中的比較函數(範例介紹)

原文地址:https://isdeed.com/article/use-cases-css-comparison-functions/

更多编程相关知识,请访问:编程视频!!

以上是詳解css中的比較函數(範例介紹)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
'訂閱播客”鏈接應在哪裡?'訂閱播客”鏈接應在哪裡?Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

瀏覽器引擎多樣性瀏覽器引擎多樣性Apr 16, 2025 pm 12:02 PM

當他們在2013年去Chrome時,我們失去了歌劇。與Edge今年早些時候也進行了同樣的交易。邁克·泰勒(Mike Taylor)稱這些變化為“減少

網絡共享的UX注意事項網絡共享的UX注意事項Apr 16, 2025 am 11:59 AM

從垃圾點擊誘餌網站到大多數出版物的最多,共享按鈕長期以來一直無處不在。然而,這些

每周平台新聞:Apple部署網絡組件,漸進的HTML渲染,自託管關鍵資源每周平台新聞:Apple部署網絡組件,漸進的HTML渲染,自託管關鍵資源Apr 16, 2025 am 11:55 AM

在本週的綜述中,Apple進入Web組件,Instagram如何插入腳本以及一些思考的食物,以進行自託管關鍵資源。

git Pathspecs以及如何使用它們git Pathspecs以及如何使用它們Apr 16, 2025 am 11:53 AM

當我查看GIT命令的文檔時,我注意到其中許多人都有選擇。我最初以為這只是一個

產品圖像的彩色拾取器產品圖像的彩色拾取器Apr 16, 2025 am 11:49 AM

聽起來有點像一個困難的問題,不是嗎?我們經常沒有成千上萬種顏色的產品鏡頭,以便我們可以隨身攜帶。我們也不是

黑暗模式與React和Themeprovider切換黑暗模式與React和Themeprovider切換Apr 16, 2025 am 11:46 AM

我喜歡網站具有“暗模式”選項時。黑暗模式使我更容易閱讀網頁,並幫助我的眼睛更放鬆。許多網站,包括

帶有HTML對話框元素的一些動手帶有HTML對話框元素的一些動手Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器