想自学教程的朋友,就来教程巴巴。
教程巴巴
当前位置: 主页 > 图文 > 网页制作教程 >

十天学会DIV+CSS第十天 div+css网页标准布局实例教程(二)(2)

发布时间:2011-04-07 16:18 点击:
分享到:
【评论本教程】 【挑错本教程】
------分隔线----------------------------

<li><a href="#"><span>招商加盟</span></a></li>
<li><a href="#"><span>网上下单</span></a></li>
<li><a href="#"><span>联系我们</span></a></li>
</ul>
</div>
<div class="nav_son">
<ul>
<li><a href="#">企业动态</a></li>
<li><a href="#">领导活动</a></li>
<li><a href="#">产品资讯</a></li>
<li><a href="#">通知公告</a></li>
</ul>
</div>
</div>

先设置nav的高度及背景图片样式。

#nav { height:66px; background:url(../images/nav_bg.gif) 0 0 repeat-x; margin-bottom:8px;}

完了之后该一级菜单和二级菜单的样式了

.nav_main { height:36px; overflow:hidden;}
.nav_main ul li { float:left; font-size:14px; font-weight:bold; margin:5px 5px 0 5px;}
.nav_main ul li a { float:left; display:block; height:26px; line-height:26px; color:#fff; padding-left:20px;}
.nav_main ul li a span { display:block; padding-right:20px;}
.nav_main ul li a:hover { background:url(../images/nav_bg.gif) 0 -163px no-repeat;}
.nav_main ul li a:hover span { background:url(../images/nav_bg.gif) right -163px no-repeat;}
.nav_main ul li a#nav_current { height:31px; line-height:31px; background:url(../images/nav_bg.gif) 0 -132px no-repeat; color:#646464;}
.nav_main ul li a#nav_current span { height:31px; background:url(../images/nav_bg.gif) right -132px no-repeat;}
.nav_son { height:30px;}
.nav_son ul li { float:left; margin-top:4px;}
.nav_son ul li a { display:block; width:78px; height:22px; line-height:22px; text-align:center; color:#6e6e6e;}
.nav_son ul li a:hover { background:url(../images/nav_bg.gif) 0 -198px no-repeat;}

这些样式的作用就不多讲了,以前的课程当中已详细讲解过了,只不过本例使用了双导航菜单而已。现在在浏览器下预览一下吧,看看效果怎么样,是不是和效果图差不多了,但还有最后一步就是两端的圆角没实现,实现圆角的方法也不复杂,只需再增加两行代码和两个样式即可。在nav下nav_main之前增加如下两行代码:

<div id="nav_l"></div>
<div id="nav_r"></div>

然后用样式表定义一个左侧的圆角,一个右侧的圆角。css样式如下:

#nav_l { float:left; height:66px; width:5px; overflow:hidden; background:url(../images/nav_bg.gif) 0 -66px no-repeat; margin-right:10px;}
#nav_r { float:right; height:66px; width:5px; overflow:hidden; background:url(../images/nav_bg.gif) -5px -66px no-repeat;}

预览一下吧,看看头部和导航是不是和效果图中的一样呢

代码片段如下:

六、布局页面——侧边栏

主体部分涉及side和main两部分,的内容比较多,但都不难,本节教程没有增加什么新的知识点,学起来并不吃力。主体部分先从侧边栏说起,讲解如何切图时已经说过,侧边栏可以共用一个样式,下面就先做一个通用的,插入如下html代码

<div class="side_box">
<h2><strong>产品</strong>导购</h2>
<div class="side_con">此处显示 class "side_con" 的内容</div>
</div>

这里的标题采用h2标签,没必要再用个div,还有“产品导购”中“产品”二字是红色字体,这里用strong标签,这样可以省去很多没必要的定义,所以在页面布局当中一定要合理利用每一个标签。讲到这里,有必要说一下第一节教程中讲的为什么不能叫div+css而应该叫xhtml+css了,因为div只是xhtml中的一个标签,叫div+css会让许多朋友误认为遇到块级元素就得用div,造成了div的滥用,而合理利用每个标签,才是web标准设计的一个准则。回过头来定义侧边栏的样式如下:

#side { float:right; width:228px;}
.side_box { margin-bottom:8px;}
.side_box h2 { height:25px; padding:6px 10px 0 10px; background:url(../images/side_bg.gif) 0 0 no-repeat; font-size:14px; color:#444;}
.side_box h2 strong { color:#f30;}
.side_con { padding:10px; background:url(../images/side_bg.gif) 0 bottom no-repeat;}

预览一下效果吧,是不是整体效果出来了,下边就需要定义里边各个部分了。

先看下产品导购部分,内容分为三部分,可以用ul、li列表的形式实现,前边的图标用背景图片来实现,可以在li上设置背景图片,但这样麻烦一点,每个都需要设置,而且还得定位,有个更简便的方法是定义ul的背景图片,因为在切图标时,每个图标之间的间距是按照效果图的间距来切的。

<div class="side_box">
<h2><strong>产品</strong>导购</h2>
<div class="side_con product">
<ul>
<li><strong>语音业务:</strong><a href="#">普通电话</a> | <a href="#">语音数字中继</a></li>
<li><strong>语音业务:</strong><a href="#">普通电话</a> | <a href="#">语音数字中继</a></li>
<li class="product3"><strong>语音业务:</strong><a href="#">普通电话</a> | <a href="#">语音数字中继</a></li>
</ul>
</div>
</div>

细心的用户已发现,这里的class后跟了两个样式名称,说明一个元素是可以定义多个样式的,中间用空格分开。也可以把product样式定义在ul上。

说到可以定义多个样式,强调一点:许多新手朋友常常大量使用,如一个块元素需要设置边框,绿色文字和灰色背景所以就在css里定义:

.border { border:1px solid #f60;}
.color { color:#080;}
.bg { background:#ccc;}

然后在块元素上增加:

<div class="border color bg">此处显示新 Div 标签的内容</div>

其实这是一个非常不好的写法,这样表面看似达到了代码重用性,但实际当中,当需要把其中一个元素的的边框改为2px,怎么改?如果把.border的边框改了,那么所有应用这一样式的元素都改了。如果再在代码中增加一个样式,那么又得去改html代码,和代码和结构分离的理念相违背了。一个好的代码布局,不管以后怎么改风格,只用改样式表,而不用去改html代码,这才真正做到两者分离了。

扯远了,不过这点很重要,新手很容易犯这个毛病。回到刚才的问题上,给第三个li定义了一个product3样式,然后在样式表中定义它的底部边框为无,因为前边定义li的底边框为1px的虚线,而最后一个不需要,所以单独定义个样式把它取消掉,这里的product根据需要自己定义的名称,一般用能表达这块内容意思的简洁英文来表示,或者用拼音。。“产品导购”的样式定义如下:

.product { padding:0px 10px;}
.product ul { background:url(../images/icon2.gif) 5px 12px no-repeat;}
.product ul li { height:58px; padding:14px 0 0 64px; border-bottom:1px dashed #dcdcdc; color:#777;}
.product ul li strong { display:block; height:24px; color:#333;}
.product ul li a { color:#777;}
.product ul li a:hover { text-decoration:underline;}
.product ul li.product3 { border-bottom:none;}

“产品导购”完成后,下边该“使用问答”了。“使用问答”部分都是一问一答的形式,问答各采用不同的图标,而且问的文字加粗了。所以这部分采用dl、dt、dd的形式来完成。

<div class="side_con ask">
<dl>
<dt><a href="#">最新出的这个产品如何使用?</a></dt>
<dd>该产品采用全新的技术,较上一产品有质的飞跃,功能上增强了许多,使用方法更加简便...</dd>
</dl>
<dl>
<dt><a href="#">最新出的这个产品如何使用?</a></dt>
<dd>该产品采用全新的技术,较上一...</dd>
</dl>
<dl>
<dt><a href="#">最新出的这个产品如何使用?</a></dt>
<dd>该产品采用全新的技术,较上一产品有质的飞跃,功能上增强了...</dd>
</dl>
<dl>
<dt><a href="#">最新出的这个产品如何使用?</a></dt>
<dd>该产品采用全新的技术,较上一产品有质的飞跃,功能上增强...</dd>
</dl>
<dl>
<dt><a href="#">最新出的这个产品如何使用?</a></dt>
<dd>该产品采用全新的技术,较上一产品有质的飞跃,功能上增强了许多,使用方法更加简便...</dd>
</dl>
</div>

 

.ask dl { padding:10px 0; border-bottom:1px dashed #dcdcdc;}
.ask dl dt { height:22px; overflow:hidden; font-weight:bold; background:url(../images/icon.gif) 0 -149px no-repeat; padding-left:20px;}
.ask dl dt a { color:#666;}
.ask dl dd { color:#666; background:url(../images/icon.gif) 0 -198px no-repeat; padding-left:20px;}

“使用问答”完成后,侧边栏就剩下“联系我们”了,这个更简单,直接插入图片就行了,然后调整一下位置就可以了。

<div class="side_box">
<h2><strong>联系</strong>我们</h2>
<div class="side_con contact"><a href="#"><img src="images/tel.gif" width="222" height="112" /></a></div>
</div>

 

.contact { padding:2px;}

七、布局页面——主体部分

主体部分可以分三大部分,顶部是幻灯和热点新闻,中间是图片列表,下边是左右两块,先来布局主体部分的顶部。顶部实际上还是个左右两列布局,没什么复杂之处,就不再贴代码了,本节结尾会提供实例的源代码。讲解一点:热点新闻列表中的日期,是用一个span标签写在了内容的前边,然后把span向右浮动就实现了,“个人登录”和“商户登录”的实现方法也是如此。

之前许多朋友问,像标准之路主页的幻灯是怎么实现的?其实实很简单,只要你动动手,就知道怎么做的了。但许多同学遇到个问题不去考虑靠自己能力能否解决,而是上来就问,这是一个很不好的学习态度?先找找办法,如果实在解决不了,再来问也不迟。方法是查看标准之路主页源代码,找到幻灯部分,你会发现有如下一段js代码,而且代码中有几个设置参数的地方,那么要想在自己网站实现这样的功能,直接把这部分代码插入到自己网站相应位置,修改参数中的大小为自己的大小、图片地址为自己的图片地址,还有就是下载swf文件,并改为相应正确的地址。如果你有html基础的话,这些一点都不难,还是那句话,一定要多动手,多动脑。

把如上一段代码拷贝到本例的幻灯图片位置,下载实现幻灯的swf文件到本地images文件夹下,地址为:/v3/images/indexpic.swf,接下来修改/v3/images/indexpic.swf为images/indexpic.swf;修改swf_width和swf_height的值为269和210;files的值为图片路径,links为图片的链接地址,texts为标题名称,中间也是用|分隔,这样就实现了幻灯图片展示了。

幻灯实现后,接下来该中间部分图片列表了,和第六天学习的横向图文列表是一样的。唯一区别就是多了一个标题。在index_top下插入如下代码:

<div id="index_pic">
<h2><span></span></h2>
<ul>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
<li><a href="#"><img src="images/pic4.gif" width="107" height="87" />产品名称</a></li>
</ul>
</div>

 

#index_pic { border:1px solid #dbdbdb; margin-bottom:8px;}
#index_pic h2 { height:28px; background:url(../images/box_tit_bg.gif) 0 0; border-bottom:1px solid #dbdbdb;}
#index_pic h2 span { display:block; height:25px; background:url(../images/rmcp.gif) 12px 6px no-repeat;}
#index_pic ul { padding:0 0 15px 0; overflow:auto; zoom:1;}
#index_pic ul li { width:107px; float:left; margin:15px 0 0px 21px; display:inline; text-align:center;}
#index_pic ul li a { display:block;}
#index_pic ul li img { margin-bottom:3px;}

这次没做鼠标划过时边框效果,相对之前的简单一点。本例中“热门产品”的图标采用了背景图片,也可以采用一个图片直接插入,但从用户体验的角度来讲,这些图片还是以背景图片插入为好,因为背景图片在整个页面加载过程中后来加载的。

图片列表完了之后,主体部分就剩下“企业历史”和“招商加盟”两块了。这两块也是应用左右浮动的方式实现。这两块的代码就不贴出来了,一会儿看实例。强调一点是这里的more:hover的写法,因为more直接加在a上,所以鼠标进过的样式就不用再写a了,或者写成a.more:hover。

八、底部和细节调整

底部比较简单,灰色背景部分可以用h类标签完成,也可以用dl、dt、dd来完成,再或者其它标签也可以,其它的就不再赘述。

底部完成后,最后的步骤是要做一些细节调整,比如该对齐的地方是否对齐,图片的alt属性是否都加上了,在各种浏览器下是否显示一样等等。至此整个前台页面算制作完成了下面的任务就是该用程序来读取数据库里的内容了,来完成整个站点的制作。

浏览器兼容问题一直是让新手朋友头疼的地方,其实只要掌握几个常用浏览器的特性后,不需要过多的css hack就可以解决问题的。本例中使用的css hack大致有:

zoom=1:用来解决自适应高度时IE6的兼容问题(这个属性通不过w3c认证);

display:inline:解决IE6双倍边距bug问题;

*:在样式名和属性中间加*,这个常用在需要垂直居中时使用;

IE6 3像素bug:在布局时采用左右都浮动的办法避免了这个问题;

另外还有一些做法也是为了解决兼容问题而写的,比如固定高度,就是因为各浏览器之间解释差异,为了使显示效果尽可能一样而采用的折中办法。总之遵循一点,css hack能少用尽量少用,这样便于以后维护。

完成这样一个布局方法有多种,本例中所讲解的方法,只是本人的观点,不一定是最好的方法,希望大家通过本本例的学习能做到举一反三,掌握更多的方法。

本侧是左宽右窄型的布局,如果想把两个调换个位置,太简单不过了,只需把#main和#side的向左向右浮动调换一下就实现,这是表格布局所不及的。所以不管#main和#side在html代码中是谁先谁后,而让它们显示在哪里完全是css来完成的。这里建议#main的代码写在#side前边,因为这要在页面加载的过程中会先加载main部分,用户首先看到的是主要内容,搜索引擎收录时也会先找到main部分的内容。

代码片段如下:

点击此处下载实例源代码及psd源文件

九、相对路径和相对于根目录路径

上边的例子学完后,你会发现在html中插入的图片路径是images/pic4.gif,而在css中插入的图片路径是这样的../images/nav_bg.gif,后者比前者多出了../,这是什么意思呢?

这就是相对路径和绝对路径,../表示返回上一级,因为css文件在css文件夹里,图片在images文件夹下,那么layout.css就需要返回上一级找到images文件夹才能找到相应的图片。直接文件夹名或是./开头表示和当前平级,因为index.html和images文件夹平级。不管是带../还是不带,这种写法都叫相对路径;另一种叫相对于根目录路径,它的写法必须以/开始,意思是从根目录开始一级一级向下查找,不管在哪里,要使用pic4.gif这个图片,路径都必须是/images/pic4.gif;还有一种写法叫绝对路径,是以http://加域名开始的,这个不多多说了。

使用相对路径时,当根目录放到一个二级目录下时,文件仍然可以正常访问,而使用相对于根目录路径时,其中一个页面放到其它位置时,照样能关联么相关的图片和其它文件,比如:本例如果用相对于根目录路径的话,把index.html放到一个文件夹下后,还是可以正常访问的。总之两种方法各有优劣,根据你的需要采用一种合适的方法。相对路径和相对于根目录路径是可以相互更改的,在站点管理——编辑——高级设置的本地信息里有链接相对于,如下图,默认为文档(就是所说的相对路径),也可以改为站点根目录,相对路径一般为直接目录名,需要返回上级时用../,向上返回两级时用../../;相对于根目录路径始终以/开头,不管该文件现在在哪一级,它都是以根目录开始向下找。