《响应式Web设计实践》一2.4 混合固定宽度和流动宽度

2.4 混合固定宽度和流动宽度

响应式Web设计实践
到目前为止,文章页面看起来已经很不错了,而且布局十分灵活,下面让我们来加强一下右侧的边栏。现在它看起来好像没什么问题,但是如果我们能让它保持300px宽,而只让主体列流动岂不是更好?虽然这不是必需的,但是考虑到边栏里的广告,我想这将会是一次很好的润色。

使用浮动来实现这个任务几乎是不可能的。正如我们之前讨论过的那样,主要内容栏的宽度依赖于屏幕的分辨率,如果我将边栏设置为固定的300px宽,同时保持主要内容栏为当前的63.125%,那么我们将遇到前面在浏览器宽度小于960px时遇到的同样的问题。

有一种方法可以绕过这个问题,其中会涉及CSS表格。

表格布局——正确的方法
不久以前,在一个离我们不太遥远的星球,那里多数的Web站点都是使用表格来布局的。那是一种缺乏语义的、散乱到让人看了想哭的实现方法,但它的确是有效的。后来那里出现了一场Web标准化运动,并提出了要将内容和表现相分离的理念,突出强调了使用语义标记的重要性。一场伟大的战役便随之而来,并最终以标准的获胜而告终。

相比CSS布局,表格布局的优势之一在于它简化了将站点布局为多列的实现过程。可以混合使用固定宽度和流动宽度;一行里可以包括好几列——所有这些在表格布局中实现起来都相当容易,而用CSS来实现这些样式则远没有那么简单。

其实你可以给display属性赋予许多不同的、与表格相关的值,并以此来实现上述的那些样式,因为display的一些属性值可以让元素获得与表格相关元素相似的布局效果。

如果在CSS中使用表格值的做法会让你觉得不爽,那么我想你不该因此而受到指责。毕竟,基于表格(table)的布局曾一度受到了人们猛烈的抨击,你也许非常理解那种甚至看到厨房里的桌子(table)都会感到恶心的感受。但是,在CSS中使用表格值与使用HTML表格来布局还是有很大区别的,CSS中的表格值只是给内容定义了视觉样式,而并不是说表格也是内容的一部分。

到目前为止,display属性的表格值还没有得到广泛的使用。对此你也许可以指责IE,因为Firefox、Safari以及Opera都已经支持表格值有一段时间了,而IE直到IE 8才开始支持表格值。在写这本书时,IE 6和IE 7总共的市场份额已经下降到了5%以下,所以我想现在是时候扫扫CSS表格值身上的尘土,并开始使用它们了,更何况移动平台对此的支持也相当棒。

如果将某列的display属性指定为table-cell,我们就可以混合分别使用固定宽度和流动宽度的列了:

.main {
     display:table-cell;
}
aside {
     display:table-cell;
     width: 300px;
}

这时当我们再来缩放浏览器,边栏将仍旧保持300px,而左边的主要内容栏则会进行调整以填满剩余区域。虽然现在两列之间没有了漂亮的间隔,但我们可以很容易地通过增加一些padding来让它重现:

.main {
     display:table-cell;
     padding-right: 2.5316456%; /* 24px / 948px */
}

现在,我们已经能够将固定宽度的列和流动宽度的列结合在一起使用了,这使得我们在保证布局灵活性的同时,不必再去担心在混合布局中引入浮动时会造成的混乱了(图2.7)。但主要内容栏在高分辨率的屏幕中显示时还是会有一些不妥之处(译者注:因为在高分辨率屏幕下主要内容栏会变得很宽,过宽的行不利于人们阅读),我们将在下一章探索媒介查询时再去解决这个问题。

对老版本IE的支持
对于很多站点来说,也许本章到此就可以结束了,因为IE 8之前的各种版本的IE正在迅速失去各自的市场份额。其实这仍然是由你的用户来决定的,让那些旧版本的IE以它们现有的方式来呈现网站也许是不够的。虽然可以显示网站的内容,但你的客户也许并不满足于这样的设计,这时你就要准备一些备用的
样式了。

条件注释可以帮你达到上面的目标,因为条件注释能让特定版本的IE浏览器使用另外的样式表。例如,我们创建一个叫做ie.css的样式表,并且规定只在IE 7及以下版本的IE中才加载它,那我们就可以使用下面这样的条件注释:

