zoukankan      html  css  js  c++  java
  • 《锋利的jQuery》读书要点笔记6——制作商城网页:结构和样式设计

    第8章 用jQuery打造个性网站

    做一个购物网站并用jQuery来完善。大体步骤是:

    收集素材

    确定网站结构

      A. 文件结构,imagea文件夹用来存放将要用到的图片,styles文件夹存放CSS,scripts存放jQuery脚本。首页和商品详情页。

       

      B. 网页结构:

      

       用HTML来把大致的框架给搭好:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Jane Shopping</title>
    </head>
    <body>
        <div id="header"></div>
        <div id="content"></div>
        <div id="footer"></div>
    </body>
    </html>

    页面设计 

    本书使用的是Photoshop。页面最终效果确定下来后,便可以设计CSS代码了。首页和详情页的效果如下:

           

     网站样式

     将CSS文件分门别类。有了设计好的网站视觉效果,接下来的任务是将其以网页形式呈现出来。CSS代码放在一个文件里, 网页中引用这个样式文件即可(其实就是外联式的CSS使用):

    这本书的作者推荐先写全局样式,再编写可大范围内重用的样式,最后再编写细节样式。

    编写全局样式

     


    全局样式reset.css, 主要用来编写一些全局样式:

    body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0;}
    body,button,input,select,textarea{font:12px/1.5 tahoma,arial,5b8b4f53;}
    h1,h2,h3,h4,h5,h6{font-size:100%;}
    address,cite,dfn,em,var{font-style:normal;}
    code,kbd,pre,samp{font-family:courier new,courier,monospace;}
    small{font-size:12px;}
    ul,ol{list-style:none;}
    a{text-decoration:none;}
    a:hover{text-decoration:underline;}
    sup{vertical-align:text-top;}
    sub{vertical-align:text-bottom;}
    legend{color:#000;}
    fieldset,img{border:0;}
    button,input,select,textarea{font-size:100%;}
    table{border-collapse:collapse;border-spacing:0;}
    .clear{clear: both;float: none;height: 0;overflow: hidden;}
    html .hide{display:none;}

     编写重用样式

    首页和详情页都有头部和商品推荐这两部分,这两个样式表是可以重用的。头部的HTML结构:

    <div id="header">
            <div class="contWidth">
                <a href="#" class="log"></a>
                <div class="search"></div>
                <ul id="skin"></ul>
                <div class="mainNav" id="nav"></div>
            </div>
        </div>

    主要有四块内容:Logo,搜索框,皮肤切换和导航菜单。

    先为最外面的元素定义样式:

    #header{
        background: url("../images/headerbg.png") repeat-x scroll 0 0 #FFFFFF;
        height: 105px;
    }
    #header .contWidth {
        position: relative;
        height: 105px;
        margin: 0 auto;
        width: 990px;
        z-index: 100;
    }

     上面把头部的宽度定位990px,然后用 margin:0 auto  使其居中显示。接下来定义Logo、搜素框、皮肤切换和导航菜单的样式。

    Logo部分的HTML代码如下:

    <a href="#nogo" class="logo">
    <img src="images/logo.gif" alt="Jane Shop">
    </a>

    Logo的样式:

    #header .logo { 
        float:left; 
        margin:0 0 0 10px; 
        color:#FFF; 
        line-height:80px;
    }

    搜索部分的HTML代码:

    <div class="search">
    <input type="text" id="inputSearch" value="请输入商品名称" class=""/>
    </div>

     

    #header .search {
        left: 198px;
        position: absolute;
        top: 20px;
    }

     皮肤切换

    #skin { 
        float:right; 
        margin:10px; 
        padding:4px; 
        width:120px; 
    }
    #skin li { 
        float:left; 
        margin-right:4px; 
        width:15px; 
        height:15px; 
        text-indent:-9999px; 
        overflow:hidden; 
        display:block; 
        cursor:pointer; 
        background-image:url("../images/theme.gif"); 
    }

     为了使不同的li元素显示不同的背景图,可以使用backgrround-posotion属性来定位背景图:

    #skin_0 { background-position:0px 0px; }
    #skin_1 { background-position:15px 0px; }
    #skin_2 { background-position:35px 0px; }
    #skin_3 { background-position:55px 0px; }
    #skin_4 { background-position:75px 0px; }
    #skin_5 { background-position:95px 0px; }
    #skin_0.selected { background-position:0px 15px; }
    #skin_1.selected { background-position:15px 15px; }
    #skin_2.selected { background-position:35px 15px; }
    #skin_3.selected { background-position:55px 15px; }
    #skin_4.selected { background-position:75px 15px; }
    #skin_5.selected { background-position:95px 15px; }

     导航菜单:

    /*导航样式开始*/
    .mainNav {
        position: absolute;
        top: 68px;
        left: 0;
        height: 37px;
        line-height: 37px;
        width: 990px;
        z-index:100;
        background-color: #4A4A4A;
    }
    .mainNav .nav {
        display: inline;
        float: left;
        margin-left: 25px;
    }
    .mainNav ul li { 
        float:left; 
        display: inline;
        margin-right:14px;
        position: relative ;
        z-index:100;
    }
    .mainNav ul li a { 
        display:block;
        padding:0 8px; 
        font-weight:700;
        color:#fff;
        font-size:14px;
    }
    .mainNav ul li a:hover { 
        background:none; 
    }

     上面只是为一次菜单定义了样式,还需要为二级菜单定义样式,下面是二级菜单要实现的效果

    /* 二级菜单 */
    .jnNav {
        background:#FFFFFF;
        border: 1px solid #B1B1B1;
        border-top:0;
        left: 0;
        overflow: hidden;
        position: absolute;
        top: 37px;
        width: 474px;
        z-index: 1000;
        display:none;
    }
    .jnNav .subitem {
        float: left;
        height: auto !important;
        min-height: 100px;
        padding: 10px 12px;
        width: 450px;
    }
    .jnNav .subitem dl {
        border-top: 1px dashed #C4C4C4;
        overflow: hidden;
        padding: 8px 0;
        float:left;
    }
    .jnNav .subitem .fore {
        border-top-style: none;
        padding-top: 0;
    }
    .jnNav .subitem dt {
        float: left;
        font-weight: bold;
        line-height: 16px;
        padding: 4px 3px;
        text-align: center;
        width: 76px;
    }
    .jnNav .subitem dt a {
        color: #000;
        font-weight: 700;
        font-size:12px;
        padding:0;
    }
    .jnNav .subitem dd {
        float: left;
        overflow: hidden;
        padding: 0;
        width: 364px;
    }
    .jnNav .subitem em {
        border-right: 1px solid #CCCCCC;
        float: left;
        font-style: normal;
        height: 14px;
        line-height: 14px;
        margin: 5px 0;
        padding: 0 8px;
    }
    .jnNav .subitem em a {
        color: #666666;
        white-space: nowrap;
        font-size:12px;
        font-weight:normal;
        padding:0;
    }
    .jnNav .subitem em.noborder {
        border-right: 0 none;
    }

     二级菜单默认不显示,单击一级菜单的标题才显示相应的二级菜单,通过脚本来控制。

    编写主题内容的样式,网站首页的主体部分的HTML结是:

        <div id="content">
            <div class="janshop"></div>
            <div id="jinCatlog"></div>
            <div id="jinImageroll"></div>
            <div id="jinNotice"></div>
            <div id="jinBrand"></div>
        </div>

     为其添加CSS样式:

    #content{
        clear: left;
        margin: 0 auto;
        position: relative;
        width: 990px;
    }
    .janeshop{
        height: 560px;
        overflow: hidden;
        padding: 10px 0;
    }
    /* 商品分类 */
    #jnCatalog{
        float: left;
        height: 560px;
        margin: 0 11px 0 0;
        overflow: hidden;
        width: 187px;
    }
    /* 大屏广告 */
    #jnImageroll {
        float: left;
        height: 320px;
        margin: 0 11px 0 0;
        overflow: hidden;
        position: relative;
        width: 550px;
    }
    #jnNotice{
        float: left;
        height: 321px;
        overflow: hidden;
        width: 230px;
    }
    /* 品牌活动 */
    #jnBrand {
        float: left;
        height: 230px;
        margin: 10px 0 0;
        overflow: hidden;
        width: 790px;
    }

     接下来往主体结构里放置HTML代码来充实网页,首先是商品分类这块:

        <div id="jinCatlog">
                <h2 title="商品分类">商品分类</h2>
                <div class="jinCatainfo">
                    <h3>推荐品牌</h3>
                    <ul>
                        <li><a href="#nogo">耐克</a></li>
                        <li><a href="#nogo" class="promoted">阿迪达斯</a></li>
                        <li><a href="#nogo">达芙妮</a></li>
                        <li><a href="#nogo">李宁</a></li>
                        <li><a href="#nogo">安踏</a></li>
                        <li><a href="#nogo">奥康</a></li>
                        <li><a href="#nogo" class="promoted">骆驼</a></li>
                        <li><a href="#nogo">特步</a></li>
                    </ul>
                    <br class="clear"/>
                    <!-- 重复部分省略 -->
                </div>
            </div>

     为其添加相应的样式:

    /* 商品分类 */
    #jnCatalog{
        float: left;
        height: 560px;
        margin: 0 11px 0 0;
        overflow: hidden;
        width: 187px;
    }
    #jnCatalog h2{
        height:30px;
        line-height:30px;
        color:#fff;
        font-size:12px;
        text-indent:13px;
        background-color:#6E6E6E;
    }
    .jnCatainfo{
        border: 1px solid #6E6E6E;
        border-style: none solid solid;
        border-width: 0 1px 1px;
        height: 524px;
        overflow: hidden;
        padding: 5px 10px 0;
        width: 165px;
    }
    .jnCatainfo h3 {
        border-bottom: 1px solid #EEEEEE;
        height: 24px;
        line-height:24px;
        width: 164px;
    }
    .jnCatainfo ul {
        float: left;
        padding: 0 2px 8px;
    }
    .jnCatainfo li {
        color: #AEADAE;
        float: left;
        height: 24px;
        line-height: 24px;
        width: 79px;
        overflow: hidden;
        position:relative;
    }
    .jnCatainfo li a{
        color: #444444;
    }
    .jnCatainfo li a:hover{
        color: #008CD7;
        text-decoration: none;
    }
    .jnCatainfo li a.promoted{
        color:#F9044E;
    }
    .jnCatainfo li .hot {
        background: url("../images/hot.gif") no-repeat scroll 0 0 transparent;
        height: 16px;
        position: absolute;
        top: 0;
        width: 21px;
    }

     左侧完成后,完成首页主题内容的右侧布局,这部分分为上下两个部分,而上面的部分又分为左右两个部分。先完成上面的部分,HTML结构如下:

    <!-- 大屏广告 start -->
            <div id="jinImageroll">
                <a href="#nogo" id="JS_imagWrap">
                    <img src="imags/ads/1.jpg" alt="相约情人节">
                    <!-- 省略中间重复元素 -->
                    <img src="images/ads/5.jpg" alt="春季新品首发">
                </a>
                <div>
                    <a href="###1"><em>相约情人节</em><em>全场119元起</em></a>
                    <!-- 省略中间重复元素 -->
                    <a href="###5"><em>春季新品发布</em><em>全场</em></a>
                </div>
            </div>
            <!-- 大屏广告 end -->
            <!-- 最新动态 start-->
            <div id="jinNotice">
                <div id="jinMiaosha">
                    <a href="#nogo" class="JS_css"><img src="images/upload/20120216.jpg" alt="冬品清仓"></a>
                </div>
                <div id="jinNoticeInfo">
                    <h2 title="最新动态">最新动态</h2>
                    <ul>
                        <li><a href="###1" class="tooltip" title="活动迎春大促"></a></li>
                        <!-- 省略中间重复元素 -->
                        <li><a href="###6" class="tooltip" title="活动COEY秋季新品全场2.3折起"></a></li>
                    </ul>
                    <br class="clear">
                </div>
            </div>

     为其设置样式:

    #jnImageroll {
        float: left;
        height: 320px;
        margin: 0 11px 0 0;
        overflow: hidden;
        position: relative;
        width: 550px;
    }
    #jnImageroll img {
        position: absolute;
        left: 0;
        top: 0;
    }

     接下来对这大屏广告下方的缩略图设置样式,可以使用position:abolute的方式让缩略图处于最下方,然后使用float:left的方式让缩略图以水平方式排列:

    #jnImageroll div {
        bottom: 0;
        overflow: hidden;
        position: absolute;
        float: left;
    }
    #jnImageroll div a {
        background-color: #444444;
        color: #FFFFFF;
        display: inline-block;
        float: left;
        height: 32px;
        margin-right: 1px;
        overflow: hidden;
        padding: 5px 15px;
        text-align: center;
        width: 79px;
    }
    #jnImageroll div a:hover {
        text-decoration: none;
    }
    #jnImageroll div a em {
        cursor: pointer;
        display: block;
        height: 16px;
        overflow: hidden;
        width: 79px;
    }
    #jnImageroll .last {
        margin: 0;
        width: 80px;
    }
    #jnImageroll a.chos {
        background: url("../images/adindex.gif") no-repeat center 39px #37A7D7;
        color: #FFFFFF;
    }

     "最新动态"部分由于也是列表元素,可以借鉴之前模块的样式设计,css代码如下:

    /* 最新动态 */
    #jnNotice{
        float: left;
        height: 321px;
        overflow: hidden;
        width: 230px;
    }
    #jnMiaosha {
        float: left;
        height: 176px;
        margin-bottom: 10px;
        overflow: hidden;
        width: 230px;
    }
    .JS_css3 img {
        -webkit-transition:1s all;
        -moz-transition:1s all;
        -o-transition:1s all;
        transition:1s all;
    }
    .JS_css3:hover img {
        -webkit-transform:rotate(720deg);
        -moz-transform:rotate(720deg);
        -o-transform:rotate(720deg);
        transform:rotate(720deg);
    }
    #jnNoticeInfo {
        float: left;
        border: 1px solid #DFDFDF;
        height: 133px;
        overflow: hidden;
        width: 228px;
    }
    #jnNoticeInfo h2 {
        height: 23px;
        line-height: 23px;
        border-bottom: 1px solid #DFDFDF;
        text-indent:12px;
    }
    #jnNoticeInfo ul {
        float: left;
        padding: 6px 2px 0 12px;
    }
    #jnNoticeInfo li {
        height: 20px;
        line-height: 20px;
        overflow: hidden;
    }
    #jnNoticeInfo li a{
        color:#666666;
    }
    #jnNoticeInfo li a:hover{
        color: #008CD7;
        text-decoration: none;
    }

     最后一块内容是“品牌活动”部分,HTML代码如下:

        <div id="jinBrand">
                <div id="jinBrandTab">
                    <h2 title="品牌活动">品牌活动</h2>
                    <ul>
                        <li><a href="#nogo" title="运动">运功</a></li>
                        <li><a href="#nogo" title="女鞋">女鞋</a></li>
                        <li><a href="#nogo" title="男鞋">男鞋</a></li>
                        <li><a href="#nogo" title="Applife">童鞋</a></li>
                    </ul>
                </div>
                <div id="jinBrandContent">
                    <div id="jinBrandList">
                        <ul>
                            <li>
                                <a href="###1" class="JS_live"><img src="images/upload/20120217.jpg" alt="耐克"></a>
                                <span><a href="###1">耐克</a></span>
                            </li>
                            <!-- 省略中间重复元素 -->
                            <li>
                                <a href="###4" class="JS_live"><img src="images/upload/20120230.jpg" alt="安踏"></a>
                                <span><a href="###4">安踏</a></span>
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>

    “品牌活动”分为 “jinBrandTab” 和 “jinBrandContent” ,jinBrandTab的css代码如下:

    /* 品牌活动 */
    #jnBrand {
        float: left;
        height: 230px;
        margin: 10px 0 0;
        overflow: hidden;
        width: 790px;
    }
    #jnBrandTab {
        border-bottom: 1px solid #E4E4E4;
        height: 29px;
        position: relative;
        width: 790px;
        float: left;
    }
    #jnBrandTab h2 {
        height: 29px;
        line-height: 29px;
        left: 0;
        position: absolute;
        width: 100px;
    }
    #jnBrandTab ul {
        position: absolute;
        right: 0;
        top: 10px;
    }
    #jnBrandTab li {
        float: left;
        margin: 0 10px 0 0;
    }
    #jnBrandTab li a {
        background-color: #E4E4E4;
        color: #000000;
        display: inline-block;
        height: 20px;
        line-height: 20px;
        padding: 0 10px;
    }
    #jnBrandTab .chos {
        background: url("../images/chos.gif") no-repeat scroll 50% bottom transparent;
        padding-bottom: 3px;
    }
    #jnBrandTab .chos a {
        background-color: #FA5889;
        color: #FFFFFF;
        outline: 0 none;
    }

    jinBrand里的内容较多,宽度有限,可以使用overflow:hidden来隐藏多余部分:

    #jnBrandContent {
        float: left;
        height: 188px;
        overflow: hidden;
        margin: 8px 5px;
        width: 790px;
        position: relative;
    }
    #jnBrandList {
        position: absolute;
        left: 0;
        top: 0;
        width: 3200px;
    }
    #jnBrandContent li {
        float: left;
        height: 188px;
        overflow: hidden;
        padding: 0 5px;
        position: relative;
        width: 185px;
    }
    #jnBrandContent li img {
        left: 5px;
        position: absolute;
        top: 0;
    }
    #jnBrandContent li span {
        background-color: #EFEFEF;
        bottom: 0;
        color: #666666;
        display: inline-block;
        font-size: 14px;
        height: 24px;
        line-height: 24px;
        overflow: hidden;
        position: absolute;
        text-align: center;
        width: 183px;
    }
    #jnBrandContent li a {
        color:#666666;
    }
    #jnBrandContent li a:hover{
        color: #008CD7;
        text-decoration: none;
    }

    详情页的主体布局:

    详情页的头部和左部和首页一样,所以只需要修改右侧内容即可。根据前面的效果图,右侧分为左列和右列,左侧有一张大图片,几张小图片和一个选项卡,右列是一些商品的介绍信息。

    详情页面主体布局的HTML结构:

    <div id="content">
        <div class="janeshop">
            <div id="jinCatalog"></div>
            <div id="jinProitem"></div>
            <div id="jinDetails"></div>
        </div>
    </div>

    前面已经为商品分类设置了样式,接下来只要为 jinProitem 和 jinDetails 设置样式即可:

    #jnProitem{
        float: left;
        width: 312px; 
        height: 560px;
        display:inline;
    }
    #jnDetails {
        float: left;
        display:inline;
        overflow: hidden;
        width: 468px;
    }

    产品大图和产品缩略图:

    #jnProitem .jqzoomWrap {
        border: 1px solid #BBBBBB;
        cursor: pointer;
        float: left;
        padding: 0;
        position: relative;
    }
    #jnProitem span {
        clear: both;
        display: block;
        padding-bottom: 10px;
        padding-top: 10px;
        text-align: center;
        width: 320px;
    }
    #jnProitem ul.imgList{
        height: 80px;
    }
    #jnProitem ul.imgList li { 
        float:left;
        margin-right:10px;  
    }
    #jnProitem ul.imgList li img { 
        width:60px; 
        height:60px; 
        padding:1px;
        background:#EEE;
        cursor:pointer; 
    }
    #jnProitem ul.imgList li img:hover { 
        padding:1px; 
        background:#999; 
    }

    产品大图和产品缩略图下面是个选项卡,和第五章实现的选项卡类似:

    .tab .tab_menu { 
        clear:both;
    }
    .tab .tab_menu li { 
        float:left; 
        text-align:center; 
        cursor:pointer; 
        list-style:none; 
        padding:1px 6px; 
        margin-right:4px; 
        background:#F1F1F1;
        border:1px solid #898989; 
        border-bottom:none;
    }
    .tab .tab_menu li.hover { 
        background:#DFDFDF;
    }
    .tab .tab_menu li.selected { 
        color:#FFF; 
        background:#6D84B4;
    }
    .tab .tab_box { 
        clear:both; 
        border:1px solid #898989;
    }
    .tab .hide{
        display:none
    }

     最后剩下的便是右列的详细说明部分,包括尺寸评分什么的。


    总结:前端的页面设计实在是太......,我都不明白前端的人是怎么记住这些乱七八糟的CSS属性的....。总结下这章设计样式的基本思路就是:先确定大致结构,网页由哪几个模块组成,再一个模块一个模块的添东西,添好后再设置其样式,这样完成一个模块后再做另一个模块。确定了总体结构后,先为这个结构设计个页面通用的样式。再往下模块细分的时候设计更具体的样式。

  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/f91og/p/6444286.html
Copyright © 2011-2022 走看看