zoukankan      html  css  js  c++  java
  • 第三天 二列和三列布局

    今天学习《十天学会web标准(div+css)》的二列和三列布局,将涉及到以下内容和知识点

    • 二列自适应宽度
    • 二列固定宽度
    • 二列固定宽度居中
    • xhtml的块级元素(div)和内联元素(span)
    • float属性
    • 三列自适应宽度
    • 三列固定宽度
    • 三列固定宽度居中
    • IE6的3像素bug

    一、两列自适应宽度

    下面以常见的左列固定右列自适应为例,因为div为块状元素,默认情况下占据一行的空间,要想让下面的div跑到右侧,就需要做助css的浮动来实现。首先创建html代码如下:

    <div id="side">此处显示 id "side" 的内容</div>
    <div id="main">此处显示 id "main" 的内容</div>

    按照如图所示的创建方法,把两个div都创建出来,或手工写出代码。div创建完成后,开始创建css样式表,代码如下:

    #side { background: #99FF99; height: 300px; 120px; float: left; }
    #main { background: #99FFFF; height: 300px; 70%; margin-left: 120px; }

    先创建#side的样式,为了便于查看,设置了背景色。注意,side的浮动设置为向左浮动;

    然后创建#main样式,注意这里设置#main的左边距为120px。预览结果如下:

    当我们拖动浏览器窗口变大变小时,#main的宽度也会跟着改变。这里设置margin-left:120px;正好让出#side占去的120px宽度,如果这里设置为122px的话,中间将出现2px的空隙,大家可以试一下。


      提示:可以先修改部分代码后再运行

    二、两列固定宽度

    有了前面的基础,两列固定宽度就容易多了,只需要把#main的宽度由百分比改为固定值,如下图:

    三、两列固定宽度居中

    两列固定宽度居中,需要在两列固定宽度的基础上改进,在学一列固定宽度居中时,我们知道让它居中的方法,所以这里需要在这两个div之外再加一个父div:

    <div id="content">
    <div id="side">此处显示 id "side" 的内容</div>
    <div id="main">此处显示 id "main" 的内容</div>
    </div>

    操作方法:在源代码里选中这两个div的代码后,点击工具栏上插入div按钮,填写id后确定,得到如上的代码

    下面就需要设置#content的样式了,我们知道,#side的宽度为120px,#main宽度为350px,那么#content的宽度应该为这两者之和,然后设置#content居中,那么整体就居中了:


      提示:可以先修改部分代码后再运行

    四、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 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素;且要指明一个宽度,否则它会尽可能地窄;另外当可供浮动的空间小于浮动元素时,它会跑到下一行,直到拥有足够放下它的空间。

    想必大家都用过word排过版,当中有个图文混排功能,如下图:

    这个功能非常类似于css中的浮动,下面我们用css来实现这一功能:

    <div id="side"><img src="http://www.aa25.cn/uploadfile/taobao0903/20090212165039036721.gif" width="192" height="142" /></div>
    <div id="main"> 标准之路[www.aa25.cn]提供DIV+CSS教程,DIV+CSS视频教程,web2.0标准,DIV+CSS布局入门教程,网页布局实例,css布局实例,div+css模板,div+css实例解析,网站重构,网页代码,水晶图标,幻灯广告图片.教程适合初学者循序渐进学习!</div>

    创建完以上代码后,在浏览器中预览会显示如下结果:

    下面用css让side浮动,再看看效果

    body { font-size:18px; line-height:200%; }
    #side { float:left;}

    大家看看,是不是和word的效果已经很像相了,但这里的文字和图片右侧贴的很近,怎么办呢?刚才已经说了,当元素浮动过之后,需要指定一个宽度,否则它会尽可能窄。那么把side的宽度设置为大于图片的宽度,它们中间应该就有空隙了。图片的宽度是192px,设置side为202px,中间将会有10px的空隙了。

    body { font-size:18px; line-height:200%; }
    #side { float:left; 202px;}

    细心的朋友已经发现,上例中#main的div还定义了margin-left:120px;而这里没有定义,但它多出的文字却跑到了图片(#side)的下方,是不是设置margin-left:后,它就不会跑到#side的正文呢?如果你能想到这一点,你的确是太聪明了,事实确实是这样,在css样式表中加上下面一行

    #main { margin-left:202px;}

    这就是如何应用浮动实现两列布局的原理。那么三列呢?

    六、三列自适应宽度

    三列自适应宽度,一般常用的结构是左列和右列固定,中间列根据浏览器宽度自适应。下面在二列自适应宽度基础上修改一下

    <div id="side">此处显示 id "side" 的内容</div>
    <div id="side1">此处显示 id "side1" 的内容</div>
    <div id="main">此处显示 id "main" 的内容</div>

    增加以下css样式:

    #side1 { background: #99FF99; height: 300px; 120px; float: right; }

    把原来#main样式的70%去掉,然后设置左右外边距各120px,让出左右列的宽度

    #main { background: #99FFFF; height: 300px; margin:0 120px; }

    预览一下效果如下:

    也许预览出来的效果和我的不一样,别急,还有一项设置,默认body是有外边距的,所以这里还得设置body的外边距为0;点击css面板上的新建按钮,然后在新建面板中选择:标签(重定义标签外观),然后选择body,设置body的边界为0即可。


      提示:可以先修改部分代码后再运行

    七、三列固定宽度

    三列固定宽度可以在三列自适应基础上添加一个父div,并设置这个div的宽度即可,如下,添加一个id为content的父容器。

    在源代码里选中这三个div,然后点击工具栏上的“插入div标签”按钮,这时弹出的窗口插入项会默认为:在选定的内容旁换行,输入id为content,然后给这个div定义个宽度

    三列固定宽度出来了,要想实现三列固定宽度居中就更方便了,只需设置#content {margin:0 auto;}即可


      提示:可以先修改部分代码后再运行

    八、IE6的3像素bug

    3像素bug是IE6的一个著名的bug,当浮动元素与非浮动元素相邻时,这个3像素的Bug就会出现。看下面这个左列固定,右列液态的例子,css代码如下:

    body { margin:0;}
    #side { float: left; background:#99FF99; height: 300px; 120px;}
    #main { background: #99FFFF; height: 300px;}

    html代码如下:

    <div id="side">此处显示 id "side" 的内容</div>
    <div id="main">此处显示 id "main" 的内容</div>

    下面看看IE6和IE7中的显示效果:

    从截图中明显看出,IE6会在两个div中间加上3px的空隙,那么要解决这个问题,请在#side上加上_margin-right:-3px;记住,前边加上一下划线,这样这个样式专门针对IE6生效。IE7和FF下还会正常显示。

    body { margin:0;}
    #side { float: left; background:#99FF99; height: 300px; 120px; _margin-right:-3px;}
    #main { background: #99FFFF; height: 300px; }

    看看,是不是问题已经解决了。但它不能通过W3C验证。当两列固定宽度时,最好把#main也固定宽度且向右浮动,这样就可以避免IE6的3像素bug了

  • 相关阅读:
    关于32位操作系统和64位操作系统对InstallShield打包的影响
    NEWS: Symantec宣布Wise Package Studio将终止
    InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化
    Basic INFO 在命令行Build InstallShield安装包工程获得压缩安装包
    NEWS InstallShield 2012 Service Pack 1发布
    Basic INFO InstallShield Basic MSI工程中如何在SetupCompleteSuccess界面中启动Readme
    Basic INFO InstallShield的脚本编辑器中如何显示代码行号
    Basic INFO 关于在InstallShield制作的安装包界面中删除InstallShield文字的厂商回复
    Basic INFO InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
    Basic INFO: 创建隐藏文件夹
  • 原文地址:https://www.cnblogs.com/y0umer/p/2809550.html
Copyright © 2011-2022 走看看