有了上边的基础,下面的任务就是要利用html和css制做完成一个完整的网页了。先从头部开始,第三小节时咱们已经把总体框架给搭建好了,就像盖房子同样,总体结构已经出来了,下面就须要填砖分割空间了。先分析下头部:分为两部分,一个是logo靠左侧显示,一个是搜索靠右侧显示,那么布局时插入两个div,一个向左浮动,一个向右浮动的方式来完成。另外还有不少种实现方法,好比logo用h1标签,搜索用span,或者把logo作为背景图片也是能够的,无论采用哪一种方法,要根据页面的需求选用一种最合理的方法。若是要在logo加上连接的话,那么就不能用背景图片的方法了。css
<div id="header">
<div id="logo">此处显示 id "logo" 的内容</div>
<div id="search">此处显示 id "search" 的内容</div>
</div>html
先在header里插入以上两块元素。而后分别插入相应的内容,在logo里插入咱们事先切割好的logo图片,在search里插入一个表单,一个文本框和一个按钮,插入后以下:web
<div id="header">
<div id="logo"><img src="images/logo.gif" width="181" height="45" /></div>
<div id="search">
<form id="form1" name="form1" method="post" action="">
搜索产品
<input type="text" name="textfield" id="textfield" />
<input type="submit" name="button" id="button" value="查询" />
</form>
</div>
</div>数据库
接下来定义css吧,在ps里测量,头部的高度是71px,logo距顶部18px,搜索产品距顶部30px,下面在css里把这些参数都给定义上,看显示的效果和效果图中的效果是否是同样呢?浏览器
#logo { float:left; margin-top:18px;}
#search { float:right; margin-top:30px;}框架
这两项的位置已经差很少了。预览你会发现,搜索框和按钮跟效果图中的不同,这是由于咱们还没对它设置样式,接下来把文本框增长一个class为inp_srh样式,按钮增长btn_srh的样式,而后定义这两个样式的属性。ide
#search { float:right; height:24px; margin-top:30px; color:#444;}
.inp_srh { width:140px; height:17px; padding-left:20px; background:url(../images/srh_bg.gif) 0 0 no-repeat; border:1px solid #cbcbcb;}
.btn_srh { width:58px; height:23px; background:url(../images/btn_srh.gif) 0 0 no-repeat; border:none; cursor:pointer; text-indent:-999em;}
#search * { vertical-align:middle;}布局
咱们给search增长了高度和文字颜色,这点不用多解释,但高度为何是24px,是为了照顾 IE6,你们去掉测试下就知道了;post
inp_srh的宽度和高度并非实际效果图中的宽高,是由于默认状况下文本框带有内边距形成的。另外就是padding的值也会算到总宽度上的;学习
btn_srh就是应用背景图像来实现的,说明一点这里的border的值为none指的是无边框,cursor定义鼠标样式为手形,以前许多朋友用hand,但这个通不过w3c认证。text-indent:-999em这个属性许多朋友可能不理解是干什么用的了,它的做用至关于word中的首行缩进,这里设置成-999,意思是向左侧缩进-999em,这样是否是就看不到文字啦,因此它的做用是将按钮上的文字隐藏,固然也能够在html代码中插入空格代替文字,但这样作有点不太好,在不支持css的设备上查看时,用户不知道这个按钮是干什么的了。因此建议采用这种形式;
有必要解释下最后一行,它的特殊之处在样式名和大括号之间加了一个*号,这里兼容所用的,属于css hack部份内容,是定义这些元素都垂直居中对齐。css hack自己就是无心思的东西,因此不作过多解释,知道当须要垂直居中对齐时就采用这种写法就好了,可是必定不要滥用,这个属性也是有缺陷的,当有英文和中文同时出现时,英文会靠上显示的。有关css hack更多的内容,请参考http://www.aa25.cn/special/css_hack/index.shtml
这些设置完后,把最初搭建框架时设置的header的背景色和底部外边距给去掉吧。
#header { height:71px;}
至此,头部的样式就完成了,下边该制做导航了。分析一下,导航分为一级导航和二级导航,因此我须要在nav下再插入nav_main和nav_son两个块元素。
<div id="nav">
<div id="nav_l"></div>
<div id="nav_r"></div>
<div class="nav_main">
<ul>
<li><a href="#"><span>首页</span></a></li>
<li><a href="#" id="nav_current"><span>企业新闻</span></a></li>
<li><a href="#"><span>企业简介</span></a></li>
<li><a href="#"><span>产品展厅</span></a></li>
<li><a href="#"><span>企业历史</span></a></li>
<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根据须要本身定义的名称,通常用能表达这块内容意思的简洁英文来表示,或者用拼音。有关样式命名上请参考:http://www.aa25.cn/web_w3c/248.shtml。“产品导购”的样式定义以下:
.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文件夹下,地址为:http://www.aa25.cn/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;}
此次没作鼠标划过期边框效果,相对以前的简单一点,须要了解鼠标划过改变边框效果的请学习http://www.aa25.cn/div_css/907.shtml。本例中“热门产品”的图标采用了背景图片,也能够采用一个图片直接插入,但从用户体验的角度来说,这些图片仍是以背景图片插入为好,由于背景图片在整个页面加载过程当中后来加载的。
图片列表完了以后,主体部分就剩下“企业历史”和“招商加盟”两块了。这两块也是应用左右浮动的方式实现。这两块的代码就不贴出来了,一下子看实例。强调一点是这里的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部分的内容。
上边的例子学完后,你会发如今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放到一个文件夹下后,仍是能够正常访问的。总之两种方法各有优劣,根据你的须要采用一种合适的方法。相对路径和相对于根目录路径是能够相互更改的,在站点管理——编辑——高级设置的本地信息里有连接相对于,以下图,默认为文档(就是所说的相对路径),也能够改成站点根目录,相对路径通常为直接目录名,须要返回上级时用../,向上返回两级时用../../;相对于根目录路径始终以/开头,无论该文件如今在哪一级,它都是以根目录开始向下找。