网页布局教程:CSS多列布局问题简单解决方案

2016-02-19 23:57 11 1 收藏

今天图老师小编要跟大家分享网页布局教程:CSS多列布局问题简单解决方案,精心挑选的过程简单易学,喜欢的朋友一起来学习吧!

【 tulaoshi.com - Web开发 】

纯 CSS 打造多列等高并不像想象中那么容易。本文着重讲述多列布局出现的问题,之后提供一个在所有浏览器都正常工作的简单解决方案。这个方法 100% 无 CSS hack,无图片,无 javascript,甚至可以用在最严格编码的网站上。

多列等高的问题

 

上例中有包含不同内容的 3 列,可以看出存在的问题是列的背景色随着其包含内容的高度而自适应展开。这是我们要解决的问题。如何使所有的列等高?或具体的说,如何使所有列的高度等于最高列的高度?这很棘手,因为我们不清楚每列将会多高,哪一列是最高的。不能简单的给所有列一个固定的高度,如果内容很少将会导致页面底部有大片空白;如果内容太多则会在文字显示完全前关闭。两种情形都不妥。实际上,内容的长度是动态的,所以每列的高度也是动态的。必须意识到 Web 上没有固定的东东,乡民们有不同的屏幕分辨率,浏览器中的文字也可能被设置为任意大小,所有这些都会影响内容的高度。

分离列内容与其背景色

解决等高问题的第一步是把能分离的破开。方法是每列用两个 div 替代原来的一个。第一个 div 用来放内容,另一个用来作背景色。分离使我们可以单独控制这些额外的元素,之后用更有效的方法把它们放在一起。答案呼之欲出。

浮动的容器的高度始终取决于其浮动的内容(高度)

这是本文多列等高方法的核心。 使一个 div 的高度等于最高列高度的唯一方法是这个 div 包含所有的列。换句话说,通过把所有的列放在一个容器中,容器的高度就是最高列的高度。这是个非常有用的结构。

 

3列 HTML div 结构

上例中 3 个内容列在一个 div 容器中。

3 列 CSS

下面是使 div 容器等高于最高列的 CSS。

为了让这一结构在所有浏览器中正确工作,容器 div 必须浮动(左或右),同时每一个内容列的 div 也要浮动,哪种方式并不重要。浮动内容 div 的进程使它们在页面中排列在一条水平线上。浮动容器使其自适应到最高列的高度。如果不浮动容器,内容 div 将会从容器底部溢出,容器不会拥有正确的高度。事实上在此例中,容器不浮动的话其最终高度为0。

增加额外嵌套的容器

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

下一步是增加额外的容器,它们彼此嵌套。我们需要容器的数量等于列的数量:3。这 3 个容器用作各列的背景。请注意,我们去除了原始列的背景色,并将其加至容器上。

 

3列 HTML div 结构

两个额外的容器加至下面的 HTML 中。

div id="container3"div id="container2"div id="container1"div id="col1"Column 1/divdiv id="col2"Column 2/divdiv id="col3"Column 3/div/div

3 列 CSS

所有元素左浮动,容器宽度设为100%,使他们占满页面的宽度。背景色从内容 div 移除并加至容器上。

#container3 {float:left;width:100%;background:green;}#container2 {float:left;width:100%;background:yellow;}#container1 {float:left;width:100%;background:red;}#col1 {float:left;width:30%;}#col2 {float:left;width:40%;}#col3 {float:left;width:30%;}

用相对定位移动容器

现在用相对定位把容器移至新的位置。移动后 div 如下图所示。即等高列背景容器的层叠和位置。为了显示右侧的绿色列 container2 向左移了30%,为了显示中间的黄色列 container1 向左移动了40%,与此同时红色部分依然可见作为左侧列。

 

相对定位的 CSS

下面是添加了相对定位的CSS。

position:relative;right:30%;}#container1 {float:left;width:100%;background:red;position:relative;right:40%;}#col1 {float:left;width:30%;}#col2 {float:left;width:40%;}#col3 {float:left;width:30%;}

将每列的内容移回

下一步是把每列的内容移回到页面上,使之排列在下面的背景色上。再次使用简单的相对定位来完成它。

 

最后在最外面的容器 container3 上添加,砍去超出容器的部分。

 

