1. 程式人生 > >CSS盒子模型、絕對定位和相對定位

CSS盒子模型、絕對定位和相對定位

一、CSS盒子模型:

標準模式和混雜模式(IE)。在標準模式下瀏覽器按照規範呈現頁面;在混雜模式下,頁面以一種比較寬鬆的向後相容的方式顯示。混雜模式通常模擬老式瀏覽器的行為以防止老站點無法工作。



盒子模型的邊框(border)就是圍繞著內容補白的線,這條線你可以設定它的粗細樣式顏色(邊框三個屬性)。

css 樣式中允許只為一個方向的邊框設定樣式:

div{border-bottom:1px solid red;}

盒模型寬度和高度和我們平常所說的物體的寬度和高度理解是不一樣的,css內定義的寬(width)和高(height),指的是填充以裡的內容範圍

因此一個元素實際寬度

(盒子的寬度)=左邊界+左邊框+左填充+內容寬度+右填充+右邊框+右邊界。

元素內容邊框之間是可以設定距離的,稱之為“填充”。填充也可分為上、右、下、左(順時針)。如下程式碼:

div{padding:20px 10px 15px 30px;}

元素與其它元素之間的距離可以使用邊界(margin)來設定。邊界也是可分為上、右、下、左。如下程式碼:

div{margin:20px 10px 15px 30px;}

什麼是層佈局模型?層佈局模型就像是影象軟體PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網頁設計領域,由於網頁大小的活動性,層佈局沒能受到熱捧。但是在網頁上區域性使用層佈局還是有其方便之處的。下面我們來學習一下html中的層佈局。

如何讓html元素在網頁中精確定位,就像影象軟體PhotoShop中的圖層一樣可以對每個圖層能夠精確定位操作。CSS定義了一組定位(positioning)屬性來支援層佈局模型。

層模型有三種形式:

1、絕對定位(position: absolute)

2、相對定位(position: relative)

3、固定定位(position: fixed)

層模型--絕對定位

如果想為元素設定層模型中的絕對定位,需要設定position:absolute(表示絕對定位),這條語句的作用將元素從文件流中拖出來,然後使用left、right、top、bottom屬性相對於其最接近的一個具有定位屬性的父包含塊

進行絕對定位。如果不存在這樣的包含塊,則相對於body元素,即相對於瀏覽器視窗

如下面程式碼可以實現div元素相對於瀏覽器視窗向右移動100px,向下移動50px。

div{
    width:200px;
    height:200px;
    border:2px red solid;
    position:absolute;
    left:100px;
    top:50px;
}
<div id="div1"></div>

層模型--相對定位

如果想為元素設定層模型中的相對定位,需要設定position:relative(表示相對定位),它通過left、right、top、bottom屬性確定元素在正常文件流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(並且元素像層一樣浮動了起來),然後相對於以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動

如下程式碼實現相對於以前位置向下移動50px,向右移動100px;

#div1{
    width:200px;
    height:200px;
    border:2px red solid;
    position:relative;
    left:100px;
    top:50px;
}

<div id="div1"></div>
absolute表裡如一,移動了就是移動了。relative只是表面顯示移動了,但實際還在文件流中原有位置,別的元素無法佔據。

層模型--固定定位

fixed:表示固定定位,與absolute定位型別類似,但它的相對移動的座標是檢視(螢幕內的網頁視窗)本身。由於檢視本身是固定的,它不會隨瀏覽器視窗的滾動條滾動而變化,除非你在螢幕中移動瀏覽器視窗的螢幕位置,或改變瀏覽器視窗的顯示大小,因此固定定位的元素會始終位於瀏覽器視窗內檢視的某個位置,不會受文件流動影響,這與background-attachment:fixed;屬性功能相同。以下程式碼可以實現相對於瀏覽器檢視向右移動100px,向下移動50px。並且拖動滾動條時位置固定不變。

#div1{
    width:200px;
    height:200px;
    border:2px red solid;
    position:fixed;
    left:100px;
    top:50px;
}
<p>文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字。</p>
....