<!--[if lt IE 8]>
<link rel="stylesheet" href="/css/ie.css" media="all">
<![endif]-->

现在,任何IE 8之前版本的IE就都会加载ie.css了。这样,我们便实现了为较早版本的IE浏览器提供备选样式表的目标。

Display:table的告诫以及未来
在你变得兴奋并开始在所有项目中都使用display:table之前,这里有一些你需要意识到的潜在问题 。

第一个问题是:在一个被指定为display:table-cell的元素内,你无法精确地定位元素。如果你需要精确地定位,你就不得不在表格中插入另外一个div,或者干脆就不要使用display:table。

另一个需要牢记的一点是:相对来说,表格是更加严格的。有时浮动所具有的流动性是有利的,比如如果有些内容过长的话,那么浮动可以很容易地让超出的部分折回到下面去。

Web设计中没有银弹(译者注:银弹是指那些可以解决复杂而棘手的问题的方法或者技术手段),你会看到我在后面还会提到这句话的。所以你必须在提交任何方案之前,仔细考虑你的需求,包括使用display:table。

CSS网格布局和Flexbox是两种新的布局方法,它们可以为我们提供更多种类的控制,而且值得我们关注。但现在浏览器对它们的支持还都非常有限,这也是我们使用display:table的原因。

现在唯一的问题是Windows Phone 7也会加载这个备用样式,鉴于此,我们将在下一章中利用媒介查询来针对小屏幕修改样式表,因为我们不想在手机中让备用的样式表覆盖现有的样式。幸好我们只需在条件注释中做一处小小的修改,就可以修复这个问题了(该方法最先由Jeremy Keith提出):

<!--[if (lt IE 8) &amp; (!IEMobile)]>
<link rel="stylesheet" href="/css/ie.css" media="all">
<![endif]-->

既然我们可以在不影响手机体验的前提下提供备选样式,那么我们就先将ie.css文件中的样式变回两列浮动的流动布局:

.main {
     float: left;
     width: 65.8227848%; /* 624/948 */
}
aside {
     float: right;
     width: 31.6455696%; /* 300/948 */
}

虽然在老版本IE中达不到那些对标准支持更好的浏览器中显示时的效果,但这已经足够了。记住,站点不需要在不同设备的不同浏览器中看起来都一模一样,事实上这也是无法做到的。即便是现在这样,那些老版本IE的用户也照样可以看到一个对于他们的浏览器来说合适且良好的布局。

提示
可以访问http://implementingres-ponsivedesign.com/ex/ch2/ch2.4.html来查看实际效果。

时间: 2024-11-05 05:04:34

《响应式Web设计实践》一2.4 混合固定宽度和流动宽度的相关文章

《响应式Web设计实践》一第2章 流动布局

第2章 流动布局 响应式Web设计实践一棵大橡树被风连根拔起,然后落到了一片芦苇丛中.橡树对芦苇们说:"我很想知道,你们如此轻而弱小,却为什么没有被大风吹走呢?"芦苇们回答道:"你和大风打斗对抗,结果就被摧毁了:而我们在大风来临之前便弯下了腰,并因此保持完好而存活了下来."* --"橡树与芦苇"伊索寓言 在"橡树与芦苇"的故事中,大橡树和芦苇都被风吹来吹去,橡树想要一直站得又高又稳,并因此与大风做着顽强的抵抗,但最终它还是被大

《响应式Web设计实践》一2.2 字体大小

2.2 字体大小 响应式Web设计实践 要想让你的设计拥抱Web的流动性,那就意味着在你的设计中要能够灵活地改变字体大小.你可以在Web上使用任意单位来设置字体大小,但主要的方法不外乎三种:像素.em,还有百分比. 2.2.1 像素 长期以来,像素一直都是人们喜欢使用的字体大小单位,其原因很简单:无论浏览器如何设置字体大小,你都能对其进行精确的控制.如果你把字体设置为18px,那么每个浏览器都会将其准确地显示为18px. 但这样的掌控是要付出一定代价的.对于初学者而言,虽然使用像素作为字体大小单

《响应式Web设计实践》一1.2 设备来了,设备来了

