当前位置: 首页 > 编程日记 > 正文

运用比较纯的CSS打造很Web2.0的按钮

警告:如果你在使用IE浏览此文,那么请回避一下吧! 什么,你用的还是IE6?你真奥特曼(推荐你去打小怪兽)!

先上图,所谓有图有真相。

最终效果图

如果您觉得图片上这些按钮不够2.0,那没办法,请回避吧!

从图片中,我们可以看到,我们要解决如下几个问题:

  1. 背景色渐变
  2. 圆角框
  3. 阴影效果

就目前而言,要实现如上的效果,我们可以通过使用PNG图片来实现,但熟悉的人都知道,要做出这样的效果来,还是需要花费很多的经力的。更何况还要画出这么多种配色(感谢一下辛苦的前台工程师们)。

接下来,就让我们看下使用CSS(主要是CSS3)怎么来做吧。

一、背景色渐变

我们首先来解决第一个问题,背景色渐变。CSS3是支持背景色渐变的。对于在Firefox 3.6里面使用背景色渐变,可以参考以下一下这个网址:http://css-tricks.com/forums/viewtopic.php?f=8&t=3998,而WebKit引擎的可以参考这个:http://webkit.org/blog/175/introducing-css-gradients/。但在此处,我还将用比较传统的方式来实现。经常,我们会画一些渐变的图片来做背景,如图:渐变图

然后我们可以使用css设置background-image来实现渐变,而对于悬停(hover),则可通过设置background-position来实现。但这样我们会发现,但需要大量的配色时,要画出这一张张的图片来,还是一件比较耗体力的事(就算你的Photoshop里面存了一大堆这样的样式)。

仔细一想,其实这种渐变颜色基调往往都是一致的,而且往往是从较亮的颜色变到次亮点的颜色(我相信不会有人会要一个蓝变到红的按钮)。那么,我们想,既然是从亮变到暗,而且颜色基调一致,这不就和我们生活中把光从顶部往下照到一块纯色的布上的效果是一样的嘛。那么,如何模拟这种效果呢?很简单,画一张从白色到透明渐变的图往一个纯色的区域上一罩不就OK啦。PhotoShop中的渐变图:Photoshop 中的白色到透明渐变图

CSS如下:

.orange{
background
: #FF5C00 url(images/light-overlay.png) repeat-x scroll 0 0;
}
.orange:hover
{
background-color
: #D45500;
}

这样呢,我们就以一种相对比较简单的方式解决了能够满足大多数场合需求的背景色渐变效果。效果图如下:渐变

二、圆角框

接下来,我们看看圆角框。按照我们现在的习惯,圆角框一般都是通过图片来实现。当然也有通过纯CSS(2.0)实现的,园子里有人介绍过。

但那样会多写一丁点HTML。幸运的是CSS3支持圆角框,而且目前那些真正叫做的浏览器的浏览器也是支持圆角框的。只是写法稍微有点不同而已。如下:

.orange{
-moz-border-radius
: 5px;
-webkit-border-radius
: 5px;
}

明眼人一看就知道,上面那个是针对Firefox用的,下面是针对webkit内核的浏览器用的。效果图:圆角

三、阴影效果

在平常切页面(psd->html)的过程中,我最不喜欢做的就是两件事:一件是切圆角框,另外一件是切阴影,第三件便是切带阴影的圆角框(我讨厌数数数不清的人)

但是,自从看到下面的代码之后,哥笑了。

.orange {
-moz-box-shadow
: 0 1px 3px rgba(0,0,0,0.5);
-webkit-box-shadow
: 0 1px 3px rgba(0,0,0,0.5);
}

先看效果图:

effect-2

这里面,需要特别指出的是,在CSS3里面,我们可以用RGBA模式选取颜色。所谓RGBA就是在原来的RGB中加了个A(废话)。这个A就是指Alpha,即透明度。合起来,我们就叫RGBA。然后写css时就可以采用rgba(0,0,0,0.5)这样的写法了。

