一个固定宽度的例子
图A
图A展示了一个典型的固定宽度的布局,该布局由顶部的一个标题,一个三列内容的区域(主内容列,每侧有一个工具条),和页面底部的一个页脚所组成。所有元素的宽度都是固定的;在浏览器窗口发布变化时它们的尺寸都不会变化。
下面的 XHTML 标记生成图 A 所示的页面。(出于简单考虑,内容被截短。)
以下为引用的内容:
<body>
<div id="head"> <h1>header</h1> </div> <div id="columns"> <div id="side1"> <h3>side1</h3> <ul> <li>Let me not to the marriage of true minds</li> <li>Admit impediments; love is not love</li> <li>Which alters when it alteration finds</li> <li>Or bends with the remover to remove</li> <li>Oh, no, it is an ever fixed mark</li> </ul> </div> <div id="content"> <h2>main content</h2> <p>That looks on tempests ... his height be taken.</p> <p>But bears it out ... alteration finds.</p> <p>Whose worth's unknown, ... the remover to remove.</p> </div> <div id="side2"> <h3>side2</h3> <ul> <li>Let me not to the marriage of true minds</li> <li>Admit impediments; love is not love</li> <li>Which alters when it alteration finds</li> </ul> </div> </div> <div id="foot"> <h3>footer</h3> <p>Or bends with ... height be taken. </p> </div> </body> |
下面是将页面设计为固定宽度布局的 CSS 代码。
以下为引用的内容: body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; margin: 0px; padding: 0px; } h2,h3 { margin-top: 0px; padding-top: 0px; } div#head { position: absolute; width:750px; height:100px; left:0px; top: 0px; background-color: #FFFF66; } div#columns { position: relative; width: 750px; top: 100px; background-color: #CCCCCC; } div#side1 { position:absolute; width:150px; top: 0px; left:0px; background-color: #FF6666; } div#content { position: relative; width: 450px; top: 0px; left: 150px; background-color: #999999; } div#side2 { position:absolute; width:150px; top: 0px; left: 600px; background-color: #00FF66; } div#foot { position: relative; width: 750px; clear: both; margin-top: 100px; background-color: #99FFFF; } |
分解代码
这段标记并不是特别地值得注意——只是在每个主要页面元素的外面(标题、页脚、工具条和主内容)包围着 div。每个 div 有一个 id,相应的 CSS 样式可以使用这个 id 引用它。只有一个额外的 div(div id="columns")包围着三列内容区域。在 Internet Explorer 中将页脚放在三列中最长一列的下面是必要的。
像平时用法一样,CSS 代码完成所有的重要任务。首先它完成一些家务管理。Body样式将页面的边距设为零,h2, h3样式将默认间距设为零。否则的话,这该布局周围就会有一个边距,而在某些浏览器(比如 Netscape 和 Mozilla)中标题将会在在主内容和页脚的上面产生一个空白区域。
样式div#head为标题 div 设置一个明确的高度和宽度。标题使用 position: absolute, top: 0px和 left: 0px规则显式地定位在页面的左上角。规则 position: absolute是非常重要的,因为定位属性(top、left、right、bottom)在常规(静态)定位时会被忽略。然而要记住,任何绝对定位的元素都会从常规的页面流中被移除掉,而属于页面流的元素将会像绝对定位元素不存在一样被定位到页面上。
样式 div#columns控制 div 的格式,使其充当三个列的容器。它使用 position: relative创建属于常规页面流的一个元素(它会根据其内容进行扩展和适应,因而影响其它元素的定位),但是它将从其常规位置偏移。规则 top: 100px提供一个偏移量,将列容器向下推,使其覆盖标题。
规则 div#side1控制第一个工具条列的样式。它设置该列的宽度(width: 150px)并使用绝对定位将该列放置在其父元素的左上角。父元素是该列的 div,如果该元素使用相对于 body 元素的相对定位,那么它将解释 top: 0px规则而非你所期望的 100px设置。规则 div#side2以同样的方式设置左工具条所用的列。div#side1和 div#side2唯一不同之处是背景色和 left: 600px规则,后者将该列定位在其它两列的右边。
样式 div#content中的主内容所用的列的样式控制与其它两列的样式控制相似。它显式地设计宽度(width: 450px)并使用 left: 150px和 top: 0px规则在其父元素(包围着三个列的 div)内定位该列。主要的不同之处在于 position: relative规则。我们使用相对定位使主内容列可以影响其父元素(包围着三个列的 div)的尺寸并因此影响页脚元素的尺寸。
样式 div#foot设置页脚的宽度(width: 750px),该样式还包含一个 clear: both规则,该规则保证它接在其它元素下面,而不是旁边。由于它使用相对定位,所以它在页面上的位置是由其它元素的流所决定的,在这里具体是由包围着三个列的 div 所决定的。规则 margin-top: 100px是一个很重要的细节,它防止页脚被上面的列所覆盖。这些列在页面流中从它们的常规位置偏移,从而为绝对定位的标题以及需要相应偏移的页脚腾出空间。
居中样式的变化
在固定宽度页面布局中最常见且主要的变化可能是固定宽度的内容块漂在浏览器窗口的中间,而不是粘附于浏览器窗口的左边。你可以很容易地实现这一效果,方法是在其余标记周围(也就是 body 标签内)添加一个包装器(wrapper)div,并创建一个 CSS 样式来居中那个 div。
图B
例如,图B是在图 A 的基础上添加了一个标签(<div id="wrapper">)和一个相应的 CSS 样式后的结果。下面是新添加的 CSS 样式的代码:
以下为引用的内容:
div#wrapper {
position:relative; margin-left:auto; margin-right:auto; top: 20px; width:750px; background-color: #CCCCCC; } |
这种方法之所以能用,是因为所有的布局 div 都是相对于它们的父元素相对定位的。在图 A 中,标题、内容列和页脚所在 div 的父元素是 body 标签,但是在图 B 中,它们的父元素是 wrapper div。这种居中方法在“Creating a centered page layout with CSS(使用 CSS 创建居中页面布局)”一文中有详细的解释。
转载于:https://blog.51cto.com/fluagen/180352