14.1 “1-2-1”变宽度网页布局


在上一章中,对固定宽度的页面布局傲了比较深入地分析和讲解。在本章中,将对变宽度的页面布局做进一步的分析。变宽度的布局要比固定宽度的布局复杂一些,根本的原因在于,宽度不确定,导致很多参数无法确定。因此.必须使用一些技巧来完成。

这里将介绍一些国外的CSS领域著名的设计师的研究成果,并对变宽度网页布局的总体情况进行归纳。希望读者能够保持清晰的思路,这样在实际工作中遇到具体的案例时,就可以灵活地选择解决方法。lodidance.com

“1-1-1”布局过于简单,因此这里就不再介绍了。我们从“1-2-1”布局开始,逐步向读者展示更为复杂的布局结构,并逐步归纳出普遍的通用解决方案。

对于变宽度的布局.首先要使内容的整体宽度随浏览器窗口宽度的变化而变化。因此,中间的container容器中的左右两列的总宽度也会变化,这样就会产生不同的情况。这两列是按照一定的比例同时变化,还是一列固定,另一列变化。这两种情况都是很常用的布局方式。下面先从等比例方式讲起。

注意:在分列情况下,某一列有可能是固定宽度的,也可能是变化宽度的。因此为了方便区分,这里再修订一下布局的表达方法,这样对于网页学习网CSS教程资源中的文件命名也会比较方便。规定为,对于并列的若干列,如果某一列是固定列,就用字母“f”(英文单词fixed的第一个字母)表示;如果某一列是变宽的列,就用字母“l”(英文革词“liquid”的第一个字母)表示。

例如,如果某一个“1-2-1”布局中两列并排,左边的是固定宽度列,右边的是变化宽度的列,那么这种布局记作“1-(f-l)-1”。

再例如,如果某一个“1-3-1”布局中3列并排,左右两边的是固定宽度列,中间的是变化宽度的列,那么这种布局记作“1-(f-l-f)-1”。

本教程CSS资源中的案例采用了这种方法命名,读者一看就可以知道是如何布局的了。

一、“1-2-1”等比例变宽布局

首先实现按比例的适应方式,如图1所示。在这个页面中,网页内容的宽度为浏览器窗口宽度的85%.页面中左侧的边栏的宽度和右侧的内容栏的宽度保持1:2的比例,可以看到无论浏览器窗口宽度如何变化,它们都等比例变化。

本案例的文件位于网页学习网CSS教程资源的“第14章\1-2-1\1-(l+l)-1-absolute.htm”和“第14章\1-2-1\1-(l+l)-1-float.htm”。翦者使用“绝对定位法”制作,后者使用“浮动法”制作。


图1 “1-2-1”等比例布局

我们将在前面制作的“1-2-1”浮动布局的基础上完成本案例。原来的“1-2-1”浮动布局中的宽度都是用像素数值确定的固定宽度,下面就来对它进行改造,使它能够自动调整各个模块的宽度。

实际上只需要修改3处宽度就可以了。代码如下。

折叠展开CSS 代码复制内容到剪贴板

  1. #content{
  2. float:rightright;
  3. width:760px; /*删除原来的固定宽度*/
  4. width:85%; /*改为比例宽度*/
  5. }
  6. #content img{
  7. float:rightright;
  8. width:500px; /*删除原来的固定宽度*/
  9. width:66%; /*改为比例宽度*/
  10. }
  11. #side{
  12. float:left;
  13. width:300px; /*删除原来的固定宽度*/
  14. width:33%; /*改为比例宽度*/
  15. }

经验:container等外层div的宽度设置为83%是相对浏览器窗口而盲的比例;而后面content和side这两个内层div的比例是相对于外层div而言的。这里分别设置为66%和33%,二者相加为99%.而不是l00%。这是为了避免由舍入误差造成总宽度大于它们的容器的宽度,而使某个div被挤到下一行中。如果洗完精确,写成99.9%也可以。

这样就实现了各个diV的宽度都会等比例适应浏览器窗口。这里需要注意两点。

(1) 确保不要使一列或多个列的宽度太大,以至于其内部的文字行宽太宽.造成阅读困难。

(2) 我们制作的每一个圆角框都是使用前面介绍的方法制作的,由于用这种方法制作的圆角框的最宽宽度有限制,因此如果超过此限度就会出现裂缝。

针对上述第2点,解决的办法是,如果确实希望某一个分栏要这么宽,就修改背景图片。只需要修改5个图像中的left-top.gif,使它的覆盖范围更大就可以了。

如果并不需要这么宽,就可以对最大宽度进行限制。也就是说,当浏览器口超过一定宽度时,即使变得再宽,其内容也不再继续扩展。这需要用到前面制作“魔术布局”时介绍的max-width属性。同理.如果一个分栏过窄,视觉效果也会不好,因此也可以通过min-width属性限制最窄宽度。代码如下。

折叠展开CSS 代码复制内容到剪贴板

  1. #header,#pagefooter,#container{
  2. margin:0 auto;
  3. width:85%;
  4. min-width:500px;
  5. max-width:800px;
  6. }

前面在讲解“魔术布局”的时候提到过,这个方法存在一个问题,即IE 6不支持min-width和max-width这两个属性。同时给出了解决方法,即使用一个JavaScript小程序即可。在HTML的head部分加入如下语句,并将minmax.js文件保存到和页面同一个文件夹中即可。

折叠展开XML/HTML 代码复制内容到剪贴板

  1. <!--[if lte IE 6]>
  2. <script type="text/javascript" src="minmax.js"></script>
  3. <![endif]-->

二、“1-2-1”单列变宽布局

在上面的例子中,当宽度变化时,各个部分的宽度都会变化,且它们之间的比例保持不变。实际上,只有单列宽度变化,而其他保持周定的布局可能会更实用。一般在存在多个列的页面中,通常比较宽的一个列是用来放置内容的,而窄列放置链接、导航等内容,这些内容一般宽度是固定的,不需要扩大。因此如果能把内容列设置为可以变化,而其他列固定,会是一个很好的方式。

例如在图2中,右侧的Side Bar的宽度固定,当总宽度变化时,Page Content部分就会自动变化。


图2 “1-2-1”单列变宽布局

如果仍然使用简单的浮动布局,是无法实现这个效果的,如果把某一列的宽度设置为固定值,例如200像素,那么另一列(即活动列)的宽度就无法设置了。因为总宽度未知,活动列的宽度也无法确定,那么怎么解决呢?

这里仍然给出两种方法,首先介绍比较容易理解的“绝对定位”法,然后再对“浮动”法进行改造。

1.“绝对定位”法

在前面讲解固定的“1-2-1”布局时,我们除了使用浮动之外,还使用绝对定位实现过的“1-2-1”布局,现在就以该方案为基础来实现单列适应宽度的制作方法,代码如下。

本案例的文件位于网页学习网CSS教程资源的“第14章\1-2-1\1-(l+f)-1-absolute.htm“。

折叠展开CSS 代码复制内容到剪贴板

  1. #header,#pagefooter,#container{
  2. margin:0 auto;
  3. width:85%;
  4. }
  5. #container{
  6. position:relative; }
  7. #content{
  8. margin:0 300px 0 0;
  9. }
  10. #content img{
  11. float:right;
  12. }
  13. #side{
  14. position:absolute;
  15. top:0;
  16. right:0;
  17. width:300px;
  18. }

对上面的代码原理进行分析如下。

(1) 总宽度还是设置为85%,这样总宽度会随浏览器窗口变化。

(2) 将container的position属性设置为relative,使它成为container里面的列的定位基准。

(3) 使side列成为绝对定位,并紧贴container的右侧,宽度设为固定值300像素。

(4) 设置conient列的右侧margin,使它不会与side列重叠。

这样,就实现了单列固定的布局样式。但是前面提到过这种方法有一个同有的缺陷,也就是绝对定位的列将脱离标准流,从而它的高度将不会影响container的高度。这样页脚部分的位置只由content列的高度确定,而当窗口在变化宽度的时候,有可能会使固定宽度列的高度大于活动宽度列的高度,这时就会使固定宽度列与页脚部分重叠。

因此,使用这种方法的时候,要注意保证变宽度列的高度是最高的,就不会发生重叠的现象了。由于HTML代码没有变化,因此这里就不再罗列HTML代码了。

2.“改进浮动”法

现在考虑,使用浮动的方法,实现的困难在哪里。核心问题就是浮动列的宽度应该等于“100%-300px”,而CSS显然不支持这种带有加减法远算的宽度表达方法。但是通过margin可以变通地实现这个宽度。实现的原理是在content的外面再套一个div,使它的宽度为l00%.也就是等于container的宽度。然后通过将左侧的margin设置为负的300像素,就使它向左平移了300像素。再将content的左侧margin设置为正的300像素,就实现了“100%-300px”这个本来无法表达的宽度。

CSS样式代码如下,本案例的文件位于本书光盘的“第14章\1-2-1\1-(l+l)-1-float.htm”。

折叠展开CSS 代码复制内容到剪贴板

  1. #header,#pagefooter,#container{
  2. margin:0 auto;
  3. width:85%;
  4. min-width:500px;
  5. max-width:800px;
  6. }
  7. #content{
  8. float:right;
  9. width:66%;
  10. }
  11. #content img{
  12. float:right;
  13. }
  14. #side{
  15. float:left;
  16. width:33%;
  17. }
  18. #pagefooter{
  19. clear:both;
  20. }

