品优购项目前端实战

11 篇文章 0 订阅

大致要做这么几个页面:
首页

注册页面
学习目的:

学习目的

项目搭建

创建文件夹
创建文件
模块化开发

favicon

这个就是打开网页时标签所显示的图标,例如:
favicon
上图左侧的图标就是favicon

流程

SEO优化

SEO
title
description

关键字

首页制作

下图是约定好的命名模块:
命名

先做这个玩意:
导航栏

流程

<section class="shortcut">
        <div class="w">
            <div class="fl">
                <ul>
                    <li>品优购欢迎您!&nbsp;&nbsp;</li>
                    <li><a href="#">请登录</a>&nbsp;<a href="#" class="style_red">免费注册</a></li>
                </ul>
            </div>
            <div class="fr">
                right
            </div>
        </div>
    </section>
/* 版心 */
.w {
    width: 1200px;
    margin: 0 auto;
}
.fl {
    float: left;
}
.fr {
    float: right;
}
.style_red {
    color: #c81623;
}
/* 导航栏 */
.shortcut {
    height: 31px;
    background-color: #f1f1f1;
    line-height: 31px;
}
.shortcut ul li {
    float: left;
}

效果(导航栏左侧):
效果
右侧代码:

<div class="fr">
                <ul>
                    <li>我的订单</li>
                    <li></li>
                    <li class="arrow_icon">我的品优购</li>
                    <li></li>
                    <li>品优购会员</li>
                    <li></li>
                    <li>企业采购</li>
                    <li></li>
                    <li class="arrow_icon">关注品优购</li>
                    <li></li>
                    <li class="arrow_icon">客户服务</li>
                    <li></li>
                    <li class="arrow_icon">网站导航</li>
                </ul>
            </div>

css:

/* 选择所有偶数的li */
.shortcut .fr ul li:nth-child(even) {
    width: 1px;
    height: 12px;
    background-color: #666666;
    margin: 9px 15px 0;
}
.arrow_icon::after {
    content: '\e91e';
    font-family: 'icomoon';
    margin-left: 6px;
}

效果(导航栏右侧):
效果

头部制作

左侧logo

头部
分析
分析

logo需要注意的地方:

注意

<header class="header w">
        <div class="logo">
            <h1>
                <a href="index.html" title="品优购商城-首页">品优购商城</a>
            </h1>
        </div>
    </header>
.header {
    position: relative;
    height: 105px;
    background-color: greenyellow;
}
.logo {
    position: absolute;
    top: 25px;
    width: 171px;
    height: 61px;
    background-color: skyblue;
}
.logo a {
    display: block;
    width: 171px;
    height: 61px;
    background: url(../images/logo.png) no-repeat;
    font-size: 0;
}

效果:
效果

搜索模块

注意,行内块元素之间有缝隙,如果想去掉这个缝隙需要加上浮动
这个模块思路如下:

  • 先弄个大盒子search,设置好边框。
  • search中有两个子元素,分别是input和button,将其宽和高分别测量出后还需设置浮动,因为input和button都是行内块元素,不加浮动的话之间会有空隙。
  • input预设置了文字,距离左侧有一定距离,这里使用了padding-left来实现,但不会撑大盒子(上一篇提到过,因为CSS3的新特性box-sizing: border-box;)导致border、padding等设置不会撑大盒子。
<header class="header w">
        <div class="logo">
            <h1>
                <a href="index.html" title="品优购商城-首页">品优购商城</a>
            </h1>
        </div>
        <div class="search">
            <input type="search" placeholder="前端">
            <button>搜索</button>
        </div>
    </header>
.search {
    position: absolute;
    width: 538px;
    height: 36px;
    border: 2px solid #b1191a;
    left: 346px;
    top: 25px;
}
.search input {
    float: left;
    width: 454px;
    height: 32px;
    padding-left: 10px;
}
.search button {
    float: left;
    width: 80px;
    height: 32px;
    background-color: #b1191a;
    color: white;
    font-size: 16px;
}
热词模块