对于-moz-box-shadow的写法可以参考https://developer.mozilla.org/En/CSS/-moz-box-shadow,

嗯,阴影有了,写法如此简单。什么?文字不够2.0?好吧,继续加码:

1 .orange {
2 text-shadow: 0 -1px 1px rgba(0,0,0,0.8);
3  }
  

还是明眼人就知道,text-shadow就是给文字加阴影。

哦耶,最终效果图:

最终效果图

text-shadow的写法可以参考https://developer.mozilla.org/en/CSS/text-shadow。

最终的CSS代码如下:

代码
.orange,.magenta,.blue,.green,.red {
display
: inline-block;
width
: 150px;
height
: 36px;
line-height
: 36px;
color
: #ffffff;
text-decoration
: none;
text-align
: center;
font-family
: "Courier New", Courier, monospace;

font-weight
: bold;
background
: transparent url(images/light-overlay.png) repeat-x scroll 0 0;
margin
: 5px;
border-bottom
: 1px solid rgba(0,0,0,0.25);
-moz-border-radius
: 5px;
-webkit-border-radius
: 5px;
-moz-box-shadow
: 0 1px 3px rgba(0,0,0,0.5);

-webkit-box-shadow
: 0 1px 3px rgba(0,0,0,0.5);
text-shadow
: 0 -1px 1px rgba(0,0,0,0.8);
}

.orange
{
background-color
: #FF5C00;
}
.orange:hover
{
background-color
: #D45500;
}
.blue
{
background-color
: #2DAEBF;
}
.blue:hover
{
background-color
: #007D9A;
}
.green
{
background-color
: #91BD09;
}
.green:hover
{
background-color
: #749A02;
}
.red
{
background-color
:#E33100;
}
.red:hover
{
background-color
:#872300;
}
.magenta
{
background-color
:#A9014B;
}
.magenta:hover
{
background-color
:#630030;
}

Html是酱子的:

Html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2  <html xmlns="http://www.w3.org/1999/xhtml">
3
4  <head>
5  <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
6  <title>使用比较纯的CSS创建很Web2.0的按钮</title>
7  <style type="text/css">
8 .white-area,.dark-area {
9 padding: 10px;
10 margin: 0px;
11 -moz-border-radius: 5px;
12 -webkit-border-radius: 5px;
13 }
14 .white-area {
15 background-color: #ffffff;
16 }
17 .dark-area {
18 background-color: #333333;
19 }
20 .columns {
21 float: left;
22 margin-left: 10px;
23 }
24 .clear {
25 clear: both;
26 }
27  </style>
28  <link rel="stylesheet" href="css3buttons.css" charset="utf-8" />
29  </head>
30
31  <body>
32 <div class="white-area">
33 <a href="javascript:void(0);" class="orange">Web 2.0</a>
34 <a href="javascript:void(0);" class="magenta">Web 2.0</a>
35 <a href="javascript:void(0);" class="red">Web 2.0</a>
36 <a href="javascript:void(0);" class="blue">Web 2.0</a>
37 <a href="javascript:void(0);" class="green">Web 2.0</a>
38 </div>
39 <div class="dark-area">
40 <a href="javascript:void(0);" class="orange">Web 2.0</a>
41 <a href="javascript:void(0);" class="magenta">Web 2.0</a>
42 <a href="javascript:void(0);" class="red">Web 2.0</a>
43 <a href="javascript:void(0);" class="blue">Web 2.0</a>
44 <a href="javascript:void(0);" class="green">Web 2.0</a>
45 </div>
46  </body>
47
48  </html>

要看更丰富的效果,可以下源码,点击下载呀!

四、结语

嗯,感谢CCTV、感谢KTV,感谢。。。唉呀,谁扔的臭鸡蛋!!!

