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

简介:

本节书摘来异步社区《响应式Web设计实践》一书中的第2章,第2.4节,作者: 【美】Tim Kadlec 译者: 侯鸿儒 责编: 赵轩,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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

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

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

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

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

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

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


b2_1

如果在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浏览器提供备选样式表的目标。


2_7

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来查看实际效果。

相关文章
|
16天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
1月前
|
前端开发 开发者 UED
构建响应式Web界面:Flexbox的力量
【2月更文挑战第25天】 在现代网页设计中,创建能够适应不同屏幕尺寸的布局是至关重要的。Flexbox,一种CSS布局模式,提供了强大的工具来轻松地设计和调整灵活的响应式界面。本文将深入探讨Flexbox的核心概念,并通过实例展示如何使用它来构建美观、灵活且易于维护的响应式Web界面。
|
1天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
22天前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox与Grid布局的深度对比
【4月更文挑战第4天】 在现代前端开发中,构建灵活且响应式的用户界面是至关重要的。随着移动设备浏览量的增加,能够适应不同屏幕尺寸和分辨率的布局技术变得必不可少。Flexbox和Grid是CSS提供的两种强大的布局机制,它们各自以独特的方式解决了响应式设计的挑战。本文将深入探讨Flexbox和Grid的核心概念、使用场景和性能考量,为开发者提供在面对不同布局需求时做出明智选择的依据。
|
1月前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
1月前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox的力量
【2月更文挑战第28天】 在现代网页设计中,创建能在不同设备上保持一致性和功能性的响应式界面是至关重要的。Flexbox,一个CSS布局模块,为前端开发者提供了强大工具来轻松实现灵活的布局设计。本文将深入探讨Flexbox的核心概念、使用场景以及如何通过它来优化响应式设计流程。
|
1月前
|
前端开发 开发者 UED
构建响应式Web界面:Flexbox与Grid布局的深度解析
【2月更文挑战第28天】 在现代前端开发中,打造灵活且适应不同屏幕尺寸的用户界面是至关重要的。随着移动设备的普及,响应式设计已经成为网页制作不可或缺的一部分。本文将深入探讨两种强大的CSS布局模块——Flexbox和Grid,它们如何简化布局创建过程,并赋予设计师更大的灵活性去构建动态和流畅的响应式界面。通过对这两种技术的比较、使用场景分析以及代码示例,读者将能够更好地理解何时以及如何使用这些工具来提升前端项目的质量和效率。
16 0
|
1月前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox布局的全面指南
【2月更文挑战第28天】 在当今多变的设备屏幕尺寸和分辨率中,创建一个能够适应不同视口的响应式Web界面至关重要。本文深入探讨了CSS Flexbox布局模块,它是一种设计灵活且强大的方式来创建复杂的响应式布局。我们将透过概念解析、关键属性讲解以及实际案例分析,帮助前端开发者掌握Flexbox的核心原理和应用技巧,以实现流畅的页面布局调整和优化用户体验。
|
1月前
|
监控 前端开发 JavaScript
构建高性能Web应用:前端性能优化的关键策略与实践
本文将深入探讨前端性能优化的关键策略与实践,从资源加载、渲染优化、代码压缩等多个方面提供实用的优化建议。通过对前端性能优化的深入剖析,帮助开发者全面提升Web应用的用户体验和性能表现。
|
1月前
|
前端开发 测试技术 开发者
构建响应式Web界面:Flexbox布局的力量
【2月更文挑战第24天】在现代Web开发中,创建能够适应不同屏幕尺寸的响应式界面已成为一项标准实践。Flexbox,一个CSS模块,因其灵活性和强大功能在前端开发者中广受欢迎。本文将深入探讨Flexbox的核心概念、常见用例以及如何利用它来构建美观、灵活且易于维护的响应式布局。通过实例演示,读者将学会如何有效地应用Flexbox技术,提升前端项目的质量和用户体验。