CSS3等相关属性制作分页导航实现代码


Posted in HTML / CSS onDecember 24, 2012

W3cplus第二版本刚上线时,好多位朋友向我问起站上的分页导航样式是怎么制作,像是图片一样。前面都是随便说了一下制作的过程,为了报答各位朋友一持对本站的大力支持,今天我特意把这个分页导航的效果当作一个小教程来说。希望大家会喜欢。

目标

今天我们主要的目的是使用CSS3等相关属性来制作W3cplus站点上的分页导航效果,大家可以这点击这里查看站点上的效果,也可以直击下面的效果图:

CSS3等相关属性制作分页导航实现代码

在这个效果中,其实只有两大看点

使用CSS3的属性,制作不规则图形效果,并且hover状态下会慢慢改变图形和字体颜色;让列表水平居中,这个效果我曾多次碰到同学问怎么使用一个列表居中显示,并且排在一行,列表还要自适应内容的宽度。看起来复杂,其实不难,这也是我下面要重点介绍的一个小技巧。

HTML Markup

有想做东西,我们就需要有材料,我这里所说的材料就是我们分页导航的HTML Markup,下面我们一起来看看吧:

复制代码
代码如下:

<ul class="pager" >
<li class="pager-first first" >
<a class="active" title="到第一页" href="/css3" >« 首页 </a>
</li>
<li class="pager-previous" >
<a class="active" title="返回上一个页面" href="/css3?page=2" >‹ 上一页 </a>
</li>
<li class="pager-item" >
<a class="active" title="到第 1 页" href="/css3" >1</a>
</li>
<li class="pager-item" >
<a class="active" title="到第 2 页" href="/css3?page=1" >2</a>
</li>
<li class="pager-item" >
<a class="active" title="到第 3 页" href="/css3?page=2" >3</a>
</li>
<li class="pager-current" >4</li>
<li class="pager-item" >
<a class="active" title="到第 5 页" href="/css3?page=4" >5</a>
</li>
<li class="pager-item" >
<a class="active" title="到第 6 页" href="/css3?page=5" >6</a>
</li>
<li class="pager-next" >
<a class="active" title="去下一个页面" href="/css3?page=4" >下一页 › </a>
</li>
<li class="pager-last last" >
<a class="active" title="到最后一页" href="/css3?page=5" >尾页 » </a>
</li>
</ul>

这样的结构是我常用来制作分页导航的结构,当然大家还有其他的不同结构,今天我们就不去探讨这方面的问题。其实这个结构很简单,我们把每一页的序号放在了一个“<a>”中,然后对应放在列表项中。唯一需要注意的一点就是“当前页”,因为所处当前页是不需要有具有点击效果,所以我直接将当前页放在一个“li”中,并且命名一个“pager-current”的类名给他,大家可以从Firebug的截图中来看这样的区别:

CSS3等相关属性制作分页导航实现代码

CSS Code
有了结构,就需要用CSS来美化他:
复制代码
代码如下:

