使用 CSS 创建固定宽度的布局

css|创建

我最近的几篇专栏文章讨论了使用 XHTML 和 CSS 实现两列或三列页面布局的各个方面。到目前为止,所有例子都使用流式布局(也就是布局会自动扩展和适应浏览器窗口的宽度)。现在是时候考虑另外一种主要的页面布局方法了,这种布局方法是固定宽度布局。

很多 Web 构建人员倾向于使用固定宽度的布局进行页面设计,因为它们能生成精确且可预知的结果。这种方法与打印布局非常接近,对于设计人员和访问者来说都是一个很重要的舒适因素;另外,对于包含很多大图片和其它元素的内容,由于它们在流式布局中不能很好地表现,因此固定宽度布局也是处理这种内容的最好方法。

从table 到 div

近年来,设计人员都使用表(table)来创建固定宽度的布局。表的列和行是对设计人员的布局表格(grid)的一种可行的模拟,所以一点也不奇怪设计人员为什么采用 HTML 表来完成页面布局。

  
然而,基于表的布局有一个明显的问题。除了语义上不适合用表来进行布局之外,产生的代码也很混乱,难于阅读,甚至难于维护——尤其是在包含合并的表单元格(cell)和嵌套表时。

使用 div 进行页面布局效果要好得多。除了这是推荐使用的最佳方法之外,代码的装载速度会更快,也更易于处理。

表及其单元格的格式(formatting)属性被借用到固定宽度布局中,因为指定这些元素的尺寸相当简单。其实通过 div 可以做到同样的事情,只要确定 div 精确的维数并使用绝对和相对定位将这些 div 定位到页面上即可。

图 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 是在图 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 创建居中页面布局)”一文中有详细的解释。

----------------------------------
本文作者:Michael Meadhra 在Web 发展的最初阶段就在这一领域从事开发。他参与编著的书已累积几十本,包括由Osborne/McGraw-Hill出版的《How to Do Everything with Dreamweaver MX 2004》。

时间: 2024-08-30 17:38:53

使用&nbsp;CSS&nbsp;创建固定宽度的布局的相关文章

使用 DIV+CSS 创建固定宽度的布局

css|创建 我最近的几篇专栏文章讨论了使用 XHTML 和 CSS 实现两列或三列页面布局的各个方面.到目前为止,所有例子都使用流式布局(也就是布局会自动扩展和适应浏览器窗口的宽度).现在是时候考虑另外一种主要的页面布局方法了,这种布局方法是固定宽度布局. 很多 Web 构建人员倾向于使用固定宽度的布局进行页面设计,因为它们能生成精确且可预知的结果.这种方法与打印布局非常接近,对于设计人员和访问者来说都是一个很重要的舒适因素:另外,对于包含很多大图片和其它元素的内容,由于它们在流式布局中不能很

使用 CSS 创建固定宽度的布局

css|创建 我最近的几篇专栏文章讨论了使用 XHTML 和 CSS 实现两列或三列页面布局的各个方面.到目前为止,所有例子都使用流式布局(也就是布局会自动扩展和适应浏览器窗口的宽度).现在是时候考虑另外一种主要的页面布局方法了,这种布局方法是固定宽度布局. 很多 Web 构建人员倾向于使用固定宽度的布局进行页面设计,因为它们能生成精确且可预知的结果.这种方法与打印布局非常接近,对于设计人员和访问者来说都是一个很重要的舒适因素:另外,对于包含很多大图片和其它元素的内容,由于它们在流式布局中不能很

使用CSS创建固定宽度的布局

css|创建 我最近的几篇专栏文章讨论了使用 XHTML 和 CSS 实现两列或三列页面布局的各个方面.到目前为止,所有例子都使用流式布局(也就是布局会自动扩展和适应浏览器窗口的宽度).现在是时候考虑另外一种主要的页面布局方法了,这种布局方法是固定宽度布局. 很多 Web 构建人员倾向于使用固定宽度的布局进行页面设计,因为它们能生成精确且可预知的结果.这种方法与打印布局非常接近,对于设计人员和访问者来说都是一个很重要的舒适因素:另外,对于包含很多大图片和其它元素的内容,由于它们在流式布局中不能很