相对定位的 CSS

下面是增加了相对定位和溢出的 CSS 规则。请注意 container3 上额外的; 这是为了解决一个 IE bug ,阻止工作。

overflow:hidden;position:relative;}#container2 {float:left;width:100%;background:yellow;position:relative;right:30%;}#container1 {float:left;width:100%;background:red;position:relative;right:40%;}#col1 {float:left;width:30%;position:relative;left:70%;}#col2 {float:left;width:40%;position:relative;left:70%;}#col3 {float:left;width:30%;position:relative;left:70%;}

对列增加 padding

最后还需对列增加 padding,这样每列边缘的文字不至于显得拥挤。如果我们增加 padding,一些浏览器中可能正常显示,但不是所有。IE 错误的盒模型,导致其估算拥有 padding 的元素宽度异常。一个 200px 宽 20px padding 的 box 在 IE 中被视为 200px 宽,在其他浏览器中则为正确的 240px。padding 应该加在元素的宽度上。凸微软!

不过不用担心...我们可以用完全不依赖于 padding 的方法来解决这个问题。相反,我们把列弄窄一点(列宽减去两侧的 padding),之后用相对定位把它们移至正确的位置。在我们的例子中我们用了 2% 的 padding,则 30% 的列将减至 26%,40% 的列减至 36%。用相对定位移回列时需谨记,现在列变窄了,所以当它们一起像最初那样左浮动时,每一个需要比上一个移动更远的距离。

 

完整的CSS

为了使布局保持在小宽度我在每个内容列增加了; 这将切去超出列宽的东东,并阻止其干扰其他布局。重申一下,这只是 IE 的问题,其他所有浏览器会保持正确的布局,不管列内是虾米。如果你真想这样做,可以用 IE 条件注释只对 IE 写规则。

width:26%;position:relative;left:72%;overflow:hidden;}#col2 {float:left;width:36%;position:relative;left:76%;overflow:hidden;}#col3 {float:left;width:26%;position:relative;left:80%;overflow:hidden;}

好了,就是这样。我希望这篇文章对你有用。可以自己弄一下 CSS 看一下它是如何工作的。你可以搞很多列,只要容器和内容列的数目相等。不要忘记看看我的 demo:2 列 , 3 列, 4 列,以及 5 列。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

来源:http://www.tulaoshi.com/n/20160219/1630916.html

延伸阅读
标签: Web开发
许多网页设计师都喜欢,将两个或者多个容器等高的并排放置,并在里面展示每个容器的内容,就象经典表格布局中的单元格控制几个栏目的位置,也喜欢容器的内容居中或顶部对齐显示。 但是你又不喜欢用table来实现他,那怎么办呢?实现的方法很多,有根据视觉错觉实现的,有用JS控制使高度相等的,还有采用容器溢出部分隐藏和列的负底边...
标签: Web开发
CSS制作网页的实例,利用CSS相对定位进行多行多列布局。 !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-Type" content="text/html; charset=UTF-8" / title无标题文档/title styl...
标签: Web开发
通过上一章的学习,读者了解到了CSS强大的表现控制功能,特别是在布局方面有很大的优势。相对于代码条理混乱、样式杂糅在结构中的表格布局,CSS将带来全新的布局方法,让网页设计师更轻松、更自由。本章通过多个示例展示CSS布局网页的方法,并对CSS的盒模型作详细阐述。相信读者在深入理解盒模型后,布局网页、定位CSS网页元素将更加自如。 ...
标签: Web开发
三列等高CSS布局的一个实例, 修改国外的一个demo, 兼容到了IE5.5+ 和标准的浏览器Opera Firefox Safari。 不过hack太多,不是很喜欢这样做。 全部代码如下: ?xml version="1.0" encoding="gb2312"? !DOCTYPE html PUBLIC "-//W3C//DTD XHTML&...
标签: Web开发
  1、说明本文阐述了8条我们发现的在用CSS设计中有用的解决方案。 2、浏览器特定的选择器 查看原文:http://diger.cn/blog/?p=324 英文地址:  http://www.solidstategroup.com/page/1592 翻译说明: 这是Solid State Group网站上的一篇很友好的文章,解决了我在设计中遇到的很多问题,故在此我翻译其文,并对

经验教程

823

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部