今天学习二列和三列布局,将涉及到以下内容和知识点
二列自适应宽度
二列固定宽度
二列固定宽度居中
xhtml的块级元素(div)和内联元素(span)
float属性
三列自适应宽度
三列固定宽度
三列固定宽度居中
IE6的3像素bug
一、两列自适应宽度
下面以常见的左列固定右列自适应为例,因为div为块状元素,默认情况下占据一行的空间,要想让下面的div跑到右侧,就需要做助css的浮动来实现。首先创建html代码如下:
<style>
#side { background-color:#99FF99;height: 300px; width:
120px; float: left; }
#main2 { background: #99FFFF; height: 300px; width:
70%; margin-left: 120px; }
</style>
<div id="side">此处显示 id
"side" 的内容</div>
<div id="main2">此处显示 id "main"
的内容</div>)
二、两列固定宽度
有了前面的基础,两列固定宽度就容易多了,只需要把#main的宽度由百分比改为固定值,如下图:
<style>
#side3 { background-color:#99FF99;height: 300px; width:
120px; float: left; }
#main3 { background: #99FFFF; height: 300px; width:
400px; margin-left: 120px; }
</style>
<div id="side3">此处显示 id
"side" 的内容--固定</div>
<div id="main3">此处显示 id "main"
的内容--固定</div>)
三、两列固定宽度居中
两列固定宽度居中,需要在两列固定宽度的基础上改进,在学一列固定宽度居中时,我们知道让它居中的方法,所以这里需要在这两个div之外再加一个父div:
<style>
#side3 { background-color:#99FF99;height: 300px; width:
120px; float: left; }
#main3 { background: #99FFFF; height: 300px; width:
400px; margin-left: 120px; }
#content { width:470px; margin:0
auto;}
</style>
<div id=‘content‘>
<div
id="side3">此处显示 id "side" 的内容--固定</div>
<div id="main3">此处显示
id "main" 的内容--固定</div>
</div>
四、xhtml的块级元素(div)和内联元素(span)
块级元素:就是一个方块,像段落一样,默认占据一行出现;
内联元素:又叫行内元素,顾名思义,只能放在行内,就像一个单词,不会造成前后换行,起辅助作用。
一般的块级元素诸如段落<p>、标题<h1><h2>...、列表,<ul><ol><li> 、表格<table>、表单<form>、DIV<div>和BODY<body>等元素。而内联元素则如: 表单元素<input>、超级链接<a>、图像<img>、<span> ........ 块级无素的显著特点是:每个块级元素都是从一个新行开始显示,而且其后的无素也需另起一行进行显示。
块级元素默认占据一行,相当于在它之前和之后各插入了一个换行;而内联元素span没对显示效果造成任何影响,事实也是如此;em只是让字体变成了斜体,也没有单独占据一行。这就是块级元素和内联元素,正因为有了这些元素,才使我们的网页变得丰富多彩。
如果没有css的作用,块元素会顺序以每次另起一行的方式一直往下排。而有了css以后,我们可以改变这种html的默认布局模式,把块元素摆放到你想要的位置上去。而不是每次都愚蠢的另起一行。也就是说,可以用css的display:inline将块级元素改变为内联元素,也可以用display:block将内联元素改变为块元素。
五、float属性
回到我们的例子当中,理解了块级元素和内联元素,对理解浮动就容易多了。float是个重点,希望大家都能理解。上例中用float让元素向左浮动,在
CSS
中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素;且要指明一个宽度,否则它会尽可能地窄;另外当可供浮动的空间小于浮动元素时,它会跑到下一行,直到拥有足够放下它的空间
六、三列自适应宽度
三列自适应宽度,一般常用的结构是左列和右列固定,中间列根据浏览器宽度自适应。下面在二列自适应宽度基础上修改一下
<style>
#side4 { background-color:#99FF99;height: 300px; width:
120px; float: left; }
#side41 { background-color:#99FF99;height: 300px;
width: 120px; float: right;}
#main4 { background: #99FFFF; height: 300px;
margin:0 100px; }
</style>
<div id="side4">此处显示 id "side"
的内容</div>
<div id="side41">此处显示 id "side1"
的内容</div>
<div id="main4">此处显示 id "main" 的内容</div>
七、三列固定宽度
三列固定宽度可以在三列自适应基础上添加一个父div,并设置这个div的宽度即可,如下,添加一个id为content的父容器。
在源代码里选中这三个div,然后点击工具栏上的“插入div标签”按钮,这时弹出的窗口插入项会默认为:在选定的内容旁换行,输入id为content,然后给这个div定义个宽度
<style>
#side4 { background-color:#99FF99;height: 300px; width:
120px; float: left; }
#side41 { background-color:#99FF99;height: 300px;
width: 120px; float: right;}
#main4 { background: #99FFFF; height: 300px;
margin:0 100px; }
#content2{ margin: 0 auto;
width:500px}
</style>
<div id=‘content2‘>
<div
id="side4">此处显示 id "side" 的内容</div>
<div id="side41">此处显示 id
"side1" 的内容</div>
<div id="main4">此处显示 id "main"
的内容</div>
</div>
八、IE6的3像素bug
3像素bug是IE6的一个著名的bug,当浮动元素与非浮动元素相邻时,这个3像素的Bug就会出现。看下面这个左列固定,右列液态的例子,css代码如下:
body { margin:0;}
#side { float: left; background:#99FF99; height: 300px;
width: 120px;}
#main { background: #99FFFF; height: 300px;}
html代码如下:
<div id="side">此处显示 id "side" 的内容</div>
<div
id="main">此处显示 id "main" 的内容</div>
IE6会在两个div中间加上3px的空隙,那么要解决这个问题,请在#side上加上_margin-right:-3px;记住,前边加上一下划线,这样这个样式专门针对IE6生效。IE7和FF下还会正常显示。
body { margin:0;}
#side { float: left; background:#99FF99; height: 300px;
width: 120px; _margin-right:-3px;}
#main { background: #99FFFF; height:
300px; }
但它不能通过W3C验证。当两列固定宽度时,最好把#main也固定宽度且向右浮动,这样就可以避免IE6的3像素bug了。