1.2 设备来了,设备来了 响应式Web设计实践 我是一名近乎疯狂的旅行者,我不害怕坐飞机,但我担心误机.于是我会常常发现自己坐在拥挤的候机厅里总想找点什么事做,以便用来打发时间. 于是我开始观察身边的人们,更多的时候我会去观察他们使用的是什么样的设备.在最近的一次旅途中,我飞到了一个非常小.非常偏远的机场,小到你只需要五分钟就能办完所有的登机手续.虽然候机厅里只有大概二十五个人,但是Android手机.iPhone以及一些老款的手机都能在那里见到.有人在用Nook读着什么,而我旁边一位头发花白

《响应式Web设计实践》一1.4 成为响应式的

1.4 成为响应式的 响应式Web设计实践 2010年5月,Ethan Marcotte为"A List Apart"写了一篇题为"Responsive Web Design"(响应式网页设计)的文章,他在文章中描述的方法不仅简单,同时又是革命性的.Ethan Marcotte利用三种已有工具:媒介查询(media queries).流动布局(fluid grids)和自适应图片(scalable images)创建了一个在不同分辨率屏幕下都能漂亮地显示的站点(图1

《响应式Web设计实践》一1.7 这本书写给谁

1.7 这本书写给谁 响应式Web设计实践 这本书本意上是为那些希望能在无尽的设备上创建出具有良好界面和功能的站点的设计师和开发者而写的.你不需要有任何响应式设计的经验--前面的几章会让你跟得上的. 但你应该精通HTML和CSS,同时至少要熟悉JavaScript.第8章"RESS"中会涉及一些PHP的代码,但即使你没有太多的PHP知识,你应该也能很容易地接受文中提到的概念.

《响应式Web设计实践》一2.3 网格布局

2.3 网格布局 响应式Web设计实践 早在Web出现前的数十年,在设计中使用网格就已经是一种异常流行的做法了,因为网格有助于实现站点的平衡.间距以及组织结构.一个实现良好的网格系统会使你的站点井井有条,同时还可以提高页面的可读性和可浏览性. 注意 关于网格的更多信息,可以参阅Khoi Vinh的书籍,或者找一份Mark Boulton的系列视频来看. 在<"Ordering Disorder: Grid Principles for Web Design"(秩序之美:网页中的网

《响应式Web设计实践》一导读

致 谢 响应式Web设计实践 人们常说写书是一件孤独的事情,也许有些时候的确是这样的,但这本书却是个例外.如果这本书能得到一些好评,那么这些好评都应归功于这一路上帮助过我的那些人,以及他们的勤奋.耐心和反馈. 我要向他们致以最真诚的感谢-- Michael Nolan,最先邀请我写这本书的人,谢谢你对我如此信任. Margaret Anderson和Gretchen Dykstra,谢谢你们能容忍我那糟糕的标点符号用法,而且还让我觉得是我通过自己的努力而摸索出了写作的要义. 感谢Danielle

《响应式Web设计实践》一1.1 我们错在哪里

1.1 我们错在哪里 响应式Web设计实践 观察我年幼的女儿们玩耍的过程,对我来说是一段启发性的经历.每当她们得到一个新的玩具,她们总会试着用玩旧玩具的方法来玩新玩具.她们寻找着新玩具和旧玩具之间相似的特性和关系,从而能够把它们联系起来.只有当她们用这种方法熟悉了一段时间新玩具后,她们才会发现新玩具的其他新玩法. 这很有意义:过去是被我们所熟知的,而未来是未知的.我们喜欢熟悉的心理模型,我们会选择那些安全和熟悉的事物,而不是冒险和崭新的事物.但问题是,将未来建立在过去经验之上的做法,限制了新想法

《响应式Web设计实践》一1.3 独立站点

1.3 独立站点 响应式Web设计实践在写这本书的时候,也许最普通的处理设备多样性问题的方法,就是为特定种类的设备(或者在被极端误导的情况下,为每一种特定的设备)开发一个独立的站点,通常这种做法会开发一个移动设备站点和一个台式电脑站点(如图1.2所示).然而如果采用这种方法的话,站点无疑会变得越来越多:对于一个公司来说,需要有一个台式电脑站点.一个平板电脑站点.一个可触摸移动设备站点以及一个类似的却不支持触摸的移动设备站点.一个公司拥有四个不同的站点,这似乎有点不太合常理. 这种方法当然有其优点