注意,最核心的一点是在活动宽度列(即这里的content)外面又套了一层div.其id设置为contentWrap。中文的意思是content的“包装”,即它把content包裹起来。lodidance.com

contentWrap的宽度设置为100%宽度.同时将右侧的margin设置为“-300px”。注意这里是负值,即向左平移了300像素,并设置为向左浮动。content在它的里面,以标准流方式存在,将它的左侧margin设置为300像素,这样就可以保证里面的内容不会溢出到布局的外面。

这种方法的本质就是实现了content列的“100%-300像素”的宽度,确实非常巧妙。

这种方法的最大好处就是可以不用考虑各列的高度,通过设置页脚的clear属性,就可以保证不会发生重叠的现象。代码如下。

折叠展开XML/HTML 代码复制内容到剪贴板

  1. <body>
  2. <div id="header">
  3. <div class="rounded">
  4. <h2>Page Header</h2>
  5. <div class="main">
  6. </div>
  7. <div class="footer">
  8. <p>
  9. 查看详细信息>>
  10. </p>
  11. </div>
  12. </div>
  13. </div>
  14. <div id="container">
  15. <div id="content">
  16. <div class="rounded">
  17. <h2>Page Content 1</h2>
  18. <div class="main">
  19. <p>
  20. 对于一个网页设计者来说,HTML语言一定不会感到陌生,因为它是所有网页制作的基础。但是如果希望网页能够美观、大方,并且升级方便,维护轻松,那么仅仅HTML是不够的,CSS在这中间扮演着重要的角色。</p>
  21. </div>
  22. <div class="footer">
  23. <p>
  24. 查看详细信息>>
  25. </p>
  26. </div>
  27. </div>
  28. <div class="rounded">
  29. <h2>Page Content 2</h2>
  30. <div class="main">
  31. <img src="images/cup.gif" width="128" height="128" />
  32. <p>
  33. 对于一个网页设计者来说,HTML语言一定不会感到陌生,因为它是所有网页制作的基础。但是如果希望网页能够美观、大方,并且升级方便,维护轻松,那么仅仅HTML是不够的,CSS在这中间扮演着重要的角色。本课从CSS的基本概念出发,介绍CSS语言的特点,以及如何在网页中引入CSS,并对CSS进行初步的体验。</p>
  34. </div>
  35. <div class="footer">
  36. <p>
  37. 查看详细信息>>
  38. </p>
  39. </div>
  40. </div>
  41. </div>
  42. <div id="side">
  43. <div class="rounded">
  44. <h2>Side Bar 1</h2>
  45. <div class="main">
  46. <p>
  47. 对于一个网页设计者来说,HTML语言一定不会感到陌生,因为它是所有网页制作的基础。但是如果希望网页能够美观、大方,并且升级方便,维护轻松,那么仅仅HTML是不够的,CSS在这中间扮演着重要的角色。CSS的功能十分强大而又灵活。</p>
  48. </div>
  49. <div class="footer">
  50. <p>
  51. 查看详细信息>>
  52. </p>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <div id="pagefooter">
  58. <div class="rounded">
  59. <h2>Page Footer</h2>
  60. <div class="main">
  61. <p>
  62. 这是一行文本,这里作为样例,显示在布局框中。
  63. </p>
  64. </div>
  65. <div class="footer">
  66. <p>
  67. 查看详细信息>>
  68. </p>
  69. </div>
  70. </div>
  71. </div>
  72. </body>

CSS布局中的很多方法都是一些非常杰出的设计帅的研究成果,正是他们不断地探索,才想出了很多非常好的方法,这里列举几篇非常重要的文章题目,这些设计师和他们的文章都极大地影响了Web设计和开发技术的发展。

● Ryan Brill:《Negative margins technique》

● Alex Robinson:<Any Order Columns)

● Eric Meyer:《Multi-unit Any Order Colums》

如果读者有兴趣,可以到互联网上找到这些文章,仔细研究。

前面介绍了按比例的宽度适应方法,以及单列宽度适应的制作方法。它们都是基于“1-2-1”布局来做的,制作3列布局或者更为复杂布局的页面的方法也是一样的。

点击下载第8~17章CSS教程资源 返回《CSS教程布局之道》教程列表

编辑:网页学习网
本文地址:http://www.lodidance.com/css/jc/946.html

14.1 “1-2-1”变宽度网页布局,布布扣,bubuko.com

时间: 2025-01-01 22:46:01

14.1 “1-2-1”变宽度网页布局的相关文章

(14)网页布局剖析与制作(下)