行内元素设置左右margin是可以的
思路如下:

  • 弄一个大盒子hotwords,将其定为到相应位置
  • 在里面添加a标签,由于行内元素可以指定左右margin,因此可实现

效果

我的购物车

注意,给shopcar指定了行高之后,也要给count指定一个行高,因为如果不指定count会继承shopcar的行高,导致文字始终在shopcar的中间位置

<div class="shopcar">
            我的购物车
            <i class="count">8</i>
        </div>
.shopcar {
    position: absolute;
    width: 140px;
    height: 35px;
    line-height: 35px;
    text-align: center;
    border: 1px solid #dfdfdf;
    background-color: #f7f7f7;
    top: 25px;
    right: 60px;
}
.shopcar::before {
    font-family: 'icomoon';
    content: '\e93a';
    color: #b1191a;
}
.shopcar::after {
    font-family: 'icomoon';
    content: '\e920';
}
.count {
    position: absolute;
    right: 20px;
    top: -5px;
    height: 14px;
    padding: 0 5px;
    line-height: 14px;
    color: white;
    background-color: #e60012;
    border-radius: 7px 7px 7px 0;
}

效果如下:
效果

导航模块

做出如下形式:
导航模块
分析
注意,全部商品分类下面还有如下图片:
注意
也就是说下方的电器、手机等标签是对全部商品分类的具体描述,在实现的时候应该把它们放到一起

在这里插入图片描述
实现代码如下:

 <!-- 导航栏 -->
    <nav class="nav">
        <div class="w">
            <div class="dropdown">
                <div class="dt">
                    全部商品分类
                </div>
                <div class="dd">
                    详细信息
                </div>
            </div>
            <div class="navitems">
                
            </div>
        </div>
    </nav>
/* 导航栏开始 */
.nav {
    height: 47px;
    border-bottom: 2px solid #b1191a; 
}
.nav .dropdown {
    float: left;
    width: 210px;
    height: 45px;
    background-color: #b1191a;
}
.nav .navitems {
    float: left;
}
.dropdown .dt {
    width: 100%;
    height: 100%;
    color: #fff;
    font-size: 16px;
    line-height: 45px;
    text-align: center;
}
.dropdown .dd {
    width: 100%;
    height: 465px;
    background-color: #c81623;
}

这里我们让dropdown盒子存放两个子盒子,dt和dd。让dt高度宽度都与dropdown一致,这样dd就会被挤到dt下方,效果如下:
效果

下拉菜单(物品详细分类)

效果图:
效果图

需要注意的地方:我们用li来做这些标签,注意到li和左侧边框有一个小的距离,可用margin-left实现,此外li中的a距离li的左侧也有距离,可用padding-left实现,但这并不会撑开盒子(因为box-sizing: border-box;),此外,after伪元素用来实现右侧的小三角(字体图标)。

代码:

<div class="dd">
	<ul>
	   <li><a href="#">家用电器</a></li>
	   <li><a href="#">手机 、 数码 、 通信</a></li>
	   <li><a href="#">电脑、办公</a></li>
	   <li><a href="#">家居、家具、家装、厨具</a></li>
	   <li><a href="#">男装、女装、童装、内衣</a></li>
	   <li><a href="#">个户化妆、清洁用品、宠物</a></li>
	   <li><a href="#">鞋靴、箱包、珠宝、奢侈品</a></li>
	   <li><a href="#">运动户外、钟表</a></li>
	   <li><a href="#">汽车、汽车用品</a></li>
	   <li><a href="#">母婴、玩具乐器</a></li>
	   <li><a href="#">食品、酒类、生鲜、特产</a></li>
	   <li><a href="#">医药保健</a></li>
	   <li><a href="#">图书、音像、电子书</a></li>
	   <li><a href="#">彩票、旅行、充值、票务</a></li>
	   <li><a href="#">理财、众筹、白条、保险</a></li>
	</ul>