说正经的,本人不是专业美工,更谈不上UI设计师。我只是一位码农,不管是写代码的的农民也好,还是天天除了写代码就玩农场的程序员也好,我就是这样的。之所以写这篇东西,也是因为看到了这个地方http://www.zurb.com/article/266/super-awesome-buttons-with-css3-and-rgba,感觉很好玩,就连翻译带自己的理解加上周未休息的时间(农场里面菜还没熟,等得寂寞了),写下这个东西了。

谢谢观赏!

转载于:https://www.cnblogs.com/lingcooler/archive/2009/12/12/1622620.html

相关文章:

Elasticsearch 参考指南(脚本)

脚本 脚本模块使你可以使用脚本来评估自定义表达式&#xff0c;例如&#xff0c;你可以使用脚本将“脚本字段”作为搜索请求的一部分返回&#xff0c;或者为查询评估自定义分数。 默认脚本语言是Painless&#xff0c;附加的lang插件使你可以运行用其他语言编写的脚本&#xff0…

eclipse如何卸载adt插件

1、选择 Help Install New Software&#xff1b; 2、在Details 面板中, 点击What is already installed? 链接&#xff1b; 3、在Eclipse Installation Details 对话框中&#xff0c;选择Android DDMS和Android Development Tools &#xff0c;然后点击Uninstall&#xff1b;…

1099 Build A Binary Search Tree

1. 本题给出了树的样子&#xff0c;给出了用来填充的数列&#xff0c;并且告诉是一棵二叉查找树。 2. 先用静态存储的方式将树的框架建立起。然后对数列进行小到大排序&#xff0c;利用BST中序遍历是升序的性质&#xff0c;通过中序遍历将数值填充的树中。 3. 层序输出的时候…

redis4.0.6集群部署(5.0.2版本更新补充)

Redis集群安装4版本需要ruby 5版本不需要ruby就能集群1集群机器分布192.168.1.133 redis1192.168.1.134 redis2192.168.1.135 redis32 免密登录ssh-keygenssh-copy-id 192.168.1.133ssh-copy-id 192.168.1.134ssh-copy-id 192.168.1.1353 关闭防火墙sy…

PHP多图片上传 并检查 加水印 源码

参数说明:$max_file_size : 上传文件大小限制, 单位BYTE$destination_folder : 上传文件路径$watermark : 是否附加水印(1为加水印,其他为不加水印);使用说明:1. 将PHP.INI文件里面的"extensionphp_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;2. 将extension_dir…

C#中的委托和事件 (4)---事件和委托的编译代码

事件和委托的编译代码 这时候&#xff0c;我们不得不注释掉编译错误的行&#xff0c;然后重新进行编译&#xff0c;再借助Reflactor来对 event的声明语句做一探究&#xff0c;看看为什么会发生这样的错误&#xff1a; public event GreetingDelegate MakeGreet; 可以看到&#…

1066 Root of AVL Tree 需再做

1. 这题如果不知道平衡二叉树怎么平衡的(左旋右旋那一套)应该不可能做出吧&#xff0c;那就输出中位数回点血了。 2. 需要具备的基础知识&#xff1a;怎么将结点插入平衡二叉树。 3. 我犯的一个错误&#xff1a;把更新高度的函数直接返回了高度&#xff0c;而不没有修改高度。…

easyui-menu 解决disableItem不能禁用绑定事件的方法

版本&#xff1a;1.4. menu的disableItem方法不能禁用使用onClick方式绑定的事件。 解决思路如下&#xff1a; 重写disableItem方法和enableItem方法。 /*** menu方法扩展* param {Object} jq* param {Object} itemEl*/ $.extend($.fn.menu.methods, {/*** 激活选项&#xff0…

hadoop无法访问50070端口怎么办?

转载请注明出处&#xff1a;www.oldboyedu.com Hadoop 50070是hdfs的web管理页面&#xff0c;在搭建Hadoop集群环境时&#xff0c;有些大数据开发技术人员会遇到Hadoop 50070端口打不开的情况&#xff0c;引起该问题的原因很多&#xff0c;想要解决这个问题需要从以下方面进行排…

