
CSS3 的 calc() 函數允許我們在屬性值中執行數學計算操作。例如,我們可以使用 calc() 指定一個元素寬的固定像素值為多個數值的和。
.foo {
width: calc(100px + 50px);
}
為什麼是 calc()
如果你使用過 CSS預處理器,比如 SASS,以上示例你或許碰到過。
.foo {
width: 100px + 50px;
}
// Or using SASS variables
$width-one: 100px;
$width-two: 50px;
.bar {
width: $width-one + $width-two;
}
然而,calc() 函數提供了更好的解決方案。首先,我們能夠組合不同的單元。特别是,我們可以混合計算絕對單元(比如百分比與視口單元)與相對單元(比如像素)。例如,我們可以創造一個表達式,用一個百分比減掉一個像素值。
.foo {
width: calc(100% - 50px);
}
本例中,.foo 元素總是小于它父元素寬度 50px。 第二,使用 calc(),計算值是表達式它自己,而非表達式的結果。當使用 CSS 預處理器做數學運算時,給定值為表達式的結果。
// Value specified in SCSS
.foo {
width: 100px + 50px;
}
// Compiled CSS and computed value in browser
.foo {
width: 150px;
}
然而,浏覽器解析的 calc() 的值為真實的 calc() 表達式。
// Value specified in CSS
.foo {
width: calc(100% - 50px);
}
// Computed value in browser
.foo {
width: calc(100% - 50px);
}
這意味着浏覽器中的值可以更加靈活,能夠響應視口的改變。我們能夠給元素設定一個高度為視口的高度減去一個絕對值,它将随視口的改變進行調節。
使用 calc()
calc() 函數可以用來對數值屬性執行四則運算。比如,<length>,<frequency>,<angle>,<time>,<number> 或者 <integer 資料類型 這裡有一些示例:
.foo {
width: calc(50vmax + 3rem);
padding: calc(1vw + 1em);
transform: rotate( calc(1turn + 28deg) );
background: hsl(100, calc(3 * 20%), 40%);
font-size: calc(50vw / 3);
}
.foo {
width: calc( 100% / calc(100px * 2) );
}
.foo {
width: calc( 100% / (100px * 2) );
}