這篇文章,算是我在 CSS 的學習中,一個段落的結束。其實 CSS 是非常有趣且多變的,多看看國內外一些利用 CSS 製作出來的優等網站,你就會了解 CSS 有多麼強大。這裡,我將以「樂多 Blog 」的版型製作,作為這篇文章的主題。在這之前,建議您先看看之前我所寫的 CSS 排版觀念系列文章。
第一步 了解頁面結構
要化粧前,也得先知道自己的臉屬於何種性質;同理我們也得先掌握樂多的 Blog 的頁面結構 (DOM) 。
檢視自己的樂多 Blog 首頁原始碼,你就可以看到以下的結構:

每個色塊都是一個 DIV ,而這裡我直接用 CSS 的表示法來標示 DIV 的 ID 。
再來我們分析 #content 和 #links ,如下圖:


一樣地,我用 CSS 表示法來標示每個區塊的 CLASS 屬性。
#content 就是我們的 Blog 記事區,而 #links 則是功能選單的集合體,這裡我們暫時不對細部的區塊作討論。
第二步 決定版型
沒有適當的動線規劃及版面設計,再豐富的網站內容也是枉然。在決定我們的 Blog 要長什麼樣子之前,應該要思考如何讓瀏覽者能夠方便地操作你所提供的功能。另外,一個好的視覺設計也是必要的,除非你想標新立異,那麼舒服的色系及精緻的版面都是你應該要追求的。
不過這裡我不多談如何設計這些視覺上的效果,畢竟我並非設計系出身;相關的知識可以請教身邊有美術涵養的高手們,他們會給你很好的建議。
這裡我決定實作全版面兩欄式的版型,其中 #container 及 #content 的寬度會隨著瀏覽視窗大小作動態調整,而 #links 則是固定寬度且靠在視窗右邊,如下圖:

至於背景圖的部份,就請大家自行發揮天份製作囉。
第三步 用 CSS 製作初步的畫面
首先,我們要把 body 和 #container 設定好,如下:
1 2 3 4 5 6 7 | |
首先我們將 html 和 body 的邊界設為 0 ,然後再把 #container 的寬度設為 100% 。
(註:你可以在建構版型時,利用背景色來讓自己知道區塊跑到哪兒去了。)
接下來,我們指定 #banner 的高度:
1 2 3 | |
這裡我假設背景圖的高度是 80px ,當然你可以視需要自行更改。
然後我們利用浮動技巧,將 #content 放到左邊, #links 放到右邊。我們不指定 #content 的寬度,因為它會變動。我們僅需要固定住 #links 的寬度即可 (假設為 200px ) 。
1 2 3 4 5 6 7 | |
咦?為什麼還是沒有效果? #links 並沒有跑到 #content 的右邊?而是跑到 #content 的右下方去了:

這是因為現在 #content 的內容區寬度是 100% ,所以 #links 被 #content 擠了下來。解決的方式是把 #links 的 margin-left 指定為負值,讓它往左拉回 200px :
1 2 3 4 5 | |
好啦,現在版面變成這樣:

呃…可是 #content 的內容和 #links 的內容疊在一起了,怎麼辦?很簡單,我們用 padding-right 把 #cotent 的內容往左擠進來:
1 2 3 4 | |
#footer 因為 #content 和 #links 浮動的關係,自動跑到上面來了。我們只要設定:
1 2 3 4 | |
雖然 IE 不用設定就會正常 (其實是不正常) ,但是為了其他瀏覽器,一定要設定。
好啦,現在實際上的完整版面會變成這樣了:

#content 的可視寬度其實是和 #container 的內容區寬度一樣為 100%,虛線部份才是 #content 的內容區。
有幾點要注意:
- #content 的內容寬度不可過長,不然會讓 #links 往下掉。
- #footer 不一定會在 #content 下方出現,這要看 #content 和 #links 哪個元素較高而定。
- #banner 、 #content 、 #links 、 #footer 屬於結構元素,所以除非必要,否則它們的 margin 、 padding 都應該要設成 0px ( DIV 預設值) 。
- 如果要讓 #links 和 #content 左右對調,那麼就把 #content 和 #links 的 float 、 padding 和 margin 中之 left 改成 right , right 改成 left 。
- 配合這篇「如何正確實作出固定寬度且置中的版型」,只要更動 body 和 #container 的樣式,你就可以讓這個版型置中囉。
完整的 CSS 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
第四步 裝飾其他部份
當然,上面的步驟只是把主要的版面結構定下來,裡面的彩妝還沒完成。礙於我的藝術涵養,就靠大家自行設計喜歡的樣式囉。不過還是有一些東西分享給大家。
前面我在這篇「拆開你的 CSS 吧!」提到 CSS 維護的觀念,在我們把上面主要的結構定義好後,就可以利用外部的 CSS 檔來裝飾其他部份。例如我們可以建立一個 banner.css ,然後把 #banner 裡相關的 CSS 設定在這裡:
banner.css
1 2 3 4 5 6 7 8 9 10 11 | |
然後在 site.css 裡把它給 import 進來,這樣一來只要更換不同的 site.css 或 banner.css ,就能夠隨心所欲地更換樣式或版型。
而細部的部份呢?像是 #content 裡的 .date 和 .blogbody ?一樣的方式,我們建立一個 content.css ,然後在裡面設定 .date 和 .blogbody 的樣式就可以了。
第五步 CSS 放在哪裡?
在第四步時我們建立了一堆 CSS 檔,那麼應該放在哪裡才能讓網頁讀到它們呢?
其實 @import 指令可以接受外部的 url ,因此在你找到空間並上傳這些 CSS 檔案以後,可以在你的 site.css 上方寫這樣的指令:
1
| |
這樣一來就能讓你的 site.css 引入外部 CSS 樣式了。
補述 (IE 的 Bug)
不知道大家有沒有發現,如果 #links 的內容長於 #content 的內容時,在 IE 上面預覽的話,會發現 #footer 竟然是貼在 #content 的下方,如下圖:

這是 IE 的 Bug ,說實在的,也令人非常討厭。這時上面的 CSS 我們就得做點修正,方法是讓 #content 和 #links 都向左浮動。當然,如果要反過來讓 #links 在 #content 的左方,那麼就把這兩者都向右浮動。這樣一來,在大多數的瀏覽器上都能夠正常顯示了。
補述 (固定寬度置中的版型)
在固定寬度置中的版型裡,我們要額外指定 #content 的寬度,例如:
1 2 3 4 5 | |
為什麼呢?因為我發現多數瀏覽器沒辦法很正確判斷出 #content 內容區應有的寬度,因此就得指定 #content 內容區的寬度。至於技術細節,就請知道的網友告知一下吧。
結語
雖然這裡提供的 CSS 並不能真正用在實務上,但是它俱備了多數 CSS 排版的基礎觀念。因此大家只要了解這些原理以後,相信往後一定能創造更優秀的版型來