</div>
.dropdown .dd {
    width: 100%;
    height: 465px;
    background-color: #c81623;
}
.dropdown .dd ul li {
    position: relative;
    height: 31px;
    line-height: 31px;
    margin-left: 2px;
    padding-left: 10px;
}
.dropdown .dd ul li::after{
    position: absolute;
    top: 2px;
    right: 5px;
    color: #fff;
    content: "\e920";
    font-family: 'icomoon';
}
.dropdown .dd ul li:hover {
    background-color: #fff;
}
.dropdown .dd ul li a {
    color: #fff;
    font-size: 14px;
}
.dropdown .dd ul li:hover a {
    color: #c81623;
}
导航栏

效果这个效果可以用li包含着a来做,先上代码:

<div class="navitems">
	<ul>
	  <li><a href="#">服装城</a></li>
	  <li><a href="#">美妆馆</a></li>
	  <li><a href="#">传智超市</a></li>
	  <li><a href="#">全球购</a></li>
	  <li><a href="#">闪购</a></li>
	  <li><a href="#">团购</a></li>
	  <li><a href="#">拍卖</a></li>
	  <li><a href="#">有趣</a></li>
	</ul>
</div>
.navitems ul li {
    float: left;
    line-height: 45px;
    /* padding: 0 25px; */
}
.navitems ul li a {
    display: block;
    height: 45px;
    font-size: 16px;
    padding: 0 25px;
}

注意,这里给li左右加上padding也可以实现这个效果,但给a加padding会扩大a标签的点击范围,用户体验更好,加margin也可以,但问题也是无法扩大a的点击范围。此外,为了在a上方点击时也可以选中a的链接,要将其转换成块级元素(行内块也行?但有空隙)然后设置高度。

footer部分

我们到目前为止做的都是公共部分(即多个页面都会用到的部分),这个footer也是。

分析

先做最上面那行,可以用li来做,对于每个li,我们在里面加两个盒子,左盒子放图标,右盒子放文字,右盒子还要分上下盒子:

<footer class="footer">
        <div class="w">
            <div class="mod_service">
                <ul>
                    <li>
                        <h5></h5>
                        <div class="text">
                            <h4>正品保障</h4>
                            <p>正品保障,提供发票</p>
                        </div>
                    </li>
                    <li>s</li>
                    <li>c</li>
                    <li>z</li>
                </ul>
            </div>
        </div>
    </footer>
.footer {
    height: 415px;
    background-color: #f5f5f5;
    padding-top: 30px;
}
.mod_service {
    height: 80px;
    border-bottom: 1px solid red;
}
.mod_service ul li {
    float: left;
    width: 300px;
    height: 50px;
    background-color: skyblue;
    padding-left: 35px;
}
.mod_service ul li h5 {
    float: left;
    height: 50px;
    width: 50px;
    background-color: green;
    margin-right: 8px;
}
.text h4 {
    font-size: 14px;
}
.text p {
    font-size: 12px;
}

效果:
效果
注意,这里用到了文字环绕,让左面的盒子浮动,文字就会环绕显示

至于图标,用到了精灵图(调整坐标即可):

.mod_service ul li h5 {
    float: left;
    height: 50px;
    width: 50px;
    background: url(../images/icons.png) no-repeat -252px -2px;
    margin-right: 8px;
}

效果:
效果
接下来开始做第二部分,我们还是先弄一个有底边框的盒子(被紫框挡上了),然后在里面加东西:

 <div class="mod_help">
	   <dl>
	       <dt>购物指南</dt>
	       <dd><a href="#">购物流程</a></dd>
	       <dd><a href="#">会员介绍</a></dd>
	       <dd><a href="#">生活旅行/团购</a></dd>
	       <dd><a href="#">常见问题</a></dd>
	       <dd><a href="#">大家电</a></dd>
	       <dd><a href="#">联系客服</a></dd>
	   </dl>
		<dl>
	       <dt>帮助中心</dt>
	       <dd>
	           <img src="images/wx_cz.jpg" alt="">
	           品优购客户端
	       </dd>
	   </dl>
	</div>
.mod_help {
    height: 185px;
    border-bottom: 1px solid #ccc;
    padding-top: 20px;
    padding-left: 50px;
}
.mod_help dt {
    font-size: 16px;
    margin-bottom: 10px;
}
.mod_help dl {
    float: left;
    width: 200px;
}
.mod_help dl:last-child {
    width: 90px;
    text-align: center;
}

