## 前言 京东是典型的电商类网站,学习这个网站的制作比较有价值。我们准备用WebStorm进行开发。 ### 页面规划:新建一个空的工程 我们首先新建一个空的工程: ![](http://img.smyhvae.com/20180118_1733.png) ### CSS初始化(基本样式) 京东网站有一些基本样式,在各个页面中都要用到:(将这些基本样式copy到css.base里面去) base.css中的公共的部分: ```css @charset "UTF-8"; /*css 初始化 */ html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img { margin:0; padding:0; } fieldset, img,input,button { border:none; padding:0;margin:0;outline-style:none; } /*去掉边框、去掉轮廓(比如输入框外面的蓝边框)*/ /*去掉列表前面的圆点*/ ul, ol { list-style: none; } input { padding-top:0; padding-bottom:0; font-family: "SimSun","宋体";} /*字体一般是指定这两个*/ select, input { vertical-align:middle;} select, input, textarea { font-size:12px; margin:0; } textarea { resize:none; } /*禁止文本输入框在右下角拖拽(因为拖动后会调整输入框大小)*/ img {border:0; vertical-align:middle; } /* 去掉图片底侧默认的3像素空白缝隙*/ table { border-collapse:collapse; } body { font:12px/150% Arial,Verdana,"\5b8b\4f53"; /*\5b8b\4f53指的是宋体*/ color:#666; background:#fff } /*start:清除浮动【推荐此方式进行清除浮动】。左浮动和右浮动都清除了,盒子刚好达到闭合的状态*/ .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; /*IE/7/6*/ } /*end:清除浮动*/ a {color:#666; text-decoration:none; } /*去掉超链接的下划线*/ a:hover{color:#C81623;} /*鼠标悬停时的颜色*/ h1,h2,h3,h4,h5,h6 {text-decoration:none;font-weight:normal;font-size:100%;} /*font-size:100% 的意思是:让它们和父亲一样大,避免在不同的浏览器中显示大小不一致*/ s,i,em{font-style:normal;text-decoration:none;} /*去掉i标签和em的斜体,取消s标签的删除线*/ .col-red{color: #C81623!important;} /*公共类*/ .w { /*版心(可视区)。需要专门提取出来 */ width: 1210px; margin: 0 auto; } .fl { float: left } .fr { float: right } .al { text-align: left } .ac { text-align: center } .ar { text-align: right } .hide { display: none } ``` 上方代码解释: (1)**清除浮动**的方式: ```css .clearfix:before, .clearfix:after { content: ""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; /*IE/7/6*/ } ``` 这是如今比较流行的清除浮动的方式。比如小米官网就是采用的这种。 (2)其他属性: 我们给`fieldset, img,input,button`等标签设置了`outline-style:none`,意思去掉轮廓(比如去掉输入框外面的蓝边框,去掉之后,蓝色没有了,但是黑色依然存在)。去掉的原因是:首先,轮廓不好看;其次,在google浏览器和在火狐浏览器上,渲染的效果不同。 img标签中,我们通过`vertical-align:middle`属性**去掉图片底侧默认的3像素空白缝隙**,还有一种方法可以达到效果,那就是`display: block`。 给`h1,h2,h3,h4,h5,h6`设置**`font-size:100%`**是因为:h标签在每个浏览器中显示的大小不一致,设置此属性则表示,**让它们都和父亲一样大**。 (3)一些小标记 `s`是删除线,`i`和`em`是斜体。我们经常用它们做一些小装饰、小图标。 ### 引入css文件 base.css初始化之后,我们需要在html文件中引入它。引入外部样式表的方式如下:(`stylesheet`指样式表) ```html ``` 效果如下: ![](http://img.smyhvae.com/20180118_2002.png) 注意,**base.css和index.css的书写顺序不能颠倒**,因为是按照书写顺序,从上往下进行加载的。 ### Favicon 小图标 Favicon 图标指的是箭头处这个小图标: ![](http://img.smyhvae.com/20180118_2013.png) 官网链接可以下载这个小图标。 我们把`favicon.ico`图片放到工程文件的根目录,通过下面这种方式进行加载: ```html ``` 注意,`shortcut icon`是Favicon的专有名词,不能改成别的单词。 代码位置: ![](http://img.smyhvae.com/20180118_2020.png) ## 顶部导航的制作 我们先制作下面这个部分,它位于网站的最顶部: ![](http://img.smyhvae.com/20180118_2040.png) 顶部导航栏的html结构如下:(直接放在body标签下) ```html
送至:北京
  • 你好,请登录    免费注册
  • 我的订单
  • 我的京东
  • 京东会员
  • 企业采购
  • 手机京东
  • 关注京东
  • 客户服务
  • 网站导航
``` 顶部导航栏需要加入的css样式如下:(放到base.css中) ```css /*顶部导航start*/ .shortcut { height: 30px; line-height: 30px; background-color: #f1f1f1; } .dt, .shortcut .fore { padding: 0 20px 0 10px; position: relative; } .dt i, .fore i { font: 400 15px/15px "宋体"; position: absolute; top: 13px; right: 3px; height: 7px; overflow: hidden; width: 15px; } .dt s, .fore s { position: absolute; top: -8px; left: 0; } .fr li { float: left; padding: 0 10px; } .fr .line { width: 1px; height: 12px; background-color: #ddd; margin-top: 9px; padding: 0; } .shortcut .tel-jd { padding: 0 20px 0 25px; } .tel { position: absolute; width: 15px; height: 20px; background: url(../images/sprite.png) no-repeat; left: 5px; top: 5px; } /*顶部导航end*/ ``` css代码解释: (1)整个的顶部导航栏是一个shortcut: ```css .shortcut { height: 30px; line-height: 30px; background-color: #f1f1f1; } ``` 然后将左侧的文字设置为左浮动,右侧的文字设置为右浮动。 (2)完成左侧部分的文字。 (3)右侧部分文字的结构:ul中放了九个li,用来存放文字。代码快捷键是`ul>li*9`(符号`>`是包含的关系)。 需要注意的是,“登录”和“注册”是同一个
  • 里面的两个``。它们是一个整体,所以要放到同一个li里。 (4)文字中间的间隔线: ![](http://img.smyhvae.com/20180119_1503.png) 上图所示,我们发现,每个li之间都有`1像素宽、12像素高的间隔线`,这个也是用li做的。 (5)增加文字右侧的小三角。 (6)在`手机京东`这个li中增加手机小图标,这里用到了css精灵图。 京东顶部导航条的工程文件如下: ## 顶部banner图 接下来我们只做顶部的banner图,效果如下: ![](http://img.smyhvae.com/20180122_1020.png) 也就是上图中“1元抢宝”的那个位置。 涉及到的html代码如下: ```html ``` 在base.css中涉及到的css代码如下: ```css /*topbanner start*/ .topbanner { background-color: #8A25C6; } .close-banner { position: absolute; right:0; top:5px; width: 19px; height: 19px; background: url(../images/close.png) no-repeat; } .close-banner:hover { background-position:bottom; } .tp{ position: relative; } /*topbanner end*/ ``` 代码解释: 重点是`close-banner`这个class,也就是右上角的那个`X`。这里用到了子绝父相,注意,设置相对定位的父亲是`tp`这个class,因为要考虑到网页缩放的情况。 `.close-banner:hover`这个属性里,我们设置的背景图的定位是bottom,意思是,保证精灵图和父亲的底边贴齐,就不用使用像素的方式对精灵兔图进行定位了。 ## 搜索框 搜索框的UI如下: ![](http://img.smyhvae.com/20180122_1301.png) 上图中,包含了四个部分: - 左侧的logo - 中间的搜索框 - 右侧的购物车 - 热搜文字(中间搜索框的下方) 我们在WebStorm中输入`.search-logo+.search-input+.search-car+.search-moreA`,然后按tab键,就可以补齐代码: ```html
    ``` 相关的html代码如下: ```html ``` 相关的css代码如下: ```css /*search部分start*/ .search-logo { float: left; width: 362px; height: 60px; padding: 20px 0; } .search-logo a { width: 270px; height: 60px; display: block; text-indent: -9999px; background: url(../images/logo.png) no-repeat; } .search-input { float: left; height: 36px; padding-top: 25px; } .search-input input { float: left; width: 450px; height: 32px; padding-left: 4px; font: 400 14px/32px "microsoft yahei"; color: rgb(153, 153, 153); border: 2px solid #B61D1D; border-right: 0; } .search-input button { width: 82px; height: 36px; color: #fff; float: left; font: 400 16px/36px "微软雅黑"; background-color: #B61D1D; cursor: pointer; /*cursor: pointer; 变成小手*/ /*cursor: text; 变成光标*/ /*cursor: move; 变成四角箭头*/ /*cursor: default; 变成小白*/ } .search-car { float: right; width: 96px; height: 34px; line-height: 34px; padding-left: 43px; position: relative; margin: 25px 65px 0 0; border: 1px solid #DFDFDF; background-color: #F9F9F9; } .icon1 { position: absolute; top: 9px; left: 18px; width: 18px; height: 16px; background: url(../images/tel.png) no-repeat 0 -58px; } .icon2 { position: absolute; right: 10px; color: #999; /*font-family: "SimSun";*/ font: 13px/34px "SimSun"; } .icon3 { position: absolute; top: -5px; /*left: 0;*/ width: 16px; height: 14px; background-color: #C81623; line-height: 14px; text-align: center; color: #fff; border-radius: 7px 7px 7px 0; /*画圆角矩形*/ } .search-moreAlink { float: left; width: 530px; height: 28px; line-height: 28px; } .search-moreAlink a { margin-right: 8px; } /*search部分end*/ ``` 对于这四个部分,我们依次来讲解。 ### 1、左侧的logo 为了便于SEO,需要给图片这个超链接加上文字,然后设置文字的缩进为`text-indent: -9999px;`。 ### 2、搜索栏 “搜索”按钮:当我们把鼠标放在“搜索”上的时候, 发现鼠标变成了小手,这里是用到了`cursor`属性。 `cursor`有如下属性值: ```css cursor: pointer; /*变成小手*/ cursor: text; /*变成光标*/ cursor: move; /*变成四角箭头*/ cursor: default; /*变成默认的箭头*/ ``` ### 3、购物车 购物车里包含了四个元素:一个文字,三个图标。 为了让文字“我的购物车”这个``上下方向居中,我们给``标签的行高line-height为父亲的高度。 另外,“我的购物车”这四个字并不是水平居中的,于是,我们可以给它一个左侧的padding,而不用给右侧padding。 另外三个小图标可以用绝对定位来做。 右上角的小图标(圆角矩形):它的红色背景不是图片,而是用`border-radius`属性画的**圆角矩形**。 圆角矩形`border-radius`有下面几种画法: ``` border-radius: 宽/高一半; border-radius: 50%; border-radius: 0.3em; border-radius: 左上角 右上角 右下角 左下角; ``` ### 搜索框下方的热搜文字 热搜文字的功能性并不强,仅仅使用几个超链接``标签即可(每个 a 之间用margin隔开)。不需要像别的导航栏那样,在ul里放li,在li里放a。 注意,每个 a 之间是用margin隔开,不是用padding隔开;否则的话,鼠标点击中间的空白处也会出现跳转。 顶部导航条+顶部banner+搜索框的工程文件如下: ## slogen:口号 要求实现的效果如下: ![](http://img.smyhvae.com/20180122_1630.gif) 上图可以看到,这里要实现的效果是:无论浏览器如何移动,要保证第二个slogen的左侧位于浏览器的正中间。这是可以用到绝对定位的知识。 html的代码如下: ```html
    ``` `class=slogen`指的是整个slogen区域。item表示四个口号中相同的部分。 css的代码如下; ```css /*底部的口号 start*/ .slogen { height: 54px; padding: 20px 0; background-color: #f5f5f5; position: relative; margin-bottom: 15px; } .item { width: 302px; position: absolute; top: 20px; left: 50%; } .slogen1 { margin-left: -608px; } .slogen2 { margin-left: -304px; } .slogen3 { margin-left: 2px; } .slogen4 { margin-left: 304px; } /*底部的口号 end*/ ``` 我们给item设置`left: 50%;`,确保每个item移到了父亲的正中间。然后每个item各自移动相应的距离即可实现。 ## 最下方的购物指南&区域覆盖 需要实现的效果如下: ![](http://img.smyhvae.com/20180122_1726.png) 上图中,需要实现的内容包括两个部分:左侧的购物指南和右侧的区域覆盖(我把这两个部分用红线隔开了)。 ### 购物指南 需要使用的布局如下: ![](http://img.smyhvae.com/20170704_1727.png) 这里的重点是要量出dt和dd的行高。 html代码如下: ```html
    ``` 因为这片区域是浮动的,我们要通过`clearfix`这个class清除浮动,防止其被覆盖。 css代码如下: ```css /*购物指南等 start*/ .footer-shopping { margin-top: 16px; /*和上方保持距离*/ } .footer-shopping dl{ float: left; width: 200px; } dl.last-dl { width: 100px; } .footer-shopping dt{ height: 34px; font: 400 16px/34px "microsoft yahei"; } .footer-shopping dd{ line-height: 20px; } /*购物指南等 end*/ ``` ### 区域覆盖 html代码如下: ```html

    京东自营覆盖区县

    京东已向全国2654个区县提供自营配送服务,支持货到付款、POS机刷卡和售后上门服务。

    查看详情 >
    ``` css代码如下: ```css /*覆盖区域 start*/ .coverage { float: left; width: 186px; height: 169px; margin-right: 60px; padding-left: 17px; background: url(../images/china.png) no-repeat left bottom; } .coverage h3 { height: 34px; font: 400 16px/34px "microsoft yahei"; } .coverage p { padding-top: 8px; } .coverage a { float: right; } /*覆盖区域 end*/ ``` 注意这里将精灵图设置为背景时,用到的定位属性是`left bottom`,意思是保证精灵图的左侧跟父亲左侧贴齐,下方和父亲下方贴齐。这样做的话,就不用通过像素来进行定位了。 ## 最底部 最底部的效果如下: ![](http://img.smyhvae.com/20180122_1909.png) 如上图所示,它包含了三个部分。 涉及到的html代码如下: ```html ``` 涉及到的css代码如下: ```css /*最底部start*/ .footer-bottom { margin-top: 20px; text-align: center; /*让文字在容器中水平方向居中*/ padding: 20px 0 30px; border-top: 1px solid #E5E5E5; } .footer-bottom .footer-about a{ margin: 0 10px; } .footer-copyright { padding: 10px 0; } .footer-bottom-img a { margin: 0 5px; } /*最底部end*/ ``` 你去京东官网看看,发现最最底部的文字竟然是图片: ![](http://img.smyhvae.com/20180122_1912.png) ## 总结 以上全部内容,最终实现的效果如下: ![](http://img.smyhvae.com/20180122_1920.png) 对应的工程文件如下: - [2018-01-22-前端基础练习-JD顶部导航.rar](http://download.csdn.net/download/smyhvae/10218487)