目标
文章目录
- 能够写出列表页
- 能够写出注册页
- 能够把品优购网站部署到本地服务器
- 能够把品优购网站上传到远程服务器
品优购项目
首页制作
main 主体模块制作
以前书写的就是模块化中的公共部分。
main 主体模块是 index 里面专有的,注意需要新的样式文件 index.css
-
main 盒子宽度为 980 像素,高度是455像素,位置距离左边 220px (margin-left ) ,给高度就不用清除浮动
-
main 里面包含左侧盒子,宽度为 721像素,左浮动,focus 焦点图模块
-
main 里面包含右侧盒子,宽度为 250像素,右浮动,newsflash 新闻快报模块
结构代码
<div class="w"> <div class="main"> <div class="focus"> ... </div> <div class="newsflash"> ... </div> </div> </div>
样式代码
.main { width: 980px; height: 455px; margin-left: 220px; margin-top: 10px; } .focus { float: left; width: 721px; height: 455px; background-color: purple; } .newsflash { float: right; width: 250px; height: 455px; }
左侧 focus 模块制作
-
大的 focus 盒子 包裹 1 号展示图片的盒子,2号 3号 左右箭头的盒子,4号 小圆点的盒子
<div class="focus fl"> <a href="#" class="arrow-l"> < </a> <a href="#" class="arrow-r"> > </a> <ul> <li> <a href="#"><img src="upload/focus.jpg" alt=""></a> </li> </ul> <ol class="circle"> <li></li> <li class="current"></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ol> </div>
-
包裹 1 号盒子(
ul > li > a > img
),轮播图这样的布局是为了后面方便配置js
逻辑代码 -
2 号盒子 跟 3 号盒子 左右箭头,利用定位的方式来实现
样式代码
.arrow-l, .arrow-r { position: absolute; top: 50%; margin-top: -20px; width: 24px; height: 40px; background: rgba(0, 0, 0, .3); text-align: center; line-height: 40px; color: #fff; font-family: 'icomoon'; font-size: 18px; } .arrow-r { right: 0; }
-
4 号盒子 里面放 小圆点 (
ol > li
)- 小圆圈利用边框实现
- 小圆点里面背景颜色来实现
样式代码
.circle { position: absolute; bottom: 10px; left: 50px; } .circle li { float: left; width: 8px; height: 8px; /*background-color: #fff;*/ border: 2px solid rgba(255, 255, 255, 0.5); margin: 0 3px; border-radius: 50%; /*鼠标经过显示小手*/ cursor: pointer; } .current { background-color: #fff; box-shadow: }
右侧 newsflash 模块制作
-
右侧的模块 分为上中下三个盒子
结构代码
<div class="newsflash"> <div class="news"> ... </div> <div class="lifeservice"> ... </div> <div class="bargain"> ... </div> </div>
-
1 号盒子为
news
新闻模块 高度为 165px
-
分为上下两个结构,但是两个模块都用 div,上面是
news-hd
,下面是news-bd
结构代码
<div class="news"> <div class="news-hd"> ... </div> <div class="news-bd"> ... </div> </div>
样式代码
.news { height: 165px; border: 1px solid #e4e4e4; }
-
上面是
news-hd
,设置高度是 33px,设置下边框- 里面放一个
h5
标题 - 放一个a
标签
,内容是 更多,然后让a
进行右浮动,三角用伪元素设置字体图标就好
结构代码
<div class="news-hd"> <h5>品优购快报</h5> <a href="#" class="more">更多</a> </div>
样式代码
.news-hd { height: 33px; line-height: 33px; border-bottom: 1px dotted #e4e4e4; padding: 0 15px; } .news-hd h5 { float: left; font-size: 14px; } .news-hd .more { float: right; } .news-hd .more::after { font-family: 'icomoon'; content: '\e920'; }
- 里面放一个
-
下面是
news-bd
- 里面包含
ul
和li
还有链接 - 给
li
设置高度,24px,设置单行文字溢出省略: 1. 设置overflow: hidden;
2.设置white-space: nowrap;
3. 设置text-overflow: ellipsis;
结构代码
<div class="news-bd"> <ul> <li><a href="#"><strong>[重磅]</strong> 它来了它来了,pink老师走来了, 它是谁?</a></li> <li><a href="#"><strong>[重磅]</strong> 它来了它来了,pink老师走来了</a></li> <li><a href="#"><strong>[重磅]</strong> 它来了它来了,pink老师走来了</a></li> <li><a href="#"><strong>[重磅]</strong> 它来了它来了,pink老师走来了</a></li> <li><a href="#"><strong>[重磅]</strong> 它来了它来了,pink老师走来了, 它是谁?</a></li> </ul> </div>
样式代码
.news-bd { padding: 5px 15px 0; } .news-bd ul li { height: 24px; line-height: 24px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
- 里面包含
-
2 号盒子为
lifeservice
生活服务模块 高度为 209px
- 设置边框(左右下 边框)
- 里面的内容 是
ul > 12*li
,给li
设置宽 63px,高71px,设置 右边和下边的边框,设置浮动 - 这样设置后,第四个li会装不开,掉下来,解决办法如下
lifeservice
盒子宽度为 250 ,但是装不开里面的 4 个小 li- 可以让
lifeservice
里面的ul
宽度为 252,就可以装的下 4 个 小 li lifeservice
盒子 overflow 隐藏多余的部分就可以了
- 在
li
里面放一个i
(里面放图标),下面的文本用p
标签包裹 - 给
i
设置 24px宽和28px的高(注意i
是行内元素, 转成行内块),给li
设置text-align:center
让里面内容居中显示
结构代码
<div class="lifeservice">
<ul>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
<li>
<i></i>
<p>话费</p>
</li>
</ul>
</div>
样式代码
.lifeservice {
overflow: hidden;
height: 209px;
/* background-color: purple; */
border: 1px solid #e4e4e4;
border-top: 0;
}
.lifeservice ul {
width: 252px;
}
.lifeservice ul li {
float: left;
width: 63px;
height: 71px;
border-right: 1px solid #e4e4e4;
border-bottom: 1px solid #e4e4e4;
text-align: center;
}
.lifeservice ul li i {
display: inline-block;
width: 24px;
height: 28px;
background-color: pink;
margin-top: 12px;
background: url(../images/icons.png) no-repeat -19px -15px;
}
-
3 号盒子为
bargain
特价商品- 这个比较简单,直接插入一张图片即可
结构代码
<div class="bargain"> <img src="upload/bargain.png" alt=""> </div>
样式代码
.bargain { margin-top: 5px; }
推荐模块制作 – recom
-
大盒子
recom
推荐模块 recommend- 给这个
recom
大盒子 设置版心,设置 163px的高,背景颜色(#ebebeb
),设置距离上边 12px
结构代码
<div class="w recom"> ... </div>
样式代码
.recom { height: 163px; background-color: #ebebeb; margin-top: 12px; }
- 给这个
-
里面包含 2 个盒子, 浮动即可
结构代码
<div class="w recom"> <div class="recom_hd"> ... </div> <div class="recom_bd"> ... </div> </div>
-
1 号盒子
recom_hd
- 设置宽度205px,高度163px
- 里面放一个
img
标签,插入图片即可
结构代码
<div class="recom_hd"> <img src="images/recom.png" alt=""> </div>
样式代码
.recom_hd { float: left; height: 163px; width: 205px; background-color: #5c5251; text-align: center; padding-top: 30px; }
-
2 号盒子
recom_bd
,注意里面的小竖线- 右侧结构里面放
ul
包含 4个li
,每个li里面包含一个img
- 直接利用切片工具把里面的内容当成一张图片
- 给
li
设置浮动 - 给
img
设置宽高,宽度 248px,高度 163px - 小竖线利用伪元素来实现,给每一个li设置一个 after 伪元素,然后给这个伪元素设置绝对定位,设置
top 10px
,给li
设置相对定位(注意,最后一个li
不用设置伪元素),可以利用nth-child(-n+3){...}
结构代码
<div class="recom_bd"> <ul> <li><img src="upload/recom_03.jpg" alt=""></li> <li><img src="upload/recom_03.jpg" alt=""></li> <li><img src="upload/recom_03.jpg" alt=""></li> <li><img src="upload/recom_03.jpg" alt=""></li> </ul> </div>
样式代码
.recom_bd { float: left; } .recom_bd ul li { position: relative; float: left; } .recom_bd ul li img { width: 248px; height: 163px; } .recom_bd ul li:nth-child(-n+3)::after { content: ''; position: absolute; right: 0; top: 10px; width: 1px; height: 145px; background-color: #ddd; }
- 右侧结构里面放
家用电器模块
注意这个 floor ,不要给高度,内容有多少,算多少
第一楼是家用电器模块: 里面包含两个盒子
box_hd
制作
- 1 号盒子
box_hd
,给一个高度,有个下边框,里面分为左右 2 个盒子
box_hd
给 30px 的高度,2个像素的下边框- 里面放一个左侧 h3 的盒子,右侧一个div盒子,div盒子里面放
ul > li > a
- 左侧盒左浮动,右侧盒子右浮动
a
标签之间的距离用左右的padding
撑开即可
结构代码
<div class="box_hd">
<h3>家用电器</h3>
<div class="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>
<li><a href="#"> 高端电器</a></li>
</ul>
</div>
</div>
样式代码
.box_hd {
height: 30px;
border-bottom: 2px solid #c81623;
}
.box_hd h3 {
float: left;
font-size: 18px;
color: #c81623;
font-weight: 400;
}
.tab_list {
float: right;
line-height: 30px;
}
.tab_list ul li {
float: left;
}
.tab_list ul li a {
margin: 0 15px;
}
box_bd
制作
- 2 号盒子
box_bd
,不要给高度
box_bd
属于是tab栏的内容区域,所以在这个里面先嵌套一个盒子tab_content
,在tab_content
里面包裹tab选项卡对应的内容- 内容被一个大盒子包裹(
tab_list_item
),里面是ul
包裹 5个li
,每个li
设置对应的宽度,然后设置浮动 - 而这5个
li
的宽度是不一致的,在这里我们的做法是 先把宽度的样式列出来,然后给对应的li
设置- 第一个小
li
分为上下结构,上面是ul
包裹li
,li
里面包裹a
,下面插入一张图片 - 上面的li设置宽高,设置浮动,这样就排列下来了
- 后面的小
li
里面先放一个a
标签,然后在a
标签里面插入图片即可
- 第一个小
结构代码
<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="#">节能补贴</a></li>
<li><a href="#">节能补贴</a></li>
<li><a href="#">节能补贴</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/floor-1-b01.png" 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: 361px;
}
.tab_list_item>div {
float: left;
height: 361px;
}
.col_210 {
width: 210px;
background-color: #f9f9f9;
text-align: center;
}
.col_210 ul li {
float: left;
width: 85px;
height: 34px;
border-bottom: 1px solid #ccc;
text-align: center;
line-height: 33px;
margin-right: 10px;
}
.col_210 ul {
padding-left: 12px;
}
.col_329 {
width: 329px;
}
.col_221 {
width: 221px;
border-right: 1px solid #ccc;
}
.col_219 {
width: 219px;
}
.bb {
/* 一般情况下,a如果包含有宽度的盒子,a需要转为块级元素 */
display: block;
border-bottom: 1px solid #ccc;
}
tab栏切换需求
tab
栏的布局是ul > li > a
- 有多少个
tab
选项卡,那么对应就有多少个内容 - 但是每一次只会显示一个内容块,其他内容进行的隐藏
- 等后面我们学习了
js
之后,我们就会配合js
来实现,tab
栏的切换
列表制作(★★★)
品优购列表页制作准备工作
- 列表页面是新的页面,我们需要新建页面文件 list.html
- 因为列表页的头部和底部基本一致,所以我们需要把首页中的头部和底部的结构复制过来
- 头部和底部的样式也需要,因此 list.html 中还需要引入 common.css
- 需要新的 list.css 样式文件,这是列表页专门的样式文件
列表页 header
和 nav
修改
- 秒杀盒子 sk( second kill ) 定位即可
结构代码
<header class="header w">
<!-- logo模块 -->
...
<!-- 列表页的秒杀模块 -->
<div class="sk">
<img src="images/sk.png" alt="">
</div>
<!-- search搜索模块 -->
...
<!-- hotwords模块制作 -->
...
<!-- 购物车模块 -->
...
</header>
样式代码
.sk {
position: absolute;
left: 190px;
top: 40px;
border-left: 1px solid #c81523;
padding: 3px 0 0 14px;
}
- 1 号盒子左侧浮动
sk_list
里面包含ul
和li
- 2 号盒子左侧浮动
sk_con
里面包含ul
和li
结构代码
<!-- nav模块制作 start -->
<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_list {
float: left;
}
.sk_list ul li {
float: left;
}
.sk_list ul li a {
display: block;
line-height: 47px;
padding: 0 30px;
font-size: 16px;
font-weight: 700;
color: #000;
}
.sk_con {
float: left;
}
.sk_con ul li {
float: left;
}
.sk_con ul li a {
display: block;
line-height: 49px;
padding: 0 20px;
font-size: 14px;
}
.sk_con ul li:last-child a::after {
content: '\e91e';
font-family: 'icomoon';
}
列表页主体 sk_container
- 1 号盒子
sk_container
给宽度 1200,不要给高度
结构代码
<!-- 列表页主体部分 -->
<div class="w sk_container">
<div class="sk_hd">
...
</div>
<div class="sk_bd">
...
</div>
</div>
sk_hd
制作
- 2 号盒子
sk_hd
,插入图片即可
结构代码
<div class="sk_hd">
<img src="upload/bg_03.png" alt="">
</div>
sk_bd
制作
- 3 号盒子
sk_bd
,里面包含很多的ul
和li
- 当鼠标移入到
li
上面的时候显示红色的边框,在这里先给li
设置透明的边框,当鼠标移入的时候 设置为红色即可 - 由于给每个
li
都设置了外边距,导致一行的最后一个li
掉了下来,在这里我们利用nth-child(4n)
来选择出来每一行最后一个li
,去掉外边距就好了
- 当鼠标移入到
结构代码
<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>
<li>
<img src="upload/list.jpg" alt="">
</li>
</ul>
</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 #c81523;
}
注册页面(★★★)
**注意:**注册页面比较隐私,为了保护用户信息,我们不需要对当前页面做SEO优化
准备工作
- 创建register.html,引入 base.css,引入favicon图标
- 创建register.css ,在html页面进行引入
header
头部实现
- 整个内容用 版心 进行包裹
- 第一个头部区域怎么简单怎么来,用一个header盒子包裹链接,链接里面放图片即可
结构代码
<header>
<div class="logo">
<a href="index.html"> <img src="images/logo.png" alt=""></a>
</div>
</header>
样式代码
.w {
width: 1200px;
margin: 0 auto;
}
header {
height: 84px;
border-bottom: 2px solid #c81523;
}
.logo {
padding-top: 18px;
}
registerarea
主体模块实现
-
整个大盒子 高度为 522px,设置4个边框
结构代码
<div class="registerarea"> ... </div>
样式代码
.registerarea { height: 522px; border: 1px solid #ccc; margin-top: 20px; }
-
1号盒子 是一个 h3 标签,放标题
- 里面放 注册新用户 的文字,然后包一个 div的标签,让div标签右浮动
结构代码
<h3>注册新用户 <div class="login">我有账号,去<a href="#">登陆</a></div> </h3>
样式代码
.registerarea h3 { height: 42px; border-bottom: 1px solid #ccc; background-color: #ececec; line-height: 42px; padding: 0 10px; font-size: 18px; font-weight: 400; } .login { float: right; font-size: 14px; } .login a { color: #c81523; }
-
2号盒子 里面放注册的内容
-
先用一个盒子,把整个内容包裹起来,设置盒子宽度(600px),让这个盒子距上边50px,水平居中显示
-
里面的内容利用
ul
包含li
来实现的(不需要用表格) -
每个
li
里面,左侧放label
标签, 中间放input
标签, 右侧放span
提示信息 -
左侧
label
里面的文字都是右对齐,我们可以给label
设置一个宽度(88px),然后利用text-align
来设置右对齐 -
input 表单设置 宽度 242px,高度 37px,设置边框
-
右侧 span修饰一下文字颜色
-
提示信息的样式优化
-
定义一个 错误的样式,定义一个 正确的样式,然后给对应的盒子设置类名
-
在span里面放一个小盒子,这个小盒子用来显示 图标的,设置一下宽高 (20x20)
-
插入图片了之后,默认与文字是基线对齐,通过
vertical-algin
来设置 图片与文字对齐方式
-
-
安装程度的布局,在第4个小 li 里面放 三个盒子,分别放 弱、中、强
- 设置
em
的 左右 12px 的内边距,设置一下文字颜色 - 分别设置 背景颜色
- 设置
-
同意协议 和 完成注册 都是用
li
进行包裹
结构代码
<div class="reg_form"> <form action=""> <ul> <li><label for="">手机号:</label> <input type="text" class="inp"> <span class="error"> <i class="error_icon"></i> 手机号码格式不正确,请从新输入 </span></li> <li><label for="">短信验证码:</label> <input type="text" class="inp"> <span class="success"> <i class="success_icon"></i> 短信验证码输入正确 </span></li> <li><label for="">登录密码:</label> <input type="password" class="inp"> <span class="error"> <i class="error_icon"></i> 手机号码格式不正确,请从新输入 </span></li> <li class="safe">安全程度 <em class="ruo">弱</em> <em class="zhong">中</em> <em class="qiang">强</em> </li> <li><label for="">确认密码:</label> <input type="password" class="inp"> <span class="error"> <i class="error_icon"></i> 手机号码格式不正确,请从新输入 </span></li> <li class="agree"><input type="checkbox" name="" id=""> 同意协议并注册 <a href="#">《知晓用户协议》</a> </li> <li> <input type="submit" value="完成注册" class="btn"> </li> </ul> </form> </div>
样式代码
.reg_form { width: 600px; margin: 50px auto 0; } .reg_form ul li { margin-bottom: 20px; } .reg_form ul li label { display: inline-block; width: 88px; text-align: right; } .reg_form ul li .inp { width: 242px; height: 37px; border: 1px solid #ccc; } .error { color: #c81523; } .error_icon, .success_icon { display: inline-block; vertical-align: middle; width: 20px; height: 20px; background: url(../images/error.png) no-repeat; margin-top: -2px; } .success { color: green; } .success_icon { background: url(../images/success.png) no-repeat; } .safe { padding-left: 170px; } .safe em { padding: 0 12px; color: #fff; } .ruo { background-color: #de1111; } .zhong { background-color: #40b83f; } .qiang { background-color: #f79100; } .agree { padding-left: 95px; } .agree input { vertical-align: middle; } .agree a { color: #1ba1e6; } .btn { width: 200px; height: 34px; background-color: #c81623; font-size: 14px; color: #fff; margin: 30px 0 0 70px; }
-
底部实现
结构代码
<footer>
<div class="mod_copyright">
<div class="links">
<a href="#">关于我们</a> | <a href="#">联系我们</a> | 联系客服 | 商家入驻 | 营销中心 | 手机品优购 | 友情链接 | 销售联盟 | 品优购社区 |
品优购公益 | English Site | Contact U
</div>
<div class="copyright">
地址:北京市昌平区建材城西路金燕龙办公楼一层 邮编:100096 电话:400-618-4000 传真:010-82935100 邮箱: zhanghj+itcast.cn <br>
京ICP备08001421号京公网安备110108007702
</div>
</div>
</footer>
样式代码
.mod_copyright {
text-align: center;
padding-top: 20px;
}
.links {
margin-bottom: 15px;
}
.links a {
margin: 0 3px;
}
.copyright {
line-height: 20px;
}
拓展案例
品优购详情页面
训练描述
对整个基础班学习内容再进行一次的巩固,熟练使用PC端的布局,与我们课程可以良好的衔接;整个详情页面分两天来完成,今天完成到 促销这个小模块;今天作业包含以下模块:
- 商品详细模块完成
- 产品细节模块完成
训练提示
详情页常用的单词
名称 | 说明 |
---|---|
主体 | de_container |
面包屑导航 | crumb_wrap |
产品介绍 | product_intro ( introduction介绍) |
预览包 | preview_wrap(左侧部分) |
预览缩略图 | preview_img |
预览列表 | preview_list |
左按钮 | arrow_prev |
右按钮 | arrow_next |
小图列表 | preview_items |
产品详细信息区域 | itemInfo_wrap (右侧部分) |
头部名称 | sku_name skull 头骨 |
新闻 | news |
摘要 | summary |
评价 | remark |
价格摘要 | summary_price |
配送至 | summary_stock |
支持 | summary_support |
选择 | choose |
选择按钮组 | choose_btns |
选择数量 | choose_amount |
减去 | reduce |
加入购物车 | addshopcar |
产品细节 | product_detail ( detail描述) |
左侧边 | aside |
详细描述 | detail |
- 在昨天做完的作业基础上开始继续开发
- 利用
dl > dt + dd
布局的思路完成商品详细信息区域的完成 - 产品细节模块分为左右两个盒子
- 两个大盒子浮动
- 左侧盒子里面分为上下结构,上面放tab选项卡,下面放内容(
ul > li > 内容
) - 右侧盒子里面分为上下结构,上面放tab选项卡,下面放内容
训练步骤
-
加入购物车上面的模块布局与之前的一致,利用
dl > dt + dd
的方式来布局- 选择颜色这一块,后面的选项是可以点击的,所以这里用 a 标签进行包裹,设置成行内块元素,设置宽高,行内块中间默认有间隙,就不用设置边距了
结构代码
<dl class="summary_support"> <dt>支持</dt> <dd>以旧换新,闲置手机回收 4G套餐超值抢 礼品购</dd> </dl> <dl class="choose_color"> <dt>选择颜色</dt> <dd> <a href="javascript:;" class="current">玫瑰金</a> <a href="javascript:;">金色</a> <a href="javascript:;">白色</a> <a href="javascript:;">土豪色</a> </dd> </dl> <dl class="choose_version"> <dt>选择版本</dt> <dd> <a href="javascript:;" class="current">公开版</a> <a href="javascript:;">移动4G</a> </dd> </dl> <dl class="choose_type"> <dt>购买方式</dt> <dd> <a href="javascript:;" class="current">官方标配</a> <a href="javascript:;">移动优惠购</a> <a href="javascript:;">电信优惠购</a> </dd> </dl>
样式代码
.summary_support dd { line-height: 36px; } .choose_color a { display: inline-block; width: 80px; height: 41px; background-color: #f7f7f7; border: 1px solid #ededed; text-align: center; line-height: 41px; } .summary a.current { border-color: #c81623; } .choose_version { margin: 10px 0; } .choose_version a, .choose_type a { display: inline-block; height: 32px; padding: 0 12px; background-color: #f7f7f7; border: 1px solid #ededed; text-align: center; line-height: 32px; }
-
最下面的布局有一些不一样,左侧里面是一个输入框然后有两个按钮,右侧放一个 a 标签即可
- 左侧的布局思路是: 先有一个大盒子(choose_amount)来包裹 输入框 还有 按钮
- 然后给输入框设置宽高
- 两个按钮设置宽高,然后利用定位的方式放在相应的位置
结构代码
<div class="choose_btns"> <div class="choose_amount"> <input type="text" value="1"> <a href="javascript:;" class="add">+</a> <a href="javascript:;" class="reduce">-</a> </div> <a href="#" class="addcar">加入购物车</a> </div>
样式代码
.choose_btns { margin-top: 20px; } .choose_amount { position: relative; float: left; width: 50px; height: 46px; background-color: pink; } .choose_amount input { width: 33px; height: 44px; border: 1px solid #ccc; text-align: center; } .add, .reduce { position: absolute; right: 0; width: 15px; height: 22px; border: 1px solid #ccc; background-color: #f1f1f1; text-align: center; line-height: 22px; } .add { top: 0; } .reduce { bottom: 0; /*禁止鼠标样式*/ cursor: not-allowed; /* pointer 小手 move 移动 */ } .addcar { float: left; width: 142px; height: 46px; background-color: #c81623; text-align: center; line-height: 46px; font-size: 18px; color: #fff; margin-left: 10px; font-weight: 700; }
-
大盒子 product_detail 包裹两个盒子,不要给高度 ,别忘记清除浮动
-
1 号盒子 左侧浮动 命名为 aside 有宽度 不给高度
- 1 号盒子 命名为 tab_list 给高度就好了 ,里面 放
ul
和li
注意这是 tab栏切换布局 - 注意一下 左侧的
li
宽度是 104px,右侧的li
是 103px 然后加一个 1px 的左边框 - 2 号盒子 命名为 tab_con 里面还包含 很多个
ul.item
和 上面的tab_list
里面的li一一对应 - 在
li
里面的文字 是单行进行显示,如果文字过长,可能会超出盒子的宽度,所以我们需要对这个盒子设置 溢出省略号显示
结构代码
<!-- aside --> <div class="aside fl"> <div class="tab_list"> <ul> <li class="first_tab ">相关分类</li> <li class="second_tab current">推荐品牌</li> </ul> </div> <div class="tab_con"> <ul> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> <li> <img src="upload/aside_img.jpg" alt=""> <h5>华为 HUAWEI P20 Pro 全面屏徕卡</h5> <div class="aside_price">¥19</div> <a href="#" class="as_addcar">加入购物车</a> </li> </ul> </div> </div>
样式代码
.aside { width: 208px; border: 1px solid #ccc; } .tab_list { overflow: hidden; height: 34px; } /*把背景颜色 底边框都给 li*/ .tab_list li { float: left; background-color: #f1f1f1; border-bottom: 1px solid #ccc; height: 33px; text-align: center; line-height: 33px; } /*鼠标单击 li 变化样式 背景变白色 去掉下边框 文字变颜色*/ .tab_list .current { background-color: #fff; border-bottom: 0; color: red; } .first_tab { width: 104px; } .second_tab { width: 103px; border-left: 1px solid #ccc; } .tab_con { padding: 0 10px; } .tab_con li { border-bottom: 1px solid #ccc; } .tab_con li h5 { /*超出的文字省略号显示*/ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-weight: 400; } .aside_price { font-weight: 700; margin: 10px 0; } .as_addcar { display: block; width: 88px; height: 26px; border: 1px solid #ccc; background-color: #f7f7f7; margin: 10px auto; text-align: center; line-height: 26px; }
- 1 号盒子 命名为 tab_list 给高度就好了 ,里面 放
-
2号盒子 右侧浮动 命名为 detail 有宽度不给高度
- 1 号盒子 命名为
detail_tab_list
给高度就好了 ,里面 放ul
和li
注意这是 tab栏切换布局 - 设置1px 的边框,选中的
li
设置current
的类名,让背景变红,文字变白 - 2 号盒子 命名为
detail_tab_con
里面还包含 很多个ul.item
和 上面的tab_list
里面的li
一一对应 - 下面文字内容用
ul > li > 文字内容
,下面的直接插入图片即可
结构代码
<!-- detail -->
<div class="detail fr">
<div class="detail_tab_list">
<ul>
<li class="current">商品介绍</li>
<li>规格与包装</li>
<li>售后保障</li>
<li>商品评价(50000)</li>
<li>手机社区</li>
</ul>
</div>
<div class="detail_tab_con">
<div class="item">
<ul class="item_info">
<li>分辨率:1920*1080(FHD)</li>
<li>后置摄像头:1200万像素</li>
<li>前置摄像头:500万像素</li>
<li>核 数:其他</li>
<li>频 率:以官网信息为准</li>
<li>品牌: Apple ♥关注</li>
<li>商品名称:APPLEiPhone 6s Plus</li>
<li>商品编号:1861098</li>
<li>商品毛重:0.51kg</li>
<li>商品产地:中国大陆</li>
<li>热点:指纹识别,Apple Pay,金属机身,拍照神器</li>
<li>系统:苹果(IOS)</li>
<li>像素:1000-1600万</li>
<li>机身内存:64GB</li>
</ul>
<p>
<a href="#" class="more">查看更多参数</a>
</p>
<img src="upload/detail_img1.jpg" alt="">
<img src="upload/detail_img2.jpg" alt="">
<img src="upload/detail_img3.jpg" alt="">
</div>
</div>
</div>
样式代码
.detail {
width: 978px;
}
.detail_tab_list {
height: 39px;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.detail_tab_list li {
float: left;
height: 39px;
line-height: 39px;
padding: 0 20px;
text-align: center;
cursor: pointer;
}
.detail_tab_list .current {
background-color: #c81623;
color: #fff;
}
.item_info {
padding: 20px 0 0 20px;
}
.item_info li {
line-height: 22px;
}
.more {
float: right;
font-weight: 700;
font-family: 'icomoon';
}