用网页标准DIV+CSS创建固定宽度的网页布局

css|标准|创建|网页 用 XHTML 和 CSS 实现两列或三列页面布局的各个方面.到目前为止,所有例子都使用流式布局(也就是布局会自动扩展和适应浏览器窗口的宽度).现在是时候考虑另外一种主要的页面布局方法了,这种布局方法是固定宽度布局. 很多 Web 构建人员倾向于使用固定宽度的布局进行页面设计,因为它们能生成精确且可预知的结果.这种方法与打印布局非常接近,对于设计人员和访问者来说都是一个很重要的舒适因素:另外,对于包含很多大图片和其它元素的内容,由于它们在流式布局中不能很好地表现,因此固

网页制作学习:用CSS创建三栏页布局

css|创建|网页 三栏布局是目前最常见的网页布局,主要页内容放在中间一栏,边上的两栏放置导航链接之类的内容.基本布局一般是标题之下放置三栏,三栏占据整个页面的宽度,最后在页的底端放置页脚,页脚也占据整个页面宽度. 绝大多数网页设计者都熟悉传统的网页设计技术,用这些技术可以生成带有表格.创建固定宽度布局或者"液态"(它可以根据用户浏览器窗口宽度自动伸缩)布局的网页. 现在,我们都开始抛弃基于表格的布局技术,许多网络设计者正在从XHTML标记和CSS格式这一新范例中寻找创建三栏布局的方法

用CSS的float属性创建三栏布局网页的方法

  三栏布局是最常见的网页布局,主要页内容放在中间一栏,边上的两栏放置导航链接之类的内容.基本布局一般是标题之下放置三栏,三栏占据整个页面的宽度,最后在页的底端放置页脚,页脚也占据整个页面宽度.本文介绍一种用CSS的float和clear属性来获得三栏布局的方法. 绝大多数网页设计者都熟悉传统的网页设计技术,用这些技术可以生成带有表格.创建固定宽度布局或者"液态"(它可以根据用户浏览器窗口宽度自动伸缩)布局的网页. 基本方法 基本的布局包含五个div,即标题.页脚和三栏.标题和页脚占据

DIV+CSS创建三栏网页布局方法介绍

三栏布局是目前最常见的网页布局,主要页内容放在中间一栏,边上的两栏放置导航链接之类的内容.基本布局一般是标题之下放置三栏,三栏占据整个页面的宽度,最后在页的底端放置页脚,页脚也占据整个页面宽度.        绝大多数网页设计者都熟悉传统的网页设计技术,用这些技术可以生成带有表格.创建固定宽度布局或者"液态"(它可以根据用户浏览器窗口宽度自动伸缩)布局的网页.     现在,我们都开始抛弃基于表格的布局技术,许多网络设计者正在从XHTML标记和CSS格式这一新范例中寻找创建三栏布局的方

用CSS创建一个布局居中的页面

css|创建|页面 最近有一个读者问到,怎样用CSS创建一个居中的页面布局.该读者所追求的,是要达到这样一种效果,就如同在一个1024象素宽的页面上设计出一个800象素宽的表格.这是一种使用很广泛的页面设计方法,按照传统,它要靠嵌套表格才能达到这一效果,因此,这位读者追寻一种用CSS来达到这一效果的方法并不让人惊讶. 用CSS来创建一个居中的页面设计的基本技术相对来说较简单,不过与同类相比,也简单不了太多.让我们看一下,要将这种由来已久的基于表格的设计转变成用CSS,该怎样做. 传统的做法:居中

CSS创建各栏同高的多栏布局

css|创建 关于我的个人网站被问到最多的问题是: 你是怎么让右边这一栏的背景色一直向下扩展的? 这确实是个很简单的问题,也许你也已经相当熟悉,但很多人还不知道.下面介绍的技术是一个简捷的小技巧,它一定可以帮助你解决这个头痛的问题. 垂直伸展 CSS有一些多少让人感到沮丧的特性,比如元素在垂直方向上只按照它确实需要的长度来伸展.也就是说,如果把一个200像素高的图片放在一个<div>中,这个<div>只会伸展到200像素高. 当你用<div>把你的标签分开(译者按,指结