文章目录
1. 携程网首页案例制作
1.1 技术选型
方案:我们采取单独制作移动页面方案
技术:布局采取flex布局为主
1.2 搭建相关文件夹
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.46
Branch: branch04
commit description:a2.46(携程网首页案例——搭建相关文件夹及框子)tag:a2.46
1.3 设置视口标签以及引入初始化样式
<meta name="viewport" content="width=device-width, user-scalable=no,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.47
Branch: branch04
commit description:a2.47(携程网首页案例——设置视口标签以及引入初始化样式)tag:a2.47
1.4 初始化样式
-webkit-tap-highlight-color: transparent;
防止一些元素点击之后背景会高亮
overflow-x: hidden;
不出现水平滚动条
body {
max-width: 540px;
min-width: 320px;
margin: 0 auto;
font: normal 14px/1.5 Tahoma, "Lucida Grande", Verdana, "Microsoft Yahei", STXihei, hei;
color: #000;
background: #f2f2f2;
overflow-x: hidden;
-webkit-tap-highlight-color: transparent;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.48
Branch: branch04
commit description:a2.48(携程网首页案例——初始化样式)tag:a2.48
1.5 模块名字划分
1.6 常见flex布局思路
1.7 背景线性渐变
background: linear-gradient(起始方向, 颜色1, 颜色2, ...);
background: -webkit-linear-gradient(left, red , blue);
background: -webkit-linear-gradient(left top, red , blue);
背景渐变必须添加浏览器私有前缀
起始方向可以是: 方位名词 或者 度数 , 如果省略默认就是 top
2. 代码实现
2.1 search-index
尺寸 => flex默认可以拉伸自适应各种设备,但是高度定死,宽度自适应,方便更好地呈现。
先搭建整体结构,再从上往下布局。
第一栏搜索框,设置为固定定位,注意固定定位的盒子必须要有宽度,它与父级无关,与浏览器可视区相对偏移。设置最大和最小宽度。
注意:已经是固定定位,因此margin:0 auto;
是无效的,通过left偏移调整,移动到盒子50%,再减去容器一半的宽度即可,因为设备的缘故,所以没法确认宽度,利用transform进行百分比偏移,直接 transform: translateX(-50%);
。
left: 50%;
transform: translateX(-50%);
也可不给left
值(默认为0),也一样实现,因为body居中对齐。
为了兼容老版本的谷歌浏览器 =>-webkit-transform: translateX(-50%);
<body>
<div class="search-index"></div>
</body>
/*搜索模块*/
.search-index {
position: fixed;
top: 0;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: 100%;
max-width: 540px;
min-width: 320px;
height: 44px;
background-color: pink;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.49
Branch: branch04
commit description:a2.49(携程网首页案例——搜索栏布局)tag:a2.49
可细分为两块即可。左侧输入框是自适应的,而右侧的图标是固定大小的。右边大小固定,剩余空间都给左边的盒子。
这里搜索框使用div,点击之后,进入另外一个页面。
<div class="search-index">
<div class="search"></div>
<a href="#" class="user"></a>
</div>
/*搜索模块*/
.search-index {
display: flex;
position: fixed;
top: 0;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: 100%;
max-width: 540px;
min-width: 320px;
height: 44px;
background-color: pink;
}
.search {
flex: 1;
}
.user {
width: 44px;
height: 44px;
background-color: orangered;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.50
Branch: branch04
commit description:a2.50(携程网首页案例——搜索栏布局2)tag:a2.50
右侧的a标签中包含:上面一个图,下面一串字符串。实际在a标签里面放入盒子会很麻烦,可以使用伪元素,这样一个盒子就搞定了。
图标在精灵图中,需要测量位置。
使用fw软件,首先缩放原来一半的大小 从208*655
变为 104*328
背景图片设置坐标和尺寸,高度可以不写直接auto
。
.user::before {
content: "";
display: block;
width: 23px;
height: 23px;
background: url(../images/sprite.png) no-repeat -59px -194px;
background-size: 104px auto;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.51
Branch: branch04
commit description:a2.51(携程网首页案例——精灵图图标)tag:a2.51
图标位置没有居中,可以设置外边距。
/*上 左右 下*/
margin: 4px auto 0;
调整字体样式并去掉下划线。
a {
text-decoration: none;
}
.user {
width: 44px;
height: 44px;
background-color: orangered;
font-size: 12px;
text-align: center;
color: #2eaae0;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.52
Branch: branch04
commit description:a2.52(携程网首页案例——完成搜索栏右边模块)tag:a2.52
div均使用css3盒模型,省去计算内边距的问题了。
div {
box-sizing: border-box;
}
设置输入框高度,并设置小圆角。
.search {
height: 26px;
border: 1px solid #ccc;
flex: 1;
margin: 6px 10px;
border-redius: 5px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.53
Branch: branch04
commit description:a2.53(携程网首页案例——完成搜索栏右边模块)tag:a2.53
输入框里的放大镜,也可作为该div的before伪类即可,依然在精灵图中。
.search::before {
content: "";
display: block;
width: 15px;
height: 15px;
background: url(../images/sprite.png) no-repeat -59px -279px;
background-size: 104px auto;
}
使用固定定位或者外边距调整位置。
.search::before {
content: "";
display: block;
width: 15px;
height: 15px;
background: url(../images/sprite.png) no-repeat -59px -279px;
background-size: 104px auto;
margin: 5px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.54
Branch: branch04
commit description:a2.54(携程网首页案例——完成搜索栏中的放大镜图标)tag:a2.54
插入文字。
<div class="search-index">
<div class="search">搜索:目的地/酒店/景点/航班号</div>
<a href="#" class="user">我 的</a>
</div>
伪类插入的是块级元素,把字体给挤下来了。
伪类中使用绝对定位即可,注意此时的margin值就会失效,因此使用偏移量即可。
同时注意,绝对定位跟随父亲,父级search设置为相对定位即可。
.search {
position: relative;
height: 26px;
border: 1px solid #ccc;
flex: 1;
margin: 6px 10px;
border-redius: 5px;
}
.search::before {
content: "";
position: absolute;
top: 5px;
left: 5px;
width: 15px;
height: 15px;
background: url(../images/sprite.png) no-repeat -59px -279px;
background-size: 104px auto;
}
设置文字样式,垂直居中,同时设置左内边距。
=>
.search {
position: relative;
height: 26px;
line-height: 26px;
border: 1px solid #ccc;
flex: 1;
font-size: 12px;
color: #666;
margin: 6px 10px;
padding-left: 25px;
border-redius: 5px;
}
文字还是有点偏下。
在css3中是把内边距和边框算入的。
实际需要的行高,是排除边框的距离,所以设置为24px才对。
.search {
position: relative;
height: 26px;
line-height: 24px;
border: 1px solid #ccc;
flex: 1;
font-size: 12px;
color: #666;
margin: 6px 10px;
padding-left: 25px;
border-redius: 5px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.55
Branch: branch04
commit description:a2.55(携程网首页案例——搜索栏中的输入框)tag:a2.55
设置输入框下的阴影部分。
box-shadow: 0 2px 4px rgba(0,0,0,.2);
设置盒子的背景颜色。
大盒子 => background-color: #F6F6F6;
上下边框 =>
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
这里还需要把字往上调高一些。
margin: 4px auto -2px;
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.56
Branch: branch04
commit description:a2.56(携程网首页案例——完成第一行)tag:a2.56
2.2 focus
<div class="focus">
<img src="upload/focus.jpg" alt="">
</div>
调整图标尺寸与父级一致。
.focus img{
width: 100%;
}
因为上一栏是固定定位就会把下一栏盖住一部分,下一栏的盒子是标准流。给其加上内边距即可。
.focus {
padding-top: 44px;
}
轮播图一般都会借助第三方组件,如果自己写需要用原生js,稍许麻烦,这里暂时不实现动态效果了。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.57
Branch: branch04
commit description:a2.57(携程网首页案例——完成第二行静态轮播图)tag:a2.57
2.3 local-nav
先用一个大盒子,里面包裹5个小盒子,分成五等份即可。
可以使用ul和li包裹,li中放入a标签,a中放入一个图标和文字。
背景是白色,盒子是带小圆角的,并且上下都有间距。
<!--局部导航栏-->
<ul class="local-nav">
</ul>
.local-nav {
height: 64px;
background-color: #fff;
margin: 3px 4px;
border-radius: 8px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.58
Branch: branch04
commit description:a2.58(携程网首页案例——局部导航栏外部盒子布局)tag:a2.58
<ul class="local-nav">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
因为是标准流,所以仍然是竖着排布。
使用flex布局,给其父级添加flex布局即可。
子级各占一份。
.local-nav li {
flex: 1;
}
ul下的里去掉小点,去除默认边距。
ul {
list-style: none;
margin: 0;
padding: 0;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.59
Branch: branch04
commit description:a2.59(携程网首页案例——局部导航栏布局)tag:a2.59
li中放入a标签,a中放入一个图标和文字。
a中上面放入span,指定一个背景图片,下方放入一个span,放入文字。
使用flex布局。
<ul class="local-nav">
<li><a href="#">
<span class="local-nav-icon"></span>
<span>景点·玩乐</span>
</a></li>
<li><a href="#"></a></li>
<li><a href="#"></a></li>
<li><a href="#"></a></li>
<li><a href="#"></a></li>
</ul>
.local-nav a {
display: flex;
}
.local-nav-icon {
width: 32px;
height: 32px;
background-color: pink;
}
默认主轴是x轴,将主轴设置为y轴,把侧周设置为居中对齐。
.local-nav a {
display: flex;
flex-direction: column;
}
.local-nav a {
display: flex;
flex-direction: column;
align-items: center;
}
设置上外边距,注意在flex布局,不会出现外边距合并的问题。
.local-nav-icon {
width: 32px;
height: 32px;
background-color: pink;
margin-top: 8px;
}
背景图片是精灵图,依然是二倍图。
.local-nav-icon {
width: 32px;
height: 32px;
margin-top: 8px;
background: url(../images/localnav_bg.png) no-repeat 0 0;
background-size: 32px auto;
}
修改文字颜色,因为所有的a标签中字体都是一个颜色,可以统一固定字体颜色。
a {
text-decoration: none;
color: #222;
}
修改字体大小。
.local-nav a {
display: flex;
flex-direction: column;
align-items: center;
font-size: 12px;
}
鼠标停留,会有提示信息,实际就是a标签中的title属性。
<li>
<a href="#" title="景点·玩乐">
<span class="local-nav-icon"></span>
<span>景点·玩乐</span>
</a>
</li>
复制粘贴五份,其余类似。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.60
Branch: branch04
commit description:a2.60(携程网首页案例——完成第三行局部导航栏)tag:a2.60
如何快速设置不同图标呢?因为span之间也不是亲兄弟的关系,所以无法使用结构为类选择器,只能用属性选择器。
<ul class="local-nav">
<li>
<a href="#" title="景点·玩乐">
<span class="local-nav-icon-icon1"></span>
<span>景点·玩乐</span>
</a>
</li>
<li>
<a href="#" title="周边游">
<span class="local-nav-icon-icon2"></span>
<span>周边游</span>
</a>
</li>
<li>
<a href="#" title="美食林">
<span class="local-nav-icon-icon3"></span>
<span>美食林</span>
</a>
</li>
<li>
<a href="#" title="一日游">
<span class="local-nav-icon-icon4"></span>
<span>一日游</span>
</a>
</li>
<li>
<a href="#" title="当地攻略">
<span class="local-nav-icon-icon5"></span>
<span>当地攻略</span>
</a>
</li>
</ul>
虽然类名不同,但是都是以local-nav-icon
开头的,因此可以这么写。
先利用类名开头设置公共的样式,再根据具体每个span的类名设置精灵图坐标即可,这样减少了代码的冗余,否则全部用类名写,代码很冗余。或者使用两个类名等等。
.local-nav li [class^="local-nav-icon"] {
width: 32px;
height: 32px;
margin-top: 8px;
background: url(../images/localnav_bg.png) no-repeat 0 0;
background-size: 32px auto;
}
.local-nav li .local-nav-icon-icon2 {
background-position: 0 -32px;
}
.local-nav li .local-nav-icon-icon3 {
background-position: 0 -64px;
}
.local-nav li .local-nav-icon-icon4 {
background-position: 0 -96px;
}
.local-nav li .local-nav-icon-icon5 {
background-position: 0 -128px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.61
Branch: branch04
commit description:a2.61(携程网首页案例——局部导航栏快速更换图标)tag:a2.61
2.4 nav
主导航栏 => 大盒子里包含三行,每一行再分三列,后面两列细分上下两行。
大盒子用nav,小盒子用div。
宽度不用给,左右下(上:上一个盒子设置过了)设置margin,高度小盒子撑开即可,设置小圆角。
nav {
border-radius: 8px;
margin: 0 4px 3px;
}
<nav>
<div class="nav-common">1</div>
<div class="nav-common">2</div>
<div class="nav-common">3</div>
</nav>
.nav-common {
height: 88px;
background-color: pink;
}
每行的盒子还需设置距离 =>
给中间的盒子设置上下边距,或者前两个盒子都设置下边距。
.nav-common:nth-child(2) {
margin: 3px 0;
}
发现小圆角没有出现,那是因为div没有设置,它把父容器盖住了,给其设置overflow: hidden;
,切去多余的小圆角即可。
nav {
overflow: hidden;
border-radius: 8px;
margin: 0 4px 3px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.62
Branch: branch04
commit description:a2.62(携程网首页案例——第四行主导航整体布局)tag:a2.62
每一行再分三等分,准备三个div。
<!--主导航栏-->
<nav>
<div class="nav-common">
<div class="nav-items">a</div>
<div class="nav-items">b</div>
<div class="nav-items">c</div>
</div>
<div class="nav-common">2</div>
<div class="nav-common">3</div>
</nav>
紧接着使用flex布局,每一列各占一份。
.nav-common {
display: flex;
height: 88px;
background-color: pink;
}
.nav-items {
flex: 1;
}
每列需要小竖线隔开,设置div的边框就行了。
前两个div设置边框即可。因为设置了div边框,但采用的是css3的盒子模型,所以这个盒子不受影响,也不会掉下去。
.nav-items:nth-child(-n+2) {
border-right: 1px solid #fff;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.63
Branch: branch04
commit description:a2.63(携程网首页案例——第四行主导航子盒子布局)tag:a2.63
div中放入a标签作为单列每行
<nav>
<div class="nav-common">
<div class="nav-items">a</div>
<div class="nav-items">
<a href="#">海外酒店</a>
<a href="#">特价酒店</a>
</div>
<div class="nav-items">c</div>
</div>
<div class="nav-common">2</div>
<div class="nav-common">3</div>
</nav>
使用flex布局进行排布 =>
.nav-items {
flex: 1;
display: flex;
}
.nav-items a {
flex: 1;
}
修改主轴为y轴
.nav-items {
flex: 1;
display: flex;
flex-direction: column;
}
设置水平居中和垂直居中 =>
.nav-items a {
flex: 1;
text-align: center;
line-height: 44px;
}
设置字体样式,及边框。
.nav-items a {
flex: 1;
text-align: center;
line-height: 44px;
color: #fff;
font-size: 14px;
}
.nav-items a:nth-child(1) {
border-bottom: 1px solid #fff;
}
设置文字阴影效果 =>
.nav-items a {
flex: 1;
text-align: center;
line-height: 44px;
color: #fff;
font-size: 14px;
text-shadow: 1px 1px rgba(0,0,0,.2);
}
补充结构 =>
<nav>
<div class="nav-common">
<div class="nav-items">
<a href="#">海外酒店</a>
</div>
<div class="nav-items">
<a href="#">海外酒店</a>
<a href="#">特价酒店</a>
</div>
<div class="nav-items">
<a href="#">海外酒店</a>
<a href="#">特价酒店</a>
</div>
</div>
<div class="nav-common">2</div>
<div class="nav-common">3</div>
</nav>
由于第一列设置了下边框,所有有点高,不对齐。
如下第一个语句设置第一个a的下边框,因此第一列下方去除下边框。
.nav-items a:nth-child(1) {
border-bottom: 1px solid #fff;
}
.nav-items:nth-child(1) a {
border: 0;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.64
Branch: branch04
commit description:a2.64(携程网首页案例——第四行主导航填充内容)tag:a2.64
第一列下方需要填充背景图标,是三倍图,进行缩放。
.nav-items:nth-child(1) a {
border: 0;
background: url(../images/hotel.png) no-repeat;
background-size: 121px auto;
}
图片需要靠底端对齐,水平居中。
background: url(../images/hotel.png) no-repeat bottom center;
复制粘贴,剩下的结构一样。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.65
Branch: branch04
commit description:a2.65(携程网首页案例——完成第四行整个布局)tag:a2.65
背景颜色渐变,css3新增属性。 => 从一种颜色逐渐变为另一种颜色。
背景渐变必须添加浏览器私有前缀
起始方向可以是: 方位名词 或者 度数 , 如果省略默认就是 top
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
div {
width: 600px;
height: 200px;
background: -webkit-linear-gradient(left, red, blue);
}
</style>
</head>
<body>
<div></div>
</body>
</html>
起始方向可以是: 方位名词 或者 度数 , 如果省略默认就是 top,即从上往下。
background: -webkit-linear-gradient(red, blue);
从左上角开始渐变。
background: -webkit-linear-gradient(top left, red, blue);
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.66
Branch: branch04
commit description:a2.66(背景颜色渐变示例)tag:a2.66
完成渐变色
.nav-common:nth-child(1) {
background: -webkit-linear-gradient(left, #FA5A55, #FA994D);
}
.nav-common:nth-child(2) {
background: -webkit-linear-gradient(left, #4B90ED, #53BCED);
}
.nav-common:nth-child(3) {
background: -webkit-linear-gradient(left, #34C2A9, #6CD559);
}
补充其余位置的元素
<nav>
<div class="nav-common">
<div class="nav-items">
<a href="#">酒店</a>
</div>
<div class="nav-items">
<a href="#">海外酒店</a>
<a href="#">特价酒店</a>
</div>
<div class="nav-items">
<a href="#">团购</a>
<a href="#">民宿·客栈</a>
</div>
</div>
<div class="nav-common">
<div class="nav-items">
<a href="#">机票</a>
</div>
<div class="nav-items">
<a href="#">火车票</a>
<a href="#">特价机票</a>
</div>
<div class="nav-items">
<a href="#">汽车票·船票</a>
<a href="#">专车·租车</a>
</div>
</div>
<div class="nav-common">
<div class="nav-items">
<a href="#">旅游</a>
</div>
<div class="nav-items">
<a href="#">门票</a>
<a href="#">目的地攻略</a>
</div>
<div class="nav-items">
<a href="#">游轮旅行</a>
<a href="#">定制旅行</a>
</div>
</div>
</nav>
.nav-items:nth-child(1) a {
border: 0;
}
.nav-common:nth-child(1) .nav-items:nth-child(1) a {
background: url(../images/hotel.png) no-repeat bottom center;
background-size: 121px auto;
}
.nav-common:nth-child(2) .nav-items:nth-child(1) a {
background: url(../images/plane.png) no-repeat bottom center;
background-size: 81px auto;
}
.nav-common:nth-child(3) .nav-items:nth-child(1) a {
background: url(../images/travel.png) no-repeat bottom center;
background-size: 94px auto;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.67
Branch: branch04
commit description:a2.67(携程网首页案例——完成第四行样式)tag:a2.67
2.5 subnav-entry
使用ul和li
<!-- 侧导航栏 -->
<ul class="subnav-entry">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
设置圆角及背景色
.subnav-entry {
border-radius: 8px;
background-color: #fff;
}
需要设置左右的外边距 => margin: 0 4px;
同时body设置高度大一些,否则看不到底部了。 => height: 2000px;
引入flex布局,每个li占一份
.subnav-entry {
display: flex;
border-radius: 8px;
background-color: #fff;
margin: 0 4px;
}
.subnav-entry li {
flex: 1;
}
这里每行是五个,需要设置换行。 => flex-wrap: wrap;
但是依然没有换行。
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.68
Branch: branch04
commit description:a2.68(携程网首页案例——第五行整体外布局)tag:a2.68
因为10个li并没有设置宽度,flex除了设置1之外,还可以设置为百分比。
.subnav-entry li {
flex: 20%;
}
没有设置高度,实际高度可以根据内容撑开。
紧接着li中放入a,a中放入上下两个盒子即可,上边是图标,下边是文字。
<li>
<a href="#">
<span class="subnav-entry-icon"></span>
<spa>WIFI电话卡</spa>
</a>
</li>
.subnav-entry a {
display: flex;
}
.subnav-entry-icon {
width: 28px;
height: 28px;
background-color: pink;
}
设置主轴为y轴,侧周居中。
.subnav-entry a {
display: flex;
flex-direction: column;
align-items: center;
}
设置上边距及背景图标。
.subnav-entry-icon {
width: 28px;
height: 28px;
margin-top: 4px;
background: url(../images/subnav-bg.png) no-repeat;
background-size: 28px auto;
}
再完善其他部分。
<ul class="subnav-entry">
<!--li{$}*10-->
<li>
<a href="#">
<span class="subnav-entry-icon-icon1"></span>
<spa>WIFI电话卡</spa>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon2"></span>
<span>保险·签证</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon3"></span>
<span>外币兑换</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon4"></span>
<span>购物</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon5"></span>
<span>当地向导</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon6"></span>
<span>自由行</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon7"></span>
<span>境外玩乐</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon8"></span>
<span>礼品卡</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon9"></span>
<span>信用卡</span>
</a>
</li>
<li>
<a href="#">
<span class="subnav-entry-icon-icon10"></span>
<span>更多</span>
</a>
</li>
</ul>
这里和local-nav
一样,使用属性选择器。
.subnav-entry li [class^="subnav-entry-icon"] {
width: 28px;
height: 28px;
margin-top: 4px;
background: url(../images/subnav-bg.png) no-repeat;
background-size: 28px auto;
}
.subnav-entry li .subnav-entry-icon-icon2 {
background-position: 0 -32px;
}
.subnav-entry li .subnav-entry-icon-icon3 {
background-position: 0 -64px;
}
.subnav-entry li .subnav-entry-icon-icon4 {
background-position: 0 -320px;
}
.subnav-entry li .subnav-entry-icon-icon5 {
background-position: 0 -96px;
}
.subnav-entry li .subnav-entry-icon-icon6 {
background-position: 0 -160px;
}
.subnav-entry li .subnav-entry-icon-icon7 {
background-position: 0 -192px;
}
.subnav-entry li .subnav-entry-icon-icon8 {
background-position: 0 -128px;
}
.subnav-entry li .subnav-entry-icon-icon9 {
background-position: 0 -224px;
}
.subnav-entry li .subnav-entry-icon-icon10 {
background-position: 0 -288px;
}
距离还是有些,可以设置上下内边距 =>
.subnav-entry {
display: flex;
border-radius: 8px;
background-color: #fff;
margin: 0 4px;
flex-wrap: wrap;
padding: 5px 0;
}
修改精灵图,上述图标有些问题。
.subnav-entry li [class^="subnav-entry-icon"] {
width: 28px;
height: 28px;
margin-top: 4px;
background: url(../images/subnav-bg.png) no-repeat 0 0;
background-size: 28px auto;
}
.subnav-entry li .subnav-entry-icon-icon2 {
background-position: 0 -28px;
}
.subnav-entry li .subnav-entry-icon-icon3 {
background-position: 0 -56px;
}
.subnav-entry li .subnav-entry-icon-icon4 {
background-position: 0 -84px;
}
.subnav-entry li .subnav-entry-icon-icon5 {
background-position: 0 -112px;
}
.subnav-entry li .subnav-entry-icon-icon6 {
background-position: 0 -139px;
}
.subnav-entry li .subnav-entry-icon-icon7 {
background-position: 0 -168px;
}
.subnav-entry li .subnav-entry-icon-icon8 {
background-position: 0 -196px;
}
.subnav-entry li .subnav-entry-icon-icon9 {
background-position: 0 -224px;
}
.subnav-entry li .subnav-entry-icon-icon10 {
background-position: 0 -252px;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.69
Branch: branch04
commit description:a2.69(携程网首页案例——完成第五行样式)tag:a2.69
2.6 sales
整体划分出一个盒子,再通过上下细分两个子盒子。
<!--sales-->
<div class="sales-box">
123
</div>
.sales-box {
border-top: 1px solid #ccc;
background-color: #fff;
}
设置边距,四个方向 => margin: 4px;
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.70
Branch: branch04
commit description:a2.70(携程网首页案例——第六行外部大盒子布局)tag:a2.70
先完成头部hd部分样式
<div class="sales-box">
<div class="sales-hd">
</div>
</div>
.sales-hd {
height: 44px;
border-bottom: 1px solid #ccc;
}
左侧是一个图片,用h2标签,里面也将图片文字内容加入,这里主要方便搜索引擎搜索, 右侧用a标签可以点击,再放入图片。
<div class="sales-box">
<div class="sales-hd">
<h2>热门活动</h2>
<a href="#">更多</a>
</div>
</div>
h2中的文字是不需要显示的,使它隐藏。
.sales-hd h2 {
text-indent: -999px;
overflow: hidden;
}
用伪元素设置背景图片,因为是行内元素是看不到的,使用绝对定位即可。
.sales-hd h2 {
position: relative;
text-indent: -999px;
overflow: hidden;
}
.sales-hd h2::after {
position: absolute;
top: 8px;
left: 20px;
content: "";
width: 79px;
height: 15px;
background: url(../images/hot.png) no-repeat 0 -20px;
background-size: 79px auto;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.71
Branch: branch04
commit description:a2.71(携程网首页案例——第六行热门活动图标)tag:a2.71
右侧也使用定位偏移到右边 =>
<div class="sales-box">
<div class="sales-hd">
<h2>热门活动</h2>
<a href="#" class="more">获取更多福利</a>
</div>
</div>
.sales-hd {
position: relative;
height: 44px;
border-bottom: 1px solid #ccc;
}
.more {
position: absolute;
right: 5px;
top: 8px;
}
指定背景并渐变,并设置圆角。
.more {
position: absolute;
right: 5px;
top: 8px;
background: -webkit-linear-gradient(left, #FF506C, #FF6BC6);
border-radius: 15px;
}
两边有点近,使用padding挤开,并设置字体颜色 =>
右边要大些,因为要放箭头。
.more {
position: absolute;
right: 5px;
top: 8px;
background: -webkit-linear-gradient(left, #FF506C, #FF6BC6);
border-radius: 15px;
padding: 3px 20px 3px 10px;
color: #fff;
}
箭头使用伪元素即可 =>
使用上边框和右边框,然后旋转即可
.more::after {
content: "";
position: absolute;
top: 9px;
right: 9px;
width: 7px;
height: 7px;
border-top: 2px solid #fff;
border-right: 2px solid #fff;
transform: rotate(45deg);
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.72
Branch: branch04
commit description:a2.72(携程网首页案例——第六行获取更多福利按钮)tag:a2.72
这里实际都是大图片,所有外层一个容器,里面是三行两列,即两等份即可。使用div当做容器,最里面使用a标签里插入背景图即可。
<!--sales-->
<div class="sales-box">
<div class="sales-hd">
<h2>热门活动</h2>
<a href="#" class="more">获取更多福利</a>
</div>
<div class="sales-bd">
<div class="row">
<a href="#">
<img src="upload/pic1.jpg" alt="">
</a>
<a href="#">
<img src="upload/pic2.jpg" alt="">
</a>
</div>
<div class="row">
<a href="#">
<img src="upload/pic3.jpg" alt="">
</a>
<a href="#">
<img src="upload/pic4.jpg" alt="">
</a>
</div>
<div class="row">
<a href="#">
<img src="upload/pic5.jpg" alt="">
</a>
<a href="#">
<img src="upload/pic6.jpg" alt="">
</a>
</div>
</div>
</div>
图片都太大了!
设置flex布局
.row {
display: flex;
}
.row a {
flex:1;
}
.row a img {
width: 100%;
}
a下是有底边框的
.row a {
flex:1;
border-bottom: 1px solid #eee;
}
第一列盒子设置右边框
.row a:nth-child(1) {
border-right: 1px solid #eee;
}
参考:https://github.com/6xiaoDi/blog-CSS/tree/a2.73
Branch: branch04
commit description:a2.73(携程网首页案例——完成第6行样式)tag:a2.73
(后续待补充)