原來css也可以計算-calc()使用


  在瀏覽其他人的源代碼時,看到了一個陌生的屬性: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()使用通用的數學運算規則,但是也提供更智能的功能:

  1. 使用“+”、“-”、“*” 和 “/”四則運算;
  2. 可以使用百分比、px、em、rem等單位;
  3. 可以混合使用各種單位進行計算;
  4. 表達式中有“+”和“-”時,其前后必須要有空格,如"widht: calc(12%+5em)"這種沒有空格的寫法是錯誤的;
  5. 表達式中有“*”和“/”時,其前后可以沒有空格,但建議留有空格。

  瀏覽器的兼容性:

  瀏覽器對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); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM