HTML和CSS的關(guān)鍵:盒子模型(Box model)
互聯(lián)網(wǎng) 發(fā)布時間:2008-10-17 19:25:31 作者:佚名
我要評論

原文:http://jorux.com/archives/property-4-if-you-love-css/
本文作為屬性篇的最后一篇文章, 將講述HTML和CSS的關(guān)鍵—盒子模型(Box model). 理解Box model的關(guān)鍵便是margin和padding屬性, 而正確理解這兩個屬性也是學(xué)習(xí)用css布局的關(guān)鍵.
注: 為什么不翻譯marg
依據(jù)以上解釋, 我們應(yīng)該得到如下效果(Fig. 3):

即ID1的margin-top/bottom=ab=ef=10px;
ID2的margin-top/bottom=bc=de=30px;
但用瀏覽器打開html文件, 卻得到 Example4 的效果, 如下圖(Fig. 4):

即ab=cd=30px, ID1的margin-top/bottom=10px被折疊了, 而且ID1應(yīng)有的margin黑色背景也一同被折疊消失了.
為什么會折疊: 造成以上現(xiàn)象的原因是, 我們在css中并沒有聲明id為ID1的元素div的height(高), 因此它的高便被設(shè)為auto(自動)了. 一旦其值被設(shè)為auto, 那么瀏覽器就會認(rèn)為它的高為子元素ID2的border-top到border-bottom之間的距離, 即Fig. 4中bc的長度, 所以子元素ID2的margin-top/bottom(30px)就伸出到了父元素ID1之外, 出現(xiàn)了Fig. 4中ab與cd之間的空白區(qū)域. 因此父元素ID1的margin-top/bottom因子元素的”紅杏出墻”而被折疊消失了.
如何解決折疊問題: 可能大家最初想到的辦法就是根據(jù)折疊發(fā)生的原因—auto, 來解決問題. 但是, 在實際操作中, 某些元素如div, h1, p等, 我們是不可能預(yù)先知道它的高是多少的, 因此在css文件中是不能常規(guī)通過聲明元素的高來解決折疊問題.
我們需要在css文件中加入如下代碼(紅色部分):
#ID1 {
background-color: #333;
color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
padding-top:1px;
padding-bottom:1px;
}
或是:
#ID1 {
background-color: #333;
color: #FFF;
margin-top: 10px;
margin-bottom: 10px;
border-top:1px solid #333;
border-bottom:1px solid #333;
}
通過增加以上代碼, 便可使瀏覽器重新計算ID1的高, 使其為子元素ID2的margin-top/bottom外緣(outer top/bottom)之間的距離, 即Fig. 3中be的距離.
看得是不是有點迷糊, 折疊問題難度比較大, 它也曾是困擾我多時的難題, 加之本人的敘述說明能力不足, 更加大了大家學(xué)習(xí)的難度, 在此Jorux深表歉意.
為檢驗大家學(xué)習(xí)折疊問題的效果, 給讀者留下一個問題:
html文件代碼為(請將css地址改為你的css文件存放地址):
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html>
<head>
<title>My first homepage</title>
<link rel=”stylesheet” href=”….css” type=”text/css” media=”screen” />
</head>
<body>
<h1 id=”title”>
A title</h1>
<div id=”content”>
Some text here </div>
</body>
</html>
外聯(lián)css文件代碼為:
*{
padding:0;
margin:0;
}
body {
font: 14px/1.5 Georgia, serif;
}
h1#title {
float: right;
width: 50%;
font: 14px/1.5 Georgia, serif;
margin-top: 0;
background-color: #F00;
color: #fff;
}
div#content {
background-color: #333;
color: #FFF;
margin-top: 30px;
border: 1px solid #333;
}
請將此代碼存為css文件, 并與以上html文件關(guān)聯(lián), 得到如 Example5 的效果, 請分別用IE與Firefox瀏覽, 效果不盡相同, IE下的效果是我們想要的, 但用Firefox瀏覽卻發(fā)現(xiàn)元素h1嵌入到元素div中, 你能解決這個Firefox不能正常顯示的問題嗎? 如果可以, 能和剛剛學(xué)過的折疊現(xiàn)象聯(lián)系起來嗎? 請在留言給出你的答案! (Jorux的解釋會在留言中或是下篇文章中給出) [END]
注: 該問題有一定難度, 請讀者量力而行!
至此, 《If you love css …》的屬性篇全部結(jié)束, 下篇將進入《布局篇》.
相關(guān)文章
html中使用margin:0 auto整個頁面不居中的解決方法
div style=margin:0 auto這個屬怎么弄都不能讓頁面居中展示,原因是L-Blog默認(rèn)沒有在HTML前加上DTD,于是IE就以HTML而不是XHTML來解釋文檔2014-04-08- html, address, blockquote, body, dd, div, dl, dt, fieldset, form, frame, frameset, h1, h2, h3, h4, h5, h6, noframes,2008-10-17
- 這篇文章主要介紹了HTML中div嵌套div的margin不起作用的解決方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考2020-07-30