body {
font:12px/162% Tahoma,Arial,Helvetica,"SimSun","Arial Narrow",Geneva,sans-serif;
}
.pager {
list-style: none outside none;
margin: 20px;
padding: 0;
text-align: center;
}
.pager li {
display: inline-block;
margin: 0;
padding: 0;
}
* html .pager li { display: inline; }
*+html .pager li { display: inline; }
.pager li.pager-current,
.pager li a {
-moz-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
-webkit-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
background: #232B30; /* old browsers */
background: -moz-linear-gradient(top, #3D4850 3%, #313d45 4%, #232B30 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(3%,#3D4850), color-stop(4%,#313d45), color-stop(100%,#232B30)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3D4850', endColorstr='#232B30',GradientType=0 ); /* ie */
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* Firefox */
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* Safari, Chrome */
box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* CSS3 */
color: #FFFFFF;
font-size: 12px;
margin-left: 10px;
padding: 3px 12px;
-webkit-transition: all 0.5s ease-in 0s;
-moz-transition: all 0.5s ease-in 0s;
-o-transition: all 0.5s ease-in 0s;
transition: all 0.5s ease-in 0s;
text-decoration: none;
zoom:1;
}
.pager li.pager-current {
-moz-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
-webkit-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
color: #d54e21;
font-weight: bold;
}
.pager li a:hover {
-moz-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
-webkit-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
background: #4C5A64; /* old browsers */
background: -moz-linear-gradient(top, #4C5A64 3%, #404F5A 4%, #2E3940 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(3%,#4C5A64), color-stop(4%,#404F5A), color-stop(100%,#2E3940)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4C5A64', endColorstr='#2E3940',GradientType=0 ); /* ie */
color: #d54e21;
}

上面是DEMO效果所使用的CSS代码,下面我们一起来细看一下上面的代码:

1、不规则图形

我在此处主要使用CSS3的border-readius属性制作的不规则圆角效果:

复制代码
代码如下:

.pager li a
-moz-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
-webkit-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
}

有关于其详细介绍,大家可以点击《CSS3的圆角Border-radius》。上面是默认状态下的效果,那么在hover下改变图形样式,我想大家都想到了,是的那就是在“:hover”下改变其风格:
复制代码
代码如下:

.pager li a:hover {
-moz-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
-webkit-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
}

2、背景色

通过第一步,我们只制作出来不规则的边界效果,需要在上面的基础上加上背景色,这样填充进行就形成了不规则的图形,类似于图片效果。这里填充颜色,使用的是CSS3的渐变属性——Gradient来实现的:

复制代码
代码如下:

.pager li a {
background: #232B30; /* old browsers */
background: -moz-linear-gradient(top, #3D4850 3%, #313d45 4%, #232B30 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(3%,#3D4850), color-stop(4%,#313d45), color-stop(100%,#232B30)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3D4850', endColorstr='#232B30',GradientType=0 ); /* ie */
}
.pager li a:hover {
background: #4C5A64; /* old browsers */
background: -moz-linear-gradient(top, #4C5A64 3%, #404F5A 4%, #2E3940 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(3%,#4C5A64), color-stop(4%,#404F5A), color-stop(100%,#2E3940)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4C5A64', endColorstr='#2E3940',GradientType=0); /* ie */
color: #d54e21;
}

3、动画效果

上面完成的只是一个静态的CSS3样式效果,但我们上面的DEMO中是有一个动态改变背景的效果,这个效果我主要使用了CSS3的transition属性:

复制代码
代码如下:

.pager li a {
-webkit-transition: all 0.5s ease-in 0s;
-moz-transition: all 0.5s ease-in 0s;
-o-transition: all 0.5s ease-in 0s;
transition: all 0.5s ease-in 0s;
}

请注意,我们的效果是在“a:hover”状态下发生的,所以大家会以为动画效果是加载在“a:hover”上,其实不是的,我需要在“a”上设置一个“transition”属性,当在“a:hover”状态下,元素样式参数值改变时,就会给我们带一个动画效果一样。具体的使用方法大家可以参阅《CSS3 Transition 》。当然大家如果成使用更好的动画效果,你可以使用CSS3的Animation来作。感兴趣的话可以参考animate.css和animatable.css。

4、当前项效果

因为我们当前项是没有放在“a”标签中的,为了让其和其他项样式一样,我们需要把当前项的样式和“a”链接的样式设置成一样,不同之处是,他的效果类似于“a:hover”效果:

复制代码
代码如下:

.pager li.pager-current,
.pager li a {
-moz-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
-webkit-border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
border-radius: 70px 20px 38px 20px / 20px 30px 10px 10px;
background: #232B30; /* old browsers */
background: -moz-linear-gradient(top, #3D4850 3%, #313d45 4%, #232B30 100%); /* firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(3%,#3D4850), color-stop(4%,#313d45), color-stop(100%,#232B30)); /* webkit */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3D4850', endColorstr='#232B30',GradientType=0 ); /* ie */
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* Firefox */
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* Safari, Chrome */
box-shadow: 1px 1px 1px rgba(0,0,0,0.2); /* CSS3 */
color: #FFFFFF;
font-size: 12px;
margin-left: 10px;
padding: 3px 12px;
-webkit-transition: all 0.5s ease-in 0s;
-moz-transition: all 0.5s ease-in 0s;
-o-transition: all 0.5s ease-in 0s;
transition: all 0.5s ease-in 0s;
text-decoration: none;
zoom:1;
}
.pager li.pager-current {
-moz-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
-webkit-border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
border-radius:20px 30px 10px 10px / 70px 20px 38px 20px;
color: #d54e21;
font-weight: bold;
}

5、列表居中

这一点是我今天要特别提出来的一点,大家都知道,我们列表项要放置在一行显示,需要使用“float”来实现,但是使用了浮动后,我们就无法让整个分页导航水平居中,如此一来就会给我们带来一个两难境地。那么今天我在这里给大家展示另外一种处理方法:“display:inline-block”来让列表项显示在一行,大爱看到这个肯定又说难了,因为其在IE6-7下是无法支持的。这一点大家说的一点不错,其实我们只需要在IE下稍作处理就OK了,我们具体来看一下如何实现其水平居中:

复制代码
代码如下:

.pager {
text-align: center;/*====让列表项内容居中放====*/
padding: 0;
margin: 20px;
list-style: none outside none;
}
.pager li {
display: inline-block;/*===改变列表项显示方式为行内块===*/
margin: 0;
padding: 0;
}

起到列表水平居中的效果,我们靠的就是上面的两句代码“text-align: center”和“display: inline-block”,但大家写的时候一定不能放借位置哟,前一句是放在“ul”中,后一句是放在“li”中,我们来看看效果:

CSS3等相关属性制作分页导航实现代码

从上图中我们很明显的看到了,IE6-7下是无法排在一行中显示的,那么我们现在来看如何处理他们的兼容问题。我们使用Hack来,让IE6-7下按另外一种方法显示:

复制代码
代码如下:

[code]
* html .pager li { display: inline; }
*+html .pager li { display: inline; }
.pager li a {
zoom: 1;
}
   
[/code]
现在我们在来看一下,加上以上代码后的效果:

CSS3等相关属性制作分页导航实现代码

现在在所有浏览器下都能水平居中了。只是部分浏览器不支持CSS3的属性,这些我们无需理会他了。最后为了让其更美丽一点,我在这里还使用了css3的其他属性,比如说text-shadow、box-shadow等等。

那么一个和W3cplus站点一样的分页效果就做好了,感兴趣的话你也可以动手一试。大家一起来看一下最终效果吧:

CSS3等相关属性制作分页导航实现代码

HTML / CSS 相关文章推荐
CSS3实现王者荣耀匹配人员加载页面的方法
Apr 16 HTML / CSS
CSS3标注引用的出处和来源的方法
Feb 25 HTML / CSS
css3实现书本翻页效果的示例代码
Mar 08 HTML / CSS
基于 HTML5 WebGL 实现的垃圾分类系统
Oct 08 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
Jan 31 HTML / CSS
HTML5 在canvas中绘制文本附效果图
Jun 23 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
Dec 09 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
Dec 29 HTML / CSS
HTML5拖拉上传文件的简单实例
Jan 11 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
Aug 11 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
Jan 27 HTML / CSS
CSS3实现模糊背景的三种效果示例
Mar 30 HTML / CSS
使用CSS3的appearance属性改变任何元素的浏览器默认风格
Dec 24 #HTML / CSS
css背景图片的背景裁切、背景透明度、背景变换等效果运用
Dec 24 #HTML / CSS
修复iPhone的safari浏览器上submit按钮圆角bug
Dec 24 #HTML / CSS
表单button的outline在firefox浏览器下的问题
Dec 24 #HTML / CSS
button在IE6/7下的黑边去除方案
Dec 24 #HTML / CSS
移动Web—CSS为Retina屏幕替换更高质量的图片
Dec 24 #HTML / CSS
image-set实现Retina屏幕下图片显示详细介绍
Dec 24 #HTML / CSS
You might like
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
Python 异常处理的实例详解
2017/09/11 Python
详解Python字符串切片
2019/05/20 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
电子商务专业求职信
2014/03/08 职场文书
学习十八大宣传标语
2014/10/09 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
自信主题班会
2015/08/14 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS
使用Ajax实现进度条的绘制
2022/04/07 Javascript
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技