效果:

效果

由于这里有多处重复,就省略了。我们使用dl、dt来做这部分,需要注意的是最后一个dl的宽度不需要那么宽(若都设置成200px就会被挤下去)。

现在做第三部分,这部分就比较简单了:

<div class="mod_copyright">
    <div class="info">
        关于我们 | 联系我们 | 联系客服 | 商家入驻 | 营销中心 | 手机品优购 | 友情链接 | 销售联盟 | 品优购社区 | 品优购公益 | English Site | Contact U
    </div>
    <div class="copyright">
        地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096 电话:400-618-4000 传真:010-82935100 邮箱: zhanghj+itcast.cn
        <br>京ICP备08001421号京公网安备110108007702
    </div>
</div>
.mod_copyright {
        text-align: center;
        padding-top: 20px;
}
.mod_copyright .info {
    margin-bottom: 15px;
}

效果:
效果

以上所写都是通用的部分,下面开始写非公共的部分。

主体模块

主体模块

我们要新建一个css文件:index.css
观察结构,其实左面那部分我们已经做完了,只剩右面,一个大盒子里面再来两个小盒子,分别装轮播图(焦点图)和快报信息。

但要注意,右面的大盒子不要被左面的详细信息给压住,因此要用margin给它挤到右边。

在这里插入图片描述

焦点图

<div class="w">
	<div class="main">
	   <div class="focus">
	       <ul>
	           <li><img src="./upload/focus.jpg" alt=""></li>
	       </ul>
	   </div>
	   <div class="newsflash">
	
	   </div>
	</div>
</div>
.main {
    width: 980px;
    height: 455px;
    margin-left: 220px;
    margin-top: 8px;
}
.main .focus {
    float: left;
    height: 455px;
    width: 721px;
    background-color: green;
}
.main .newsflash {
    float: right;
    width: 250px;
    height: 455px;
    background-color: yellow;
}

效果:
效果
要注意的是,不推荐直接在中间focus的div标签中直接插入图片,因为我们想做成轮播的形式(后面学到js会提到),要用li来做。

快报

分析
这部分的框架如下:

<div class="newsflash">
	 <div class="news">
	     <div class="new_hd">
	         <h5>
	             品优购快报
	         </h5>
	         <a href="#">更多</a>
	     </div>
	     <div class="news_bd">
	
	     </div>
	 </div>
	 <div class="lifeservice">
	
	 </div>
	<div class="bargain">
	   <img src="./upload/bargain.jpg" alt="">
	</div>
</div>
.news {
    height: 165px;
    background-color: red;
}
.lifeservice {
    height: 209px;
    background-color: green;
}
.bargain {
    margin-top: 5px;
}

上图的右上角如何做?
分析

 <div class="news">
   <div class="new_hd">
       <h5>
           品优购快报
       </h5>
       <a href="#">更多</a>
   </div>
   <div class="news_bd">
       <ul>
           <li><a href="#"><strong>[特惠]</strong> 爆款耳机5折秒!</a></li>
           <li><a href="#"><strong>[特惠]</strong> 爆款耳机5折秒!</a></li>
           <li><a href="#"><strong>[特惠]</strong> 爆款耳机5折秒!</a></li>
           <li><a href="#"><strong>[特惠]</strong> 爆款耳机5折秒!</a></li>
           <li><a href="#"><strong>[特惠]</strong> 爆款耳机5折秒!</a></li>
       </ul>
   </div>
</div>
.new_hd {
    height: 33px;
    line-height: 33px;
    border-bottom: 1px dotted #e4e4e4;
    padding: 0 15px;
}
.new_hd h5 {
    float: left;
    font-size: 14px;
}
.new_hd a {
    float: right;
}
.new_hd a::after{
    font-family: 'icomoon';
    content: "\e920";
}
.news_bd {
    padding-top: 5px;
    padding-left: 21px;
}
.news_bd li {
    height: 24px;
    line-height: 24px;
}