表情的机器自动识别(有图有真相)

这幅图片是我自己用C#编写的表情的机器自动识别。主要是AdaBoost的实现&#xff0c;训练做了几个不同版本&#xff1a;线性、并行和分布式&#xff0c;训练数据集采用的JAFFE。 有朋友问这东西有什么用处&#xff0c;其实主要是为了玩而已了。这是基于Paul Ekman那本著名的《情…

并查集专题练习:好朋友(未完待续)

有空再把题目补上 输入样例1 4 2 1 4 2 3 样例输出1 2 输入样例2 7 5 1 2 2 3 3 1 1 4 5 6 输出样例2 3 解题思路&#xff1a; 1. 这题放在并查集的专题后面&#xff0c;有查找也有合并&#xff0c;需要具备的基础只是是合并和查找的函数要会写(都很简单)。但是读到每…

android Viewpager取消预加载及Fragment方法的学习

1.在使用ViewPager嵌套Fragment的时候&#xff0c;由于VIewPager的几个Adapter的设置来说&#xff0c;都会有一定的预加载。通过设置setOffscreenPageLimit&#xff08;int number) 来设置预加载的熟练&#xff0c;在V4包中&#xff0c;默认的预加载是1&#xff0c;即使你设置为…

前端Js框架 UI框架汇总 特性 适用范围 选择

身为一个资深后端工程师&#xff0c;面对层出不穷的前端框架&#xff0c;总让人眼花缭乱&#xff0c;做一个综合解析贴&#xff0c;从全局着眼&#xff0c;让我们明白各种前端框架的应用范围&#xff0c;为如何选择前端框架&#xff0c;从不同的维度提供一些线索&#xff0c;做…

Emptyproject分析

Emptyproject分析(SimpleSample)1&#xff0c;InitApp()WinMain中有一个InitApp()&#xff0c;在sample中存在&#xff0c;但是在emptyproject中没有&#xff0c;该函数是用于设定已经声明的一些一般变量的初始值的。比如某些按钮。2&#xff0c;IsDeviceAcceptable()被WinMain…

1107 Social Clusters

这道题目给出的示例如上图所示&#xff0c;一共有1-8这8个人(圆形)&#xff0c;他们拥有1-10这10个兴趣爱好(方形)&#xff0c;一人可以有多个爱好&#xff0c;拥有共同爱好的人被视为一个社区的。现在给出每个人的爱好情况&#xff0c;求出社区的个数&#xff0c;并按照从大到…

c#直接调用ssis包实现Sql Server的数据导入功能

调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过&#xff0c;自己参考后也动手实现了一下&#xff0c;上一次笔者的项目中还用了一下这个功能。思前想后&#xff0c;决定还是贴一下增强记忆&#xff0c;高手请54.1、直接调用ssis包&#xff0c;需要引用Microsof…

从入门到放弃的javaScrip——队列

队列数据结构 队列是遵循FIFO&#xff08;First In First Out&#xff0c;先进先出&#xff0c;也称为先来先服务&#xff09;原则的一组有序的项。队列在尾部添加新元素&#xff0c;并从顶部移除元素。最新添加的元素必须排在队列的末尾。 现实中&#xff0c;很常见的例子就是…

css控制不换行

white-space:nowrap; 转载于:https://www.cnblogs.com/w8104254/p/4178198.html

(C++)堆排序的3个关键函数

堆排序&#xff1a;指使用堆结构对一个序列进行排序。所以&#xff0c;首先要有一个堆结构。 此处讨论递增排序。以及用最大堆。 注意&#xff1a;让存放堆的数组作为全局变量&#xff0c;n为元素个数&#xff0c;数组存放元素从下标1开始&#xff0c;n结束。 int heap[11] …

