![Div+CSS3.0网页布局案例精粹(升级版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/272/29126272/b_29126272.jpg)
3.4 常见的网页布局方式
CSS是控制网页布局样式的基础,并且是真正能够做到网页表现和内容分离的一种样式设计语言。相对于传统的HTML的简单样式控制而言,CSS能够对网页中对象的位置进行像素级的精确控制,支持几乎所有的字体、字号的样式,还拥有着对网页对象盒子模型样式的控制能力,并且能够进行初步页面交互设计,是当前基于文件展示的优秀的样式设计语言。
3.4.1 居中布局设计
目前居中布局设计在网页布局中的应用非常广泛,所以如何在CSS中让设计居中显示是大多数开发人员首先要学习的重点之一。让设计居中显示主要有以下两种基本方法。
1.使用自动空白边让设计居中
假设一个布局,希望其中的容器Div在屏幕上水平居中:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_42.jpg?sign=1738788820-wyFOYOaRvpjiaSnnwm3vVjRb1XvO3inK-0-f772e1bb1fc7c4627bdbfb820221af01)
只需定义Div的宽度,然后将水平空白边设置为auto:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_43.jpg?sign=1738788820-8U9rEjvWu4gnJBwhGqmtZLWfdlT9fSVf-0-1b52ff3cc35eb8c65a86cc1657b7e73a)
提示
这种CSS样式定义方法在绝大部分浏览器中都是有效的。但是,IE5.X和IE6版本的IE浏览器不支持自动空白边,因为其将text-align:center理解为让所有对象居中,而不只是文本。可以利用这一点,让主体标签中所有对象居中,包括容器Div,然后将容量的内容重新对准左边,代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_44.jpg?sign=1738788820-q3IIx2MFwucANSatMcdxqbCFltqerC94-0-3a31c52dd428faa1fba1cae17a636784)
以这种方式使用text-align属性,不会对代码产生任何严重的影响,如图3-15所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_45.jpg?sign=1738788820-vs5fbgTp9UQMgTYZzViE0qSFpQT6sCZC-0-fb89ea59587e2a3530cf6541c364a7e0)
图3-15 添加text-align属性
2.使用定位和负值空白边让设计居中
首先定义容器的宽度,然后将容器的position属性设置为relative,将left属性设置为50%,就会把容器的左边缘定位在页面的中间,代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_46.jpg?sign=1738788820-HAjZ5tpilLQLiyynoZPcyfJmF6lYVlWZ-0-347929d47301e9e90752caa2e0d50f15)
如果不是让容器的左边缘居中,而是让容器的中间居中,只需要对容器的左边界应用一个负值的空白边,使其宽度等于容器宽度的一半。这样就会把容器向左移动它的宽度的一半,从而让它在屏幕上居中,代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_47.jpg?sign=1738788820-NruyjLWby8rFQYXMwRwo37hLyiNRw7rK-0-f044937130f2e5e2dd463719c9034a7b)
3.4.2 浮动布局设计
本节介绍5种浮动布局设计,即两列固定宽度布局、两列固定宽度居中布局、两列宽度自适应布局、两列右列宽度自适应布局和三列浮动中间列宽度自适应布局。
1.两列固定宽度布局
两列固定宽度布局非常简单,其HTML代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_48.jpg?sign=1738788820-rlxvTgO2SocJlwEy23zBXjmP52ei81F5-0-0fb61d8c2dbe39bdc00c67ced842e73f)
为id名称为left与right的Div制定CSS样式,让两个Div在水平行中并排显示,从而形成两列式布局,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_49.jpg?sign=1738788820-6OTP2BQgypSuVPKrtaGlPLWzdCF8xAUz-0-5d8a93199e262b8cf046898a26281695)
为了实现两列式布局使用了float属性,这样两列固定宽度布局就能够完整显示出来,预览效果如图3-16所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_50.jpg?sign=1738788820-yufvNtqUvpD8W9ZEiFlqTVrD5QUkHmyf-0-617be40a67d102ff1581fb935e184898)
图3-16 两列固定宽度布局
2.两列固定宽度居中布局
两列固定宽度居中布局可以使用Div的嵌套方式来完成,用一个居中的Div作为容器,将两列分栏的两个Div放置在容器中,从而实现两列的居中显示,其HTML代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_51.jpg?sign=1738788820-VkZFSo6geuGNZGtGH9Lc7y5iNl3MIIvI-0-98c8d0b4c9b1b863e318c19e58f315b8)
为分栏的两个Div加上一个id名称为box的Div容器,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_52.jpg?sign=1738788820-7dsvPfnxjLIyUpa2Kfrp1MUjI1ZCbf0r-0-46f15e715b0df47d26fb92c0e7f57e1c)
提示
一个对象的实际宽度,不是仅由其本身宽度值来决定的,而是由其本身的宽度值、左右边框值等相加而成的。由于#left宽度为200px,左右都有2px的边框,因此,#left的实际宽度为204px,#right的实际宽度与#left的实际宽度相同,所以#box的宽度设定为408px。
#box有了居中属性,里面的内容自然也能做到居中,这样就实现了两列固定宽度居中布局,预览效果如图3-17所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_53.jpg?sign=1738788820-1KKj76aT0ajGC8YtTaX2jKLnYV6nSa1G-0-1aa4278d4939ddbcade6040cd480a2e7)
图3-17 两列固定宽度居中布局
3.两列宽度自适应布局
宽度自适应布局主要通过设置宽度的百分比值实现,在两列宽度自适应布局中同样是对宽度的百分比值进行设置,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_54.jpg?sign=1738788820-eqW9a6OV3BQiaUAmN3Ww4HX9Hpj5QQaJ-0-ee3e174d28e154fd5b1e8eff7f1c1111)
左列宽度设置为20%,右列宽度设置为70%,预览效果如图3-18所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_55.jpg?sign=1738788820-Watia8OmIbiZTeCOguukGfJF3LUiKhrk-0-5fddc42700a47f5b712f91c88249adc0)
图3-18 两列宽度自适应布局
提示
此处没有把整体宽度设置为100%,是因为前面已经提示过,左列的实际宽度不仅是浏览器窗口宽度的20%,还应当加上其左、右边框,这样算下来,左、右列都超过了自身的百分比宽度,最终的宽度也超过了浏览器窗口的宽度,因此若将整体宽度设置为100%,则右列将被挤到第二行显示,从而会失去左右分列的效果。
4.两列右列宽度自适应布局
在实际应用中,有时候需要左列宽度固定,右列宽度根据浏览器窗口的大小自动适应,在CSS中只需要设置左列宽度,右列不设置任何宽度值且不浮动即可,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_56.jpg?sign=1738788820-faDF0S3lAkwVqzh2T7MkBlbPbuYNpP7Z-0-cef2a0e0ee248ca9a793d48d1ebb9829)
左列将呈现200px的宽度,而右列宽度将根据浏览器窗口的大小自动适应,预览效果如图3-19所示。两列右列宽度自适应布局经常在网站中用到,此外,左列宽度也可以自适应,方法是一样的。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_57.jpg?sign=1738788820-aFlBjGuR2Uqm5pRZxq0vZkil6IWVgRXF-0-abbed1d0c0fa6fb77d4b5c119442b955)
图3-19 两列右列宽度自适应布局
5.三列浮动中间列宽度自适应布局
三列浮动中间列宽度自适应布局是左列宽度固定居左显示,右列宽度固定居右显示,而中间列则需要在左列和右列的中间显示,其宽度根据左、右列的间距变化自动适应的布局方式。此时单纯使用float属性与百分比属性不能实现,而需要使用绝对定位来实现。绝对定位后的对象,不需要考虑它在页面中的浮动关系,只需要设置对象的top、right、bottom及left四个方向即可,其XHTML代码结构如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_58.jpg?sign=1738788820-vV6c0RSIVW2EuAV1HLUEupYubAUyaCtX-0-cc9b8943c530caa2170c0fe17743bb0e)
首先使用绝对定位对左列与右列进行位置控制,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_59.jpg?sign=1738788820-fB0ZqFXrpM4DaoLZXrbX1m4OSHzdUvou-0-d09c3ebc9169f852dd0c88e50111bc69)
而中列则用普通CSS样式,其CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_61.jpg?sign=1738788820-japfrDA01hjpXuGOkG6JA2t94gaJxay1-0-4f18023414636a609f8e33b96e9d1f6b)
对于#main,不需要再设置浮动方式,只需要让它的左边和右边的边距永远保持#left和#right的宽度,便实现了两边各有204px的自适应宽度,刚好让#main在这个空间中,从而实现了布局的要求,预览效果如图3-20所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_62.jpg?sign=1738788820-SXjkqVz89cPFlrrpD4ftHRo6UFDljTJ5-0-51afa446f00bde77aec5c5109d0bbf20)
图3-20 三列浮动中间列宽度自适应布局
3.4.3 高度自适应
高度值同样可以使用百分比值进行设置,不同的是,直接使用height:100%不会显示效果,这与浏览器的解析方式有一定关系,实现高度自适应的CSS代码如下:
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_63.jpg?sign=1738788820-D6CL2qhCaG8Er7dk8YFK8GGVktT8wjwL-0-8ed166302f8c9d4b50585e1976eae1c6)
对#left设置height:100%的同时,也对html,body设置了height:100%,一个对象的高度是否可以使用百分比显示,取决于其父级对象。#left在页面中直接放置在body中,因此它的父级对象就是body,而在浏览器默认的状态下,没有给body一个高度属性,因此直接对#left设置height:100%,不会产生任何效果,而对html,body设置了height:100%之后,它的子级对象#left的height:100%便可以起作用,这便是浏览器解析规则引发的高度自适应问题。而对html,body设置height:100%,能使IE浏览器与Firefox浏览器实现高度自适应,预览效果如图3-21所示。
![](https://epubservercos.yuewen.com/47F5DE/16264452405767906/epubprivate/OEBPS/Images/txt003_64.jpg?sign=1738788820-CsjoMWt9Yq6MKBXOuVTwQQvJUzgYivgh-0-109a3c679915f7e13deba34a89277417)
图3-21 高度自适应