效果:
效果

然后做这个:
效果
这里要注意一下,我们用li实现这个,一行放4个,要给li指定宽度和高度,但有时宽度指定的不太好会导致一行放不下4个,比如这样(每个li宽63px,而lifeservice这个盒子的宽度是250,所以溢出):
效果
这就是被挤出来的情况,因为li是包含在ul里的,因此只要扩大ul的宽度就能放的下li了,如(将ul改为63*4=252px):
效果
但这时有在同一行溢出了,我们还观察到在最下面出现了重复的底边框,这是因为之前将lifeservice的高度设置成了209px,而每个li的高度是71px,三个就是213px,这比lifeservice的高度要大一些,所以底部会出现多个底框。可以在lifeservice里添加overflow:hidden来解决:
效果
行内块可以用text-align: center;来居中显示,但块级元素不行?只能用margin:0 auto?

然后就是在每个li里面添加图标(使用精灵图即可):

<div class="lifeservice">
 <ul>
     <li>
         <i></i>
         <p>话费</p>
     </li>
 </ul>
</div>
.lifeservice li {
    float: left;
    width: 63px;
    height: 71px;
    text-align: center;
    border-right: 1px solid #e4e4e4;
    border-bottom: 1px solid #e4e4e4;
    padding-top: 12px;
}
.lifeservice li i {
    display: inline-block;
    width: 24px;
    height: 28px;
    background: url(../images/icons.png) no-repeat -19px -15px;
}

效果:
效果
剩下的如法炮制即可。

这里补充一点,在新闻那里,也就是:
展示
如果某些新闻字数太多,这时应该让其变成省略号,如:
效果
只需加上如下几行代码即可:

