zoukankan      html  css  js  c++  java
  • css实例

        从图中可以看出整个页面分为头部区域、导航区域、主体部分和底部,其中主体部分又分为左右两列,整个页面居中显示,看明白了这点,下边的框架就好搭建了。整体框架结果图如下:

    搭建框架

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

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

    <div id="maincontent">

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

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

    </div>

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

        从上边的效果图分析得知,整个网页是居中浏览器显示的,按照这样的写法需要把以上的headernavmaincontentfooter都 设置宽度并居中,这样做起来很麻烦,所以再在这些标签外增加一下父标签,设置这个父标签宽度并居中后,是不是所有的标签都居中了呢。增加后的代码如下: <div id="container"> <div id="header">此处显示 id "header" 的内容</div> <div id="nav">此处显示 id "nav" 的内容</div> <div id="maincontent">  <div id="main">此处显示 id "main" 的内容</div>  <div id="side">此处显示 id "side" 的内容</div> </div> <div id="footer">此处显示 id "footer" 的内容</div> </div>     html框架代码写完后,下边就需要设置css样式表了。先测量下效果图的整体宽度,然后设置container也是这个宽度并居中。说起测量效果 图宽度,方法有多种,可以直接查看图片尺寸。如果测量其中某一块的宽度,可以使用测量软件,也可以在ps下测量。 整体宽度为900pxmain部的宽度为664pxside宽度为228px。把这三个基本的宽度测量后,下面就可以写css代码 了由于本实例是按照实际当中应用来做的,所以css样式表就最好写在单独文件里了,不要再写在文件内部了,这样可以利用代码的重用性,减少很多劳动强度。    下面就新建一个css样式表文件:创建后保存在css文件夹中并命名为 layout.css 设置全局的样式,而后写每一块单独的样式,全局样式如下: body { margin:0 auto; font-size:12px; font-family:Verdana; line-height:1.5;} ul,dl,dd,h1,h2,h3,h4,h5,h6,form,p { padding:0; margin:0;} ul { list-style:none;} img { border:0px;} a { color:#05a; text-decoration:none;} a:hover { color:#f00;} 全局的样式定义完后,下面定义以上几大块的样式,先设置下#containerr的样式如下: #container { 900px; margin:0 auto;}

    /*header*/

    #header { height:70px; background:#CCFFCC; margin-bottom:8px;}

    #nav { height:30px; background:#CCFFCC; margin-bottom:8px;}

    /*main*/

    #maincontent { margin-bottom:8px;}

    #main { float:left; 664px; height:500px; background:#FFFF99;}

    #side { float:right; 228px; height:500px; background:#FFCC99;}

    /*footer*/

    #footer { height:70px; background:#CCFFCC;}     

        现在预览一下:在IE6#maincontent的底部外边距并没有生效,而在IE8下,#footer干脆跑到#maincontent的下边 了,这又是怎么回事呢?这就是之前我们讲的,如果一个容器内的元素都浮动的话,那么它的高度将 不会去适应内部元素的高度。解决办法是在#maincontent增加 overflow:autol; zoom:1;,这样就可以让它自动适应内部元素的高度了。

        现在再预览一下,是不是都正常了。为了更加保险,建议在headernavmaincontentfooter之间增加如下一句代码并设置css样式如下,它的作用是清除浮动。

    <div class="clearfloat"></div>

    .clearfloat {clear:both;height:0;font-size: 1px;line-height: 0px;}

    布局页面——头部和导航   

        有了上边的基础,下面的任务就是要利用htmlcss制作完成一个完整的网页了。先从头部开始,前面我们已经把整体框架给搭建好了,就像盖 房子一样,整体结构已经出来了,下面就需要填砖分割空间了。先分析下头部:分为两部分,一个是logo靠左侧显示,一个是搜索靠右侧显示,那么布局时插入 两个div,一个向左浮动,一个向右浮动的方式来完成。另外还有很多种实现方法,比如logoh1标签,搜索用span,或者把logo做为背景图片也 是可以的,不管采用哪种方法,要根据页面的需求选用一种最合理的方法。如果要在logo加上链接的话,那么就不能用背景图片的方法了。 <div id="header"> <div id="logo">此处显示 id "logo" 的内容</div> <div id="search">此处显示 id "search" 的内容</div> </div> 先在header里插入以上两块元素。然后分别插入相应的内容,在logo里插入我们事先切割好的logo图片,在search里插入一个表单,一个文本框和一个按钮,插入后如下:

    <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里测量,头部的高度是71pxlogo距顶部18px,搜索产品距顶部30px,下面在css里把这些参数都给定义上,看显示的效果和效果图中的效果是不是一样呢?

    #logo { float:left; margin-top:18px;} #search { float:right; margin-top:30px;}

        这两项的位置已经差不多了。预览你会发现,搜索框和按钮跟效果图中的不一样,这是因为我们还没对它设置样式,接下来把文本框增加一个classinp_srh样式,按钮增加btn_srh的样式,然后定义这两个样式的属性。

    #search { float:right; height:24px; margin-top:30px; color:#444;}

    .inp_srh { 140px; height:17px; padding-left:20px; background:url(../images/srh_bg.gif) 0 0 no-repeat; border:1px solid #cbcbcb;}

    .btn_srh { 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,大家去掉测试下就知道了; inp_srh的宽度和高度并不是实际效果图中的宽高,是因为默认情况下文本框带有内边距造成的。另外就是padding的值也会算到总宽度上的; btn_srh就是应用背景图像来实现的,说明一点这里的border的值为none指的是无边框,cursor定义鼠标样式为手形,之前许多同学 用hand,但这个通不过w3c认证。text-indent:-999em这个属性许多同学可能不理解是干什么用的了,它的作用相当于word中的首行 缩进,这里设置成-999,意思是向左侧缩进-999em,这样是不是就看不到文字啦,所以它的作用是将按钮上的文字隐藏,当然也可以在html代码中插 入空格代替文字,但这样做有点不太好,在不支持css的设备上查看时,用户不知道这个按钮是干什么的了。所以建议采用这种形式;

        有必要解释下最后一行,它的特殊之处在样式名和大括号之间加了一个*号,这里兼容所用的,属于css hack部分内容,是定义这些元素都垂直居中对齐。css hack本身就是无意思的东西,所以不做过多解释,知道当需要垂直居中对齐时就采用这种写法就行了,但是一定不要滥用,这个属性也是有缺陷的,当有英文和 中文同时出现时,英文会靠上显示的。

           这些设置完后,把最初搭建框架时设置的header的背景色和底部外边距给去掉吧。

    #header { height:71px;}

          至此,头部的样式就完成了,下边该制作导航了。分析一下,导航分为一级导航和二级导航,所以我需要在nav下再插入nav_mainnav_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; 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;}

            看看效果怎么样,是不是和 效果图差不多了,但还有最后一步就是两端的圆角没实现,实现圆角的方法也不复杂,只需再增加两行代码和两个样式即可。

        在navnav_main之前增加 如下两行代码:

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

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

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

    css样式如下:

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

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

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

     布局页面——侧边栏

          主体部分涉及sidemain两部分,的内容比较多,但都不难,主体部分先从侧边栏说起,讲解如何切图时已经说过,侧边栏可以共用一个样式,下面就先做一个通用的,插入如下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; 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;}

          预览一下效果吧,是不是整体效果出来了,下边就需要定义里边各个部分了。     先看下产品导购部分,内容分为三部分,可以用ulli列表的形式实现,前边的图标用背景图片来实现,可以在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;}     “产品导购完成后,下边该使用问答了。使用问答部分都是一问一答的形式,问答各采用不同的图标,而且问的文字加粗了。所以这部分采用dldtdd的形式来完成。 <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.swfimages/indexpic.swf;修改swf_widthswf_height的 值为269210files的值为图片路径,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 { 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类标签完成,也可以用dldtdd来完成,再或者其它标签也可以,其它的就不再赘述。     底部完成后,最后的步骤是要做一些细节调整,比如该对齐的地方是否对齐,图片的alt属性是否都加上了,在各种浏览器下是否显示一样等等。至此整个前台页面算制作完成了下面的任务就是该用程序来读取数据库里的内容了,来完成整个站点的制作。

            浏览器兼容问题一直是让新手朋友头疼的地方,其实只要掌握几个常用浏览器的特性后,不需要过多的css hack就可以解决问题的。本例中使用的css hack大致有:zoom=1:用来解决自适应高度时IE6的兼容问题(这个属性通不过w3c认证); display:inline:解决IE6双倍边距bug问题; *:在样式名和属性中间加*,这个常用在需要垂直居中时使用; IE6 3像素bug:在布局时采用左右都浮动的办法避免了这个问题;

           另外还有一些做法也是为了解决兼容问题而写的,比如固定高度,就是因为各浏览器之间解释差异,为了使显示效果尽可能一样而采用的折中办法。总之遵循一点,css hack能少用尽量少用,这样便于以后维护。          完成这样一个布局方法有多种,本例中所讲解的方法,只是本人的观点,不一定是最好的方法,希望大家通过本本例的学习能做到举一反三,掌握更多的方法。

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

  • 相关阅读:
    springboot的build.gradle增加阿里仓库地址以及eclipse增加lombok
    mqttfx无法选择证书
    EMQX源码编译过程
    新环境chart包helmlint校验
    安装rebar3
    Ubuntu16.04下,erlang安装和rabbitmq安装步骤
    UTF-8,GBK,ANSI之间的关系和区别
    write命令
    bunzip2命令
    bzip2命令
  • 原文地址:https://www.cnblogs.com/ince/p/9674350.html
Copyright © 2011-2022 走看看