問題討論區


【CSS 語法】文章精華區


【教學】 關於 margin-top 外間距的問題



關於 margin-top 外間距的問題
飛肯老師
註冊日期:
2008/2/24 18:28
留言: 1169

關於 margin-top 外間距的問題 - 會直接影響到上一層

 

 

調整間距

在網頁編排的時候,最常用到的動作就是調整文字元素或圖片元素的間距,要文字下來一點、過去一點、左邊一點... 尤其,有時遇到自稱領導統御型的老版時,見一次調整一次,再見一次又再調整一次....就當作是練身體一樣,每每都弄到讓咱們網頁設計師在心裡狂翻桌。

 

使用 margin 外間距

調整文字元素或圖片元素的外間距,理所當然是要使用 margin 語法,然而,當我們高高興興完成網頁排版,心想趕快收拾包包下班走人時,慘劇往往就發生在各個瀏覽器的不一致問題之中,想下班~ 先搞定每個瀏覽器再說吧~ T^T

 

Step 1

我們使用一個 <div> 然後在裡面放了 <h2> 和 <h5> 兩段文字,範例如下圖所示 ↓


 

Step 2

開啟一個 CSS 檔,為 div 寫上寬度、高度和背景圖片,範例如下圖所示 ↓

 


 

Step 3

上面的 CSS 寫好之後,在 Dreamweaver 內看到的狀況還算正常,範例如下圖所示 ↓

 


Step 4

回到 CSS 再幫 <h2> 和 <h5> 兩段文字調整出我們需要的外間距大小,範例如下圖所示 ↓

第 12 行: 先使用 margin:0; 把原本容易造成誤差的預設間距設為 0 ,如此比較容易在各瀏覽器得到相同的結果。

     HTML 標籤的預設值請參考這一篇「Default style sheet for HTML 4

第 13 行:設定 <h2> 文字與 <div> 的上間距 margin-top:25px;

第 14 行:設定 <h2> 文字與 <div> 的左間距 margin-left:25px;

 


 

Step 5

上面的 CSS 寫好之後,在 Dreamweaver 內看到的狀況,範例如下圖所示 ↓


 

Step 6

等一下為了使用各個瀏覽器測試的時候要示範清楚一點,我們先把 <div> 複製成 4 個,範例如下圖所示 ↓


 

Step 7

使用 IE 瀏覽器來測試看看,結果 OK OK 沒問題,範例如下圖所示 ↓


 

Step 8

使用 Firefox 和 google 瀏覽器來測試看看,結果怎麼差這麼多...... 範例如下圖所示 ↓

馬上召喚 google 大神搜尋一下,果然有很多人也遇到這種問題!

聽說,區塊內的第一個子元素的 margin-top 會被上層的爸爸給搶走,簡單的說,我們這個範例中的 <h2> 文字所設定的 margin-top:25px; 會被 <div> 給搶走了,所以 <h2> 文字本身的上間距沒有了,反而是每個 <div> 都多了上間距.....寫 CSS 果然是咱們網頁設計師鍛練 EQ 的好朋友!

隔天,依然不死心,再召喚 阿茂老師來討論,後來阿茂老師說,除了第一個子元素的 margin-top 會被上層的爸爸 <div> 給搶走之外,還會發生另一個問題,那就是如果 上層的 <div> 本身也有寫 margin-top 的時候,當 <div> 的 margin-top 比下面的第一個子元素 <h2> 的 margin-top 還大的時候,這時 <div> 就會以自己的 margin-top 來呈現上間距,但是 子元素 <h2> 的 margin-top 還是會被搶走,照搶了不誤,但是不會呈現出來,而當 <div> 的 margin-top 比下面的第一個子元素 <h2> 的 margin-top 還小的時候,這時 <div> 就會以搶來的子元素 <h2> 的 margin-top 來呈現上間距.....什麼跟什麼嘛!!

 

這是 W3C 官方規定的規則喔~ 詳細內容請參考 W3C 公佈的 「8.3.1 Collapsing margins

 


 

Step 9

好吧,問題發生都發生了,看來要使出殺手破解法了~

第 13 行:寫上 display:inline-block; 聽說可以解決這個問題,把 margin-top 搶回來,範例如下圖所示 ↓


 

Step 10

使用 Firefox 和 google 瀏覽器來測試看看,結果...哇哈哈哈...正常了, 非要人家下重手才肯聽話,範例如下圖所示 ↓


 

Step 11

其實呢,咱們來回想一下 margin 這傢伙帶來的問題,這可不是頭一遭了~

之前也發生過,當同時使用 float 和 margin 時,在 IE 瀏覽器呈現出來的 marign 就會變成 2 倍大的問題....

還記得嗎,忘記的同學請參考一下這一篇「在 IE 6 同時使用 float 和 margin 時~ 會出問題

 


 

Step 12

該用 margin 還是 padding 來調整間距比較好呢?

在飛肯上課的時候,我常常跟同學說,理論上是要使用 margin 沒有會,但是平時在寫的時候我倒是比較喜歡使用 padding 來調整間距,因為使用 padding 排版出來的結果會是相同的,不會出什麼問題,而且在每一個瀏覽器也都可以一模一樣,漸漸的就比較少使用 margin 來調整間距,使用 margin 比較會出問題,基於懶人手則之懶~懶~懶~ 別想這麼多,大多時候就都使用 padding 吧~

 

第 13 行、第 14 行 都改用 padding 來做,結果是 OK 的啦~~ 範例如下圖所示 ↓

margin-top 版範例預覽】【範例下載

padding-top 版範例預覽】【範例下載

 

CSS 的排版技巧日新月異,一直都會有新的技巧出現,如果同學有發現更好的解決方法,可以來這兒分享給大家喔!

感謝~

 

 


2011/1/17 20:49
 


回覆: 關於 margin-top 外間距的問題
會員一級
註冊日期:
2011/4/30 23:17
留言: 1
我用的方法是在搶走子元素的父元素上增加overflow:hidden。

因為除了第一個子元素margin-top會有被搶走的問題,最後一個子元素的margin-bottom也會有同樣的狀況。之前的專案因為內容的部份需要給使用者輸入,無法預測第一個子元素跟最後一個子元素是誰。所以直接在沒有設定高度的父元素上加overflow:hidden的彈性會比較大。

2011/4/30 23:22
 


回覆: 回覆: 關於 margin-top 外間距的問題
飛肯老師
註冊日期:
2008/2/24 18:28
留言: 1169
喔喔喔! 原來還有這一招 overflow:hidden

感謝分享




2011/5/1 12:55
 









[高級搜索]


 

課程首頁】 【最新開課時間表】 【範例教學分享區】 【交流討論區】 【企業包班】 【詢問課程】 【合作提案】 【誠徵講師

 

【飛肯設計學苑】 台北市公園路 30-1 號 5 樓 聯絡電話:(02)2370-1122 / 0925-014-000 信箱:flycan@flycan.com.tw
服務時間:(平日)下午 2 點 ~ 晚上 10 點 / (假日)早上 9 點 ~ 下午 5 點

 

台北市短期補習班立案 第 6631 號

TOP

【 Flycan.com 】 Powered by XOOPS