.news_bd li {
    height: 24px;
    line-height: 24px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

推荐模块

效果
分析:

分析

 <div class="w recom">
    <divclass="recom_hd">
        <img src="./images/clock.png" alt="">
        <i>今日推荐</i>
    </div>
    <div class="recom_bd">
        <ul>
            <li><img src="./upload/pic.jpg" alt=""></li>
            <li><img src="./upload/pic.jpg" alt=""></li>
            <li><img src="./upload/pic.jpg" alt=""></li>
            <li><img src="./upload/pic.jpg" alt=""></li>
        </ul>
    </div>
</div>
.recom {
    height: 163px;
    background-color: #ebebeb;
    margin-top: 12px;
}
.recom_hd {
    float: left;
    width: 205px;
    height: 163px;
    background-color: #5c5251;
    text-align: center;
    padding-top: 30px;
}
.recom_hd img{
    display: inline-block;
}
.recom_hd i {
    display: block;
    color: white;
    font-size: 16px;
    margin-top: 15px;
}
.recom_bd {
    float: left;
}
.recom_bd li {
    position: relative;
    float: left;
}
.recom_bd li:nth-child(-n+3)::after {
    position: absolute;
    top: 10px;
    right: 0;
    height: 145px;
    width: 1px;
    /* background-color: #ddd; */
    background-color: red;
    content: "";
}

效果:
效果
有一个疑问,在使用after伪元素时如果不指定right那么红线位置就不对,为啥呢?

楼层区

楼层区
分析:

分析
分析

<div class="floor">
        <div class="w jiadian">
            <div class="box_hd">
                <h3>家用电器</h3>
                <div class="tab_list">  # 注意,这里用的tab_list
                    <ul>
                        <li><a href="#" class="style_red">热门</a>|</li>
                        <li><a href="#">大家电</a>|</li>
                        <li><a href="#">生活电器</a>|</li>
                        <li><a href="#">厨房电器</a>|</li>
                        <li><a href="#">个户健康</a>|</li>
                        <li><a href="#">应季电器</a>|</li>
                        <li><a href="#">空气/净水</a>|</li>
                        <li><a href="#">新奇特</a>|</li>
                        <li><a href="#">高端电器</a></li>
                    </ul>
                </div>
            </div>
            <div class="box_bd">
                <div class="tab_content">
                    <div>
                        内容1
                    </div>
                </div>
            </div>
        </div>
    </div>
.box_hd {
    height: 30px;
    border-bottom: 2px solid #c81623;
}
.box_hd h3 {
    float: left;
    font-size: 18px;
    color: #c81623;
}
.box_hd .tab_list {
    float: right;
    line-height: 30px;
}
.box_hd .tab_list li {
    float: left;
}
.box_hd .tab_list li a {
    padding: 0 15px;
}
.floor .w {
    margin-top: 30px;
}
.box_bd {
    height: 361px;
    background-color: yellow;
}

效果:
效果
为什么上面要用tab_list呢?,我们想做到这种效果,即鼠标放在某个标签上下面就会自动显示相应标签的东西。

分析
当点击选项1,tab_content就会把内容1显示出来。也就是说,tab_content中的内容1和tab_list的选项1对应。

2. box_bd 模块
<div class="box_bd">
                <div class="tab_content">
                    <div class="tab_list_item">
                        <div class="col_210">
                            <ul>
                                <li><a href="#">节能补贴</a></li>
                                <li><a href="#">4K电视</a></li>
                                <li><a href="#">空气净化器</a></li>
                                <li><a href="#">IH电饭煲</a></li>
                                <li><a href="#">滚筒洗衣机</a></li>
                                <li><a href="#">电热水器</a></li>
                            </ul>
                            <a href="#">
                                <img src="./upload/floor-1-1.png" alt="">
                            </a>
                        </div>
                        <div class="col_329">
                            <a href="#">
                                <img src="./upload/pic1.jpg" alt="">
                            </a>
                        </div>
                        <div class="col_221">
                            <a href="#" class="bb">
                                <img src="./upload/floor-1-2.png" alt="">
                            </a>
                            <a href="#">
                                <img src="./upload/floor-1-3.png" alt="">
                            </a>
                        </div>
                        <div class="col_221">
                            <a href="#">
                                <img src="./upload/floor-1-4.png" alt="">
                            </a>
                        </div>
                        <div class="col_219">
                            <a href="#" class="bb">
                                <img src="./upload/floor-1-5.png" alt="">
                            </a>
                            <a href="#">
                                <img src="./upload/floor-1-6.png" alt="">
                            </a>
                        </div>
                    </div>
                </div>
            </div>
.box_bd {
    height: 360px;
}
.tab_list_item  > div {
    float: left;
}
.col_210 {
    width: 210px;
    height: 360px;  
    background-color: #f9f9f9;
    text-align: center;
}
.col_210 ul {
    padding-left: 12px;
}
.col_210 li {
    float: left;
    width: 85px;
    height: 34px;
    border-bottom: 1px solid #ccc;
    text-align: center;
    line-height: 34px;
    margin-right: 10px;
}
.col_329 {
    width: 329px;
}
.col_329 img {
    width: 329px;
    /* height: 361px; */
}
.col_221 {
    width: 221px;
    border-right: 1px solid #ccc;
}
.bb {
    display: block;
    border-bottom: 1px solid #ccc;
} 
.col_219 {
    width: 219px;
}

效果:
效果
这部分代码是可复用的,如果想添加其它模块只需改一下文字和图片即可,还要注意的是,如果给a标签加了下边框之类的东西,最好变成block

列表页

下面开始做列表页,比如点了手机之后会出现各种手机的信息。
分析
把公共部分复制之后,我们新建一个列表页专用的css,list:css.
效果

导航栏

先来做这个:
效果
导航栏以及上方的秒杀字样有变化(其它部分复制即可):

 <nav class="nav">
        <div class="w">
            <div class="sk_list">
                <ul>
                    <li><a href="#">特价秒杀</a></li>
                    <li><a href="#">质量保证</a></li>
                    <li><a href="#">限时优惠</a></li>
                </ul>
            </div>
            <div class="sk_con">
                <ul>
                    <li><a href="#">女装</a></li>
                    <li><a href="#" class="style_red">女鞋</a></li>
                    <li><a href="#">男装</a></li>
                    <li><a href="#">男鞋</a></li>
                    <li><a href="#">食品</a></li>
                    <li><a href="#">母婴童装</a></li>
                    <li><a href="#">智能数码</a></li>
                    <li><a href="#">运动户外</a></li>
                    <li><a href="#">更多分类</a></li>
                </ul>
            </div>
        </div>
    </nav>
.sk {
    position: absolute;
    border-left: 1px solid #c81523;
    left: 190px;
    top: 40px;
    padding-left: 14px;
    padding-top: 3px;
}
.sk_list {
    float: left;
}
.sk_con {
    float: left;
}
.sk_list li {
    float: left;
}
.sk_list li a {
    display: block;
    font-size: 16px;
    font-weight: 700;
    line-height: 47px;
    padding: 0 28px;
}
.sk_con li {
    float: left;
}
.sk_con li a {
    display: block;
    font-size: 14px;
    line-height: 47px;
    padding: 0 22px;
}
.sk_con li:last-child a::after {
    font-family: 'icomoon';
    content: "\e91e";
    margin-left: 5px;
}

效果:
效果

详情部分

分析
==注意,在做这个效果时遇见了一个问题,我们用li来放图片(其实不应该是图片,但这里偷懒了),图片大小为290458,我们设置li大小为290460,并设置了鼠标经过li时加一个1px的边框,但这样做当鼠标经过时图片会抖动一下,不仅如此,边框也缺了下边:

这是没经过之前:
经过前

经过时:
经过后
用图片看的不明显,但确实鼠标经过时图片会向右下角抖动一下,原因可能如下

  • 抖动:因为li的大小是290*460,图片大小是290*458,当没加边框时,li装得下图片。鼠标经过时,由于上下左右都要加1px的边框,之前又设置了box-sizing: border-box;这意味着盒子的大小一旦指定就不会被padding、border等撑开,也就是说li加了边框后还是290*460,边框从左侧和上侧开始加,自然会把图片向右下方挤。
  • 边框缺失:因为图片向右、下各移动了1px,也就是说,如果以最上面的边框为基准的话,现在图片的底部距离最上面边框的是1+458=459px,还剩1px刚好可以容纳边框;而现在图片的右部移动了1px,距离最左边的边框是1+290=291px,那么li的右边框还在290px的位置,即被覆盖了,其实把li的宽设置成291px也不行,因为这和图片移动后的位置重叠了,只有设置成大于等于292px才可以。

那么解决办法如下:

  • 可以预先设置一个边框,但将其设置成透明色,这样就不会有抖动了。
  • 或者给li来一个overflow:hidden
<div class="w sk_container">
        <div class="sk_hd">
            <img src="./upload/bg_03.png" alt="">
        </div>
        <div class="sk_bd">
            <ul class="clearfix">
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
                <li><img src="./upload/list.jpg" alt=""></li>
            </ul>   
        </div>
    </div>
.sk_bd ul li {
    overflow: hidden;
    float: left;
    margin-right: 13px;
    width: 290px;
    height: 460px;
    border: 1px solid transparent;
}
.sk_bd ul li:nth-child(4n) {
    margin-right: 0;
}
.sk_bd ul li:hover {
    border: 1px solid blue;
}

效果:
效果
这部分花了不少时间:https://www.bilibili.com/video/BV14J4114768?p=345,没看懂可以看看这个视频。

注册页面

要做成这个样子:
注册页面
注意
分析

头部

这个比较简单:

<body>
    <div class="w">
        <header>
            <div class="logo">
                <a href="#"><img src="./images/logo.png" alt=""></a>
            </div>
        </header>
        <div class="registerarea">

        </div>
    </div>
</body>
.w {
    width: 1200px;
    margin: 0 auto;
}
header {
    height: 84px;
    border-bottom: 1px solid #c81523;
}
header .logo {
    padding-top: 18px;
}

效果:
效果
要注意的是header和logo盒子的外边距合并问题,所以要用padding-top而不是margin-top

接下来:
分析

申请免费空间以及网站上传

https://www.bilibili.com/video/BV14J4114768?p=354

至此,这个练习就结束了…

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值