HTML DIV CSS佈局基礎

一、HTML基本語法

HTML類似XML,頁面上的每個節點用一對標籤表示,例如

原始碼 [ HTML ]

HTML 屬性名可以使用除 空白字元,雙引號,單引號,‘/’,‘>’,‘\0’以外的所有可列印字元,HTML 的屬性值可選包含在一對雙引號、或單引號內,注意不要使用有歧義的表示即可,例如值包含單引號就應當放在一對雙引號內。所以類似下面這樣的寫法雖不常見但仍然是合法的:

原始碼 [ HTML ]

檢視原始碼列印?

三、HTML文件

一個完整的的HTML頁面原始碼如下:

一個標準的HTML頁面包含幾個必要的標記為其他節點的根節點,而 html一般 包含兩個子節點, body節點裡面放顯示內容,而head節點裡放頁面的其他引數(例如視窗標題,頁面編碼等等)而head節點與body節點又可以包含其他的子節點,子節點又可以包含子節點,就象一棵樹:

html是樹幹是根節點,而head節點包含的內容總是默默無聞的不可見部份,body則包含所有顯示在頁面上的內容。

四、盒子模型

所有的節點都可以用CSS來定義外觀,CSS可以寫到節點的style屬性裡,也可以寫到CSS檔案裡。所有可顯示的節點的顯示模式都可以用盒子模型來表示,如下圖:

每一個盒子有內容區,有邊框(CSS的border屬性)邊框裡面是內邊距( 或者叫內補白、即CSS的padding屬性)邊框外面則是外邊距(或者叫外邊界,即CSS的margin屬性)當然還有節點的寬度、高度等等,有有的瀏覽器中寬度高度整的是包含border的節點大小,而在有的瀏覽器中指的是內容區大小,關於盒子模型請參考文章:瞭解CSS 盒子模型

五、CSS選擇器

如果你還不知道什麼是CSS選擇器,請參考教程CSS選擇器語法詳解以及HTMLayout快速入門

六、塊節點、內聯節點

HTML是以流的模式來顯示節點的,所有節點分為兩類。

塊節點:

可以指定高度、寬度(當然也支援上面所說的盒子模型的所有屬性,例如內邊距、外邊距等等),多個塊節點總是在頁面上自上向下的垂直流動(塊節點總是獨佔一行,預設的兩個塊節點不會顯示在同一行內,無法在同一行內聯接)

內聯節點:

內聯節點總是在頁面上自左向右的水平流動,一行放不下來才會流動到下一行,內聯元素顯示在行內,其高度受限於行距的高度,一個典型的例子就是文字,內聯節點不能指定垂直方向的外邊距(但是可以指定水平方向的外邊距)、雖然也可以指定邊框以及內邊距(但在垂直方向上受行距高度的限制,邊框以及內邊距在垂直方向上設定的再大也不能改變行距高度,多餘的內邊距會被忽略,而多餘的邊框會溢位到上一行或下一行重疊顯示),內聯節點也不能指定高度(受行距高度的限制),也不能指定寬度(即內聯節點在水平方向上只有外邊距是正常起作用的,垂直方向上內外邊距、邊框等都顯示不正常受制於行距高度)塊節點通常用來佈局、建立網頁的框架、調整網頁的結構,最重要的塊節點就是div節點。內聯節點通常用來顯示內容(文字和影象)、最常見的內聯節點是span,注意顯示影象的img也是內聯節點。在嚴格的HTML4規範中,body下面只能包含塊節點,所有內聯節點都應當放到塊節點中。所以div如此重要,甚至HTML佈局可以簡稱 div+css 佈局。塊節點中的兄弟節點預設是自上向下流動的,我們來看一個例子:

原始碼 [ AAuto ]

001

import win。ui;

002

/*DSG{{*/

003

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“自上向下流動的塊節點”)

004

winform。add( )

005

/*}}*/

006

007

import web。form;

008

var wb = web。form( winform );

009

010

wb。html =/**

011

012

013

Document

014

015 div#header {
016 border:red 1px solid;
017 background:#cccccc;
018 margin-bottom:20px;
019 }
020 div#main-box{
021 border:blue 1px solid;
022 margin-top:20px;
023 padding:10px;
024 }
025
026 div#main-box div{
027 border:green 1px solid;
028 width:100%;
029 height:100px;
030 overflow:hidden;//IE6下要加上這句
031 }
032
033 div#main-box div#a{
034 width:200px;
035 height:150px;
036 }
037

038

039

040

這是標題

041

042

a

043

b

044

c

045

d

046

047

048

049

**/

050

051

winform。show();

052

win。loopMessage();

