1. 程式人生 > >CSS中的一些屬性百分比值,相對於誰計算?

CSS中的一些屬性百分比值,相對於誰計算?

在css屬性中,很多屬性的取值可以是百分比,比如:width、height、padding、margin、font-size、line-height、background-position等,那麼這些百分比值的計算是相對於誰呢?

先來看幾個例子,分別是正常文件流中、浮動情況下和定位情況下。

正常文件流中:

<div class="parent">
    <div class="child">
        css百分比在正常文件流的體現
    </div>
</div>
   .parent {
            width: 500px;
            height: 300px;
            padding:50px;
            background: #999;
            margin-left:50px;
            font-size: 15px;
            line-height:30px;
            border: 1px solid #808080;
    }
    .child {
            width: 50%;
            height: 20%;
            padding-left: 10%;
            margin-left:10%;
            border:2px solid black;
            font-size: 150%;
            line-height: 150%;
            background: orange;
     }

此時,class為parent的div元素的content-box的寬度、高度值分別為500px、300px;padding-box的寬度、高度分別為600px、400px,如下圖所示:

                

當為child元素設定float為left後,結果與上述一樣,即浮動下各屬性百分比的計算是和正常文件流中一樣的。

當為元素設定定位後,

      .parent {
            width: 500px;
            height: 300px;
            padding:50px;
            background: #999;
            margin-left:50px;
            font-size: 15px;
            line-height:30px;
            border: 1px solid #808080;
            position: relative;
        }
        .child {
            width: 50%;
            height: 20%;
            padding-left: 10%;
            margin-left:10%;
            border:2px solid black;
            font-size: 150%;
            line-height: 150%;
            background: orange;
            position:absolute;
            top:20%;
            left:20%;
        }

子元素的寬度、高度、內外邊距等屬性值變化如下所示:

                       

由上述三個例子,總結如下:

一、font-size

當前的字型大小等於100%

二、line-height

line-height的計算值就是當前字型的值乘以該百分比。注意line-height取值為數值或者百分比的差異,此處不細緻講解。

三、width

正常文件流中和設定浮動的情況下,相對於父元素content-box的寬度;絕對定位時,相對於包含塊padding-box的寬度。

四、height

height對百分比也是支援的,但是其和width還是有一個明顯的區別:當父元素width屬性為auto時,子元素寬度仍然可以使用百分比設定。但是對於height,只要子元素還是在正常文件流當中的,如果父元素的height屬性為auto,則子元素height設定為百分比會被忽略。規範中指出:如果包含塊的高度沒有顯式指出(即高度由內容決定),並且該元素不是絕對定位,則計算值為auto。而auto*100/100=NaN。所以,若要高度的百分比設定有效,需要如下設定:

html,body{
  height:100%
}

上述高度計算,都是對於正常流

五、margin、padding

無論是垂直或水平方向,均是相對於父元素的寬度,正常文件流中和設定浮動的情況下,相對於父元素content-box的寬度;絕對定位時,相對於包含塊padding-box的寬度。

六、background-position

七、定位元素的left/right/bottom/top百分比值

 top,bottom設定百分比定位是按包含塊padding-box的高度來計算的,同樣left,right,設定百分比定位是按包含塊padding-box的寬度來計算的。