本篇学习资料主要讲解:       以变宽度的网页布局进行深入剖析,{以浏览器窗口为基准 或者 以父级div为基准}. 变宽度的布局要比固定宽度的布局复杂一些,原因是宽度不确定,导致很多参数无法确定,需要使用一些技巧来完成,下面将介绍一些通用的方法,预防未来在实际的工作中遇到具体的案列时,就可以灵活地选择解决方法. (1)1-2-1等比例变宽布局 这里先看效果图,然后再给出“ 1-2-1 等比例变宽布局布局”案例,以便大家都能现有一个感官上的认识,再往下看就会容易很多:如下图: 等比例布局图 (

CSS 布局总结——变宽度布局

变宽度布局 1-2-1 等比例变宽 总宽度设置 width: 85%; min-width: 650px; (关于IE6的min-width支持,可用) content 设置 width: 66%; float: left; side 设置 width: 33%; float: right; 增加clear 空div HTML 结构: <!DOCTYPE HTML> <html> <head> <title>1-2-1 等比例变宽</title>

三栏的网页布局,中间宽度自适应

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

零元学Expression Blend 4 - Chapter 19 如何让做好的Blend专案变Silverlight网页

原文:零元学Expression Blend 4 - Chapter 19 如何让做好的Blend专案变Silverlight网页 本章将教大家如何把制作好的Blend专案变为可以让任何人在网际网路浏览的Silverlight网页 本章将教大家如何把制作好的Blend专案变为可以让任何人在网际网路浏览的Silverlight网页 距离上次发文已经好久了,但是我很感谢还是有很多朋友支持我.鼓励我 甚至E-mail给我或利用部落格的网页内嵌MSN敲我,跟我交流有关Silverlight以及Blend

网页布局基础

网页布局基础     简介 什么是网页布局?    网页布局是网页制作的基础,使用DIV+CSS布局网页是基础中的基础.三种基本布局方式:流式布局,浮动布局,绝对定位布局. 网页设计的特点:1:网页宽度可变  2头+内容主体(根据需要分栏)+页脚(不重要的内容)   对长度设置百分比可实现网页自适应 W3C标准包括结构化标准语言,表现标准语言,行为标准语言,倡导结构,样式,行为分离. CSS中,存在三种定位机制:标准文档流,浮动,绝对定位. 标准文档流:从上到下,从左到右输出文档内容,由块级元素

简单实用的CSS网页布局中文排版技巧

由于汉字的特殊性,在css网页布局中,中文排版有别于英文排版.排版是一个麻烦的问题,小编认为,作为一个优秀的网页设计师和网页制作人员,掌握一些简单的中文排版技巧是不可或缺的,所以今天特意总结了几个简单实用的技巧,希望对大家有所帮助. 一.如何设定文字字体.颜色.大小等 font-style设定斜体,比如font-style:italic font-weight设定文字粗细,比如font-weight:bold font-size设定文字大小,比如font-size:12px line-heigh

网页布局之---固定布局、流动布局、弹性布局(转)

原文地址 有一个问题已经困扰网页设计师们很久了:该使用固定.流动.弹性,还是混合布局呢?它们各有优缺点.最终的决定取决于网站的可用性,单用某一种布局就想达到目的,可能没那么容易.那么,既然如此令人困惑,是否有做出正确决定的诀窍呢?考虑好几个问题,恰当地设定目标结果,你也能做出融合各方优点的成功布局设计. 为什么要争论这些?网页设计受可用性的大棒指引,而由于网站用户的多样性,已经很难做出对不同用户都有足够可用性的网站. 当设计的网站会面向众多用户时,设计师必须考虑访客之间的下列潜在差异: 屏幕分辨

【网页布局基础】css布局学习总结

三种定位机制 1.标准文档流:从上到下,从左到右输出文档内容 2.浮动 3.绝对定位 需要注意的是块级元素如div p ul 等 行级元素如span strong img input等 块级元素与行级元素都是盒子模型,下面说下盒子模型 盒子模型 盒子模型是网页布局的基石,border padding margin 下面给出盒子3d模型图便于理解 常见布局 自动居中一列布局 布局时候最重要的是把握三个技能点:标准文档流,块级元素,margin属性 自动居中代码:margin:0 auto: aut

网页布局及响应式

最近项目整合到一起,整个布局页面样式,五花八门..然后就做最苦逼的事,改别人的代码. 看了几页代码,只想说能不能把最基础的规范写好.... 首先我要说明几点,第一:一个优良的网站,要求结构(HTML),表现(css),行为(Javascript)三者分离,除了必须要写到结构里面的,我可爱的同事把它们写到一页还是内嵌型的...这样的代码很不利于后期维护和二次开发, 代码无法压缩到最小,当然影响加载速度了,一般情况下图片也要用png格式而且要压缩到最小:这样才有利于用户快速的打开网站.(这些都是最基