天天看點

原來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);
}      
下一篇: