天天看點

CSS中的數學函數(上) 比較函數min/max/clamp

前言

css中有将近102個函數,但是我們所掌握的大概又有多少呢?今天我們先來介紹其中的數學函數,數學函數大概有:

  1. 基本算術:calc()
  2. 比較函數:min()、max()和clamp()
  3. 階梯值函數:round()、mod()和rem()
  4. 三角函數:sin()、cos()、tan()、asin()、acos()、atan()和atan2()
  5. 指數函數:pow()、sqrt()、hypot()、log()、exp()
  6. 符号相關函數:abs() , sign()

除了這些函數,還有常量是需要記住的:

e , pi,infinity,-infinity,NaN

常量

  1. e是自然對數的底,約等于 2.7182818284590452354
  2. pi是圓的周長與其直徑的比值,大約等于 3.1415926535897932。
  3. infinity 代表無窮大,值為 +∞
  4. -infinity 代表無窮小,值為 −∞
  5. NaN值為 NaN

基本算數-calc

calc是英文單詞calculate(計算)的縮寫,它可以動态計算長度值。

他允許執行基本的算術運算,+),減(- ),乘(*),除(/),和括号。注意》》》 運算符和參數之間要有空格

他也支援文字長度,例如1px ,2em,同時還支援 計算結果是有效參數類型(例如)的 其他數學函數或其他表達式,例如attr(),其。

運算符的标準數學優先級規則适用:calc(2 + 3 * 4) 等于14,而不是20。

括号可用于操縱優先級:calc((2 + 3) * 4)改為等于20。等價于calc(calc(2 + 3) * 4)

舉例

div {
    float: left;
    border: solid 1px;
    width: calc(100% / 3 - 2 * 1em - 2 * 1px);
    height:100px;
  }      

我們算一下寬高是如何計算出來的。

102=100+上下border

429.32=1384/3-32-2+左右border

CSS中的數學函數(上) 比較函數min/max/clamp

比較函數-min()

min() CSS 方法允許你從逗号分隔符表達式中選擇一個最小值作為 CSS 的屬性值。min() 方法可以用于以下任何屬性中 , , , , ,, 或者 。

同時基本的算術運算,(+),減(- ),乘(*),除(/),和括号。

他也支援文字長度,例如1px ,2em,同時還支援 計算結果是有效參數類型(例如)的 其他數學函數或其他表達式,例如calc(),其。

min()是用來限制元素的最大值,類似于max-width/height

類似下面的文法都是支援的:

width: min(5px * 10, 1em);
width: min(calc(5px * 10), 1em);
width: min(5px * 10, var(--width),20em,10px,......);      

div {
    float: left;
    border: solid 1px;
    width: min(100px,10em,10vw);
    height:100px;
 }      

在移動裝置Iphone下,最終元素的寬度隻有39.53,

來計算一下:

首先min(100px,10em,10vw)換算成同一個機關的結果是

min(100px,160px,37.5px),

=》最小值就是37.5px,

=》元素寬度也就是37.5px加上兩個border,也就是39.5,

=》是以說width最大寬度就是37.5,不會是10px或者160px

CSS中的數學函數(上) 比較函數min/max/clamp

在視窗寬度1384px的情況下:最終元素的寬度隻有102px。

CSS中的數學函數(上) 比較函數min/max/clamp

比較函數-max()

width: min(5px * 10, 1em);
width: min(calc(5px * 10), 1em);
width: min(5px * 10, var(--width),20em,10px,......);      

div {
    float: left;
    border: solid 1px;
    width: min(100px,10em,10vw);
    height:100px;
 }      

在視窗寬度1384px的情況下:最終元素的寬度隻有162px。

CSS中的數學函數(上) 比較函數min/max/clamp

首先max(100px,10em,10vw)換算成同一個機關的結果是

max(100px,160px,138.4px),

=》最大值就是160px,

=》元素寬度也就是160px加上兩個border,也就是163px,

=》是以說width最小寬度就是160。

在移動裝置Iphone下,最終元素的寬度也是162px,

CSS中的數學函數(上) 比較函數min/max/clamp

比較函數-clamp()

clamp數有三個計算-最小值,中間值,和最大值=

clamp(min, val, max)

傳回結果

有點像夾逼定理,仔細看注釋了解

if(min<val&& val < max ){
   return val
 }
  if(val<min){
   // clamp( val,min, max),變成了中間值,是以傳回中間值
   return min 
 }
  if(val> max ){
   return max
 }      

視窗寬度是1400px的。

div {
        float: left;
        border: solid 1px;
        width: clamp(100px,10em,10vw);
        height:100px;
      }      

clamp(100px,10em,10vw) 等價于clamp(100px,160px,140px)

最終的傳回結果是:140px

元素的寬度:140px+左右兩個border=142

CSS中的數學函數(上) 比較函數min/max/clamp