在浏覽其他人的源代碼時,看到了一個陌生的屬性:width:calc(100% - 10px -10px); 出于好奇心,百度了一下,看到了以下這篇文章,http://www.w3cplus.com/css3/how-to-use-css3-calc-function.html ,講解的很清楚,很容易了解,特此分享給大家。
什麼是calc:
calc是英文單詞calculate(計算)的縮寫,是css3的一個新增的功能,用來指定元素的長度。可以使用calc()給元素的border、margin、pading、font-size和width等屬性設定動态值。
calc()可以解決問題:
元素寬度為100%時,若再設定margin、padding、border,元素将會撐破父元素,溢出。雖然CSS3屬性中的box-sizing在一定程度上可以解決這樣的問題,但是calc()函數功能實作該效果更簡單。
calc()能讓元素做計算,你可以給一個div元素,使用百分比、em、px和rem機關值計算出其寬度或者高度,比如說“width:calc(50% + 2em)”,這樣一來你就不用考慮元素DIV的寬度值到底是多少,而把這個煩人的任務交由浏覽器去計算。
科普一下box-siziing:
box-sizing屬性值可以為這三個值之一:content-box(default),border-box,padding-box。
content-box,border和padding不計算入width之内
padding-box,padding計算入width内
border-box,border和padding計算入width之内,其實就是怪異模式了~
ie8+浏覽器支援content-box和border-box;ff則支援全部三個值。
calc()文法:
calc()文法非常簡單,就像我們小時候學加 (+)、減(-)、乘(*)、除(/)一樣,使用數學表達式來表示:
.elm {
width: calc(expression);
}
其中"expression"是一個表達式,用來計算長度的表達式。
calc()的運算規則:
calc()使用通用的數學運算規則,但是也提供更智能的功能:
- 使用“+”、“-”、“*” 和 “/”四則運算;
- 可以使用百分比、px、em、rem等機關;
- 可以混合使用各種機關進行計算;
- 表達式中有“+”和“-”時,其前後必須要有空格,如"widht: calc(12%+5em)"這種沒有空格的寫法是錯誤的;
- 表達式中有“*”和“/”時,其前後可以沒有空格,但建議留有空格。
浏覽器的相容性:
浏覽器對calc()的相容性還算不錯,在IE9+、FF4.0+、Chrome19+、Safari6+都得到較好支援,同樣需要在其前面加上各浏覽器廠商的識别符,不過可惜的是,移動端的浏覽器還沒僅有“firefox for android 14.0”支援,其他的全軍覆沒。
在實際使用時,同樣需要添加浏覽器的字首
.elm {
/*Firefox*/
-moz-calc(expression);
/*chrome safari*/
-webkit-calc(expression);
/*Standard */
calc();
}
執行個體:
<div class="demo">
<div class="box"></div>
</div>
上面的結構很簡單,就是一個div.demo的元素中包含了一個div.box的元素。
知道總寬度是100%,在這個基礎上減去boder的寬度(5px * 2 = 10px),在減去padding的寬度(10px * 2 = 20px),即"100% - (10px + 5px) * 2 = 30px" ,最終得到的值就是div.box的width值:
.demo {
width: 300px;
background: #60f;
padding: 3px 0;
}
.box {
background: #f60;
height: 50px;
padding: 10px;
border: 5px solid green;
width: 90%;/*寫給不支援calc()的浏覽器*/
width:-moz-calc(100% - (10px + 5px) * 2);
width:-webkit-calc(100% - (10px + 5px) * 2);
width: calc(100% - (10px + 5px) * 2);
}