android 横竖屏限制如何配置

在开发android的应用中&#xff0c;有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。 ndroid:screenOrientation"landscape"是限制此页面横屏显示&#xff0c; ndroid:screenOrientation"portrait"是…

Java面试题总结-Day4

<?xml version"1.0" encoding"utf-8"?> Java面试题总结-Day4Java面试题总结-Day4 Table of Contents 1. ArrayList和LinkedList区别 1.1. 是否线程安全1.2. 底层数据结构1.3. 插入和删除是否受元素位置的影响1.4. 是否支持快速随机访问1.5. 内存空…

Linux 使用者身份與群組記錄的檔案

在我們Linux系統當中&#xff0c;預設的情況下&#xff0c;所有的系統上的帳號與一般身份使用者&#xff0c;還有那個root的相關資訊&#xff0c; 都是記錄在/etc/passwd這個檔案內的。至於個人的密碼則是記錄在/etc/shadow這個檔案下。 此外&#xff0c;Linux所有的群組名稱都…

1098 Insertion or Heap Sort 需再做

1. 应该还做过一道类似的题目&#xff0c;也是要求判断属于哪种排序的中间过程&#xff0c;并要求写出下一轮排序结果&#xff0c;这次的进步是上来就知道用向量存数据&#xff0c;这样方便直接比较&#xff0c;而且下标0不能存元素&#xff0c;因为堆排序的堆是一个完全二叉树…

基于node.js的压缩合并安装

1.构建工具&#xff08;grunt,gulp&#xff09; 下载地址&#xff1a;http://gruntjs.cn/http://gruntjs.com/&#xff08;1&#xff09;安装nodejs(http://www.nodejs.org/) 验证是否安装成功&#xff0c;命令行输入 node -v &#xff08;2&#xff09;grunt 的安装 安装全局…

jenkins 修改工作目录

修改Jenkins路径 Jenkins的默认安装路径是/var/lib/jenkins 现在由于这个根目录的磁盘太小&#xff0c;所以切换到/data 目录下。 Jenkins目录、端口、工作目录等信息在/etc/sysconfig/jenkins 下&#xff0c;所以需要修改这个文件。 将JENKINS_HOME"/var/lib/jenkins&quo…

破一个行业ERP的感想

今天闲来无事&#xff0c;找来破一破。 这个是一个行业性质的ERP软件&#xff0c;有授权码验证&#xff0c;客户机数量限定&#xff0c;以及使用时间限定&#xff0c;被一一破解。 授权码存在明显的绕过bug.客户机数量同样被明文标注在文件中。使用时间也是标注在文件中&#x…

1034 Head of a Gang(图的DFS解法) 擦边大法好

1.题目的大意是给出很多人(结点)之间的通话记录&#xff0c;每两人之间的权重取决于他俩通话权重的总时长&#xff0c;如果一个社区的人数超过2且社区内发生的通话总时长超过给定阈值&#xff0c;那么这属于一个社区。最后要求输出社区的总数&#xff0c;再按照社区头目的姓名字…

Android定位方式和测试方法

Android常用的三种定位方式有&#xff1a;基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位&#xff1a; GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定…

vue el-form鼠标事件导致页面刷新解决方案;vue 阻止多次点击提交数据通用方法...

一.阻止表单自动提交刷新页面&#xff1a;<el-form><el-form-item :inline"true" submit.native.prevent><el-input keyup.enter.nativesubmit></el-input></el-form-item> </el-form>注意&#xff1a; 鼠标事件导致页面刷新问…

[转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库

wxODBC(wxWidgets)中使用驱动程序方式打开数据库 wxWidgets的文档中都是使用在控制面板/数据源中设定DSN来创建ODBC连接。但是实际上很多小型的应用&#xff0c;只是使用本机的一个Access数据库。而要求使用者学习ODBC的DSN配置明显的增加了软件的使用难度。因此&#xff0c;研…