在瀏覽其他人的源代碼時,看到了一個陌生的屬性: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); }