執行上面的程式碼,你會看到這樣的顯示效果:紅色邊框的 #header 節點在上面,藍色邊框的 #main-box 節點在下面,他們自上向下流動,注意上下兩個塊節點之間的上下外邊距會自動合併,#header 節點的下邊距是20畫素,#main-box的上邊距是10畫素,那他們之間的邊距不是總和的30畫素,而是重疊後的最大邊距20畫素。#a,#b,#c,#d 四個綠色邊框的兄弟節點也是自上向下流動的,不論他們是多大的寬度,始終佔據獨立的一行。塊節點如果在CSS的float屬性中指定浮動屬性,那麼他會脫離預設的垂直向下的顯示流,向左或向右橫向浮動(這樣就可以水平佈局塊節點了)我們把a節點向右浮動看看效果,也就是在CSS程式碼中加上:

原始碼 [ CSS ]

div#a{float :right ;}

完整原始碼如下:

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“自上向下流動的塊節點”)

winform。add( )

/*}}*/

import web。form;

var wb = web。form( winform );

wb。html =/**

Document

div#header {
border:red 1px solid;
background:#cccccc;
margin-bottom:20px;
}
div#main-box{
border:blue 1px solid;
margin-top:20px;
padding:10px;
}
div#main-box div{
border:green 1px solid;
width:100%;
height:100px;
overflow:hidden;//IE6下要加上這句
}
div#main-box div#a{
width:200px;
height:150px;
float:right;
}

這是標題

a

b

c

d

**/

winform。show();

win。loopMessage();

執行後的效果如下:注意上圖中的 #a 節點漂移到了頁面的右側,他脫離了原來的文件流,而他後面的其他節點就完全當他不存在,繼續自管自的從下向下流動,在一些瀏覽器中 #b #c 會顯示在#a的後面,也就是 #a不但是浮動到了右側也浮動到了他們的上面( 這時候可以透過指定左側塊節點的右邊距 - 也就是 margin-right 避免重疊 )注意 #a雖然是浮動的節點,但是他不會影響他前面的節點、以及他的父親節點(這就象孫悟空逃不出如來佛的手掌心 ),而對於他後面的節點,他無視他們的存在,如果你希望 #c節點在 #a節點的下面,那麼就要在 #c的CSS屬性中加上 clear:right 清除右浮動,也就是不允許任何節點浮動到他的右側,在上面的程式碼里加下下面的CSS程式碼:

原始碼 [ CSS ]

div#c{

clear :right ;/*不允許其他節點浮動到他右邊*/

}

修改以後執行網頁,顯示效果如下:

其他清除浮動的方法:

也可以在浮動節點的父節點CSS中應用 diaplay:inline-block; 或設定 overflow(值為visible以外的值,IE6必須觸發haslayout才能生效),position:absolute,float 等使父節點產生獨立的包裹性以清除子節點的浮動影響。內聯節點預設是自左向右水平流動的,看一個示例程式碼:

原始碼 [ AAuto ]

001

import win。ui;

002

/*DSG{{*/

003

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“自左向右流動的內聯節點”)

004

winform。add( )

005

/*}}*/

006

007

import web。form;

008

var wb = web。form( winform );

009

010

wb。html =/**

011

012

013

014

Document

015

016 div#header {
017 border:red 1px solid;
018 background:#cccccc;
019 margin-bottom:20px;
020 }
021 div#main-box{
022 border:blue 1px solid;
023 margin-top:20px;
024 padding:10px;
025 }
026
027 div#main-box span{
028 border:green 1px solid;
029 width:50px;
030 height:50px;
031 }
032
033 span#a{
034 width:50px;
035 height:150px;
036 }
037

038

039

040

這是標題

041

042

a

043

b

044

c

045

d

046

047

048

049

**/

050

051

winform。show();

052

win。loopMessage();

顯示效果如下:可以看到,內聯節點 #a,#b #c #d 都是span,自左向右流動。內聯節點預設的是不能指定高度的(在IE6怪異模式下可以指定寬度),這稱為內聯塊節點( display: inline-block )內聯節點也可以指定邊框邊距這些 - 如果是純粹的inline(內聯)節點垂直方向上高度有關的外觀屬性會受制於行距高度,而inline-block(內聯塊) 可以不受行距高度限制,而且內聯節點也可以向左或向右浮動,常見的如文字環繞圖片的效果就是使用浮動屬性實現,示例如下:

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“向各浮動的內聯節點”)

winform。add( )

/*}}*/

import web。form;

var wb = web。form( winform );

wb。html =/**

Document

div#header{
/*rgb函式用於表示顏色,引數可以是百分比或0到255之間的數值*/
background:rgb(255,122,122);
}
div#main-box{
/*藍色可以用 #0000FF表示,也可以用 rgb(0,0,255)表示,或簡寫為blue*/
border:blue 1px solid;
margin-top:20px;
padding:10px;
width:300px;
}
div#main-box img{
float:right;
}

這是標題

HTML DIV CSS佈局基礎

AAuto 雖然小,但是支援的介面很豐富,可支援標準DLL的 stdcall,cdecl,thiscall,fastcall,regparm(n) 等呼叫約定,可以支援C++匯出的類物件,可以支援com靜態動態雙介面,象VBS一樣原生支援com物件。快手是綠色軟體,下載包不到7MB,不需要安 裝解壓縮即可直接使用,雙擊開啟下載的壓縮包

**/

winform。show();

win。loopMessage();

顯示效果如下:可以看到 img 節點透過在CSS裡指定 float:right; 向右浮動,然後本該水平流動的文字環繞在他周圍。CSS屬性裡批定 position:static,將按預設的文件流定位節點,也就是前面幾節講的塊節點自上向下流,而內聯節點自左向右流動。所以這是節點的預設position屬性( 不指點position屬性他的值預設就是 static )看一個簡單的原始碼。

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“按預設文件流定位( position:static )”)

winform。add( )

/*}}*/

import web。form;

var wb = web。form( winform );

wb。html =/**

div#main-box{
border:blue 1px solid;
margin-top:20px;
padding:10px;
width:300px;
}
div#main-box div{
border:green 1px solid;
width:100%;
height:100px;
}

a

b

c

d

**/

winform。show();

win。loopMessage();

塊節點自左上角開始,自上向下流動,顯示效果如下:如果在節點的CSS屬性中指定 position:absolute; 則節點會脫離預設的文件流並使用絕對座標定位。絕對座標指的是:left指定左座標,top指定頂座標,right指定右座標,bottom指定底座標,如果僅指定right,top屬性則是相對於最 近的一個position為relative或absolute的父元素進行定位(預設為 body 節點,也就是相對於頁面左上角定位)。使用前面一節的示例程式碼,我們為 div#main-box 節點加上下面的CSS:

原始碼 [ CSS ]

div#main-box {

position :absolute ;/*使用絕對定位*/

right :120px ;/*右座標為120畫素*/

top :50px ;/*頂座標為50畫素*/

}

修改後的完整原始碼如下:

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“絕對定位( position:absolute )”)

winform。add( )

/*}}*/

import web。form;

var wb = web。form( winform );

wb。html =/**

div#main-box{
border:blue 1px solid;
margin-top:20px;
padding:10px;
width:300px;
position:absolute;/*使用絕對定位*/
right:120px;/*右座標為120畫素*/
top:50px;/*頂座標為50畫素*/
}
div#main-box div{
border:green 1px solid;
width:100%;
height:100px;
}

a

b

c

d

**/

winform。show();

win。loopMessage();

顯示效果如下:注意absolute並不一定是相對body的左上角定位,他會向上查詢最近的一個position為relative或absolute的父元素作為座標參考點。請執行下面的示例程式碼:

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

winform = win。form(text=“position定位測試”;right=599;bottom=399;)

/*}}*/

import web。layout;

wbLayout = web。layout(winform);

wbLayout。html =/***

絕對定位

***/

winform。show()

win。loopMessage();

執行後的效果如下:注意看 藍色邊框的#b 節點是相對紅色邊框 #a節點定位( #a節點的樣式中定義了 position:relative ),並非是相對body節點。如果去掉 #a節點樣式中的 position:relative 結果就不一樣了。程式碼如下:

原始碼 [ HTML ]

絕對定位

這時候#b節點就是相對body定位,執行後的效果如下:position:absolute 還帶來一個好處,使用 absolute定位的節點在樣式中也可以使用 z-index 調整節點在Z軸上的順序( 也就是節點的前後重疊順序、或者叫Z序 ), 而 psition:static 的節點不支援 z-index。節點的CSS屬性裡指定 position:relative 則使用相對定位,相對定位與絕對座標類似,可以使用 left,top,bottom,right 等指定座標,不同的是節點並不會脫離原來的文件流,座標只是相對他原來應當顯示的位置。

注意,所謂相對座標 - 不是指相對於他父節點的座標值。

一個節點在標準的文件流中,他預設應當顯示在哪個位置 - 這就是相對座標的參考值。請看下面的示例:

原始碼 [ AAuto ]

import win。ui;

/*DSG{{*/

var winform = 。。win。form( bottom=555;scroll=1;right=511;text=“相對定位( position:relative )”)

winform。add( )

/*}}*/

import web。form;

var wb = web。form( winform );

wb。html =/**

div#main-box{
border:blue 1px solid;
margin-top:20px;
padding:10px;
width:300px;
}
div#main-box div{
border:green 1px solid;
width:100%;
height:100px;
position:relative ;/*使用相對定位*/
right:20px;/*相對於自己原來的位置偏移20畫素*/
top:50px;/*相對於自己原來的位置偏移50畫素*/
}

a

b

c

d

**/

winform。show();

win。loopMessage();

執行程式碼後網頁顯示效果如下:節點首先按標準的文件流移動到他本應該顯示的位置,然後再相對移動指定的座標值。相對座標 並不是相對父節點的座標,而是 相對他自己原來位置的座標-這是容易混淆的一個地方。如果需要 相對父節點的進行絕對定位,那就要象上一節所講的,首先把父節點的樣式加上 position:relative; 然後把自己的樣式加上 position:absolute;

  • 顶部