一个button的成长过程



html代码:

<button>Rabbit</button>


CSS代码:

padding: 6px 16px;

border: 1px solid #446d88;

background: #58a linear-gradient(#77a0bb, #58a);

/* 设置背景渐变。

第一个#58a用来定义一个背景色,作用是如果不兼容渐变背景的浏览器,会把背景色显示成#58a */

border-radius: 4px;

/* 圆角 */

box-shadow: 0 1px 5px gray;

/* 盒子阴影 */

color: white;

text-shadow: 0 -1px 1px #335166;

/* 字体阴影 */

font-size: 20px;

line-height: 30px;



比例篇

以上代码能已经能得到图1的效果了。但维护性极差。如果要修改button大小,那么字体、阴影、边框的圆角都要跟着修改,工作量会变大。在修改之前,要清楚哪些要相对单位,哪些要用绝对单位。

首先能直接修改的是CSS部分最后2行代码。如果要修改字号(字体大小),那么行高就要做出相应的变化。现在从行高和字号来看,行高是字号的1.5倍。但是从上面的代码中,行高并没有反映出它跟字号的关系。当某些值相互依赖时,应该把它们的相互关系用代码表达出来。

可以直接修改行高

font-size: 20px;

line-height: 1.5;

对字体来说,用绝对单位值(px)来定义的确很好理解,也很容易掌控。但是如果要修改网页中其他位置文字的字号,或者是修改button父元素的字号,那么button和网页中其他地方的字号就要相应作出修改了。所以在这里用em或者百分比做单位会比较合适。

假设父元素的字号是16px(在很多浏览器里面,默认的字号是16px)

font-size: 125%;

line-height: 1.5;

现在,如果button父元素的字号改变了,那么button的尺寸也会随之改变(因为字体变大了,而button只设了padding,所以button会被字体撑大)。但是button的内边距、圆角大小、阴影都不会跟着变化,所以看起来比较别扭。比如下图。


这里我把body的字号设成5em,与图1比起来,好像差了很多。所以我们相应也要把padding、border-radius、box-shadow和text-shadow的单位改成相对单位。

padding:.3em.8em;

border-radius:.2em;

box-shadow: 0.05em.25emgray;

text-shadow: 0-.05em.05em#335166;

以上修改的地方,都是用原来的 绝对值÷16 得出一个近似值。而 像“.3em”这类数值,前面的0都省略掉了,CSS3支持这样的省略。真实值是0.3em。


现在看上去比例就正常了。

这个例子中,没进行边框粗细的设置。因为希望button的边框粗细始终保持1px,不受button尺寸的影响。



色彩篇

在一个网站中,颜色也是一个重要的变数。比如有“确定”按钮,也有“取消”按钮。它们长得一模一样,就是颜色不同。

所以我们可能需要覆盖4条声明(border-color、background

、box-shadow、text-shadow),而且还有一个大难题:要根据按钮的亮面和暗面相对于主色调亮色和暗色的程度来分别推导出其他颜色各自的亮色和暗色。

解题思路是:这个例子中,主色调只有一个,渐变只有明暗变化,所以只要把半透明的黑色或白色叠加在主色调上,即可产生主色调的亮色和暗色变体。学过PS的人都知道这种图层原理。

border: 1px solidrgba(0, 0, 0, .1);

background: #58a linear-gradient(hsla(0, 0%, 100%, .2),transparent);

box-shadow: 0 .05em .25emrgba(0, 0, 0, .5);

text-shadow: 0 -.05em .05emrgba(0, 0, 0, .5);

至此,样式就基本修改完成了。


最终代码

html代码:

<button>Rabbit</button>


CSS代码:

padding: .3em .8em;

border: 1px solid rgba(0, 0, 0, .1);

background: #58a linear-gradient(hsla(0, 0%, 100%, .2), transparent);

border-radius: .2em;

box-shadow: 0 .05em .25em rgba(0, 0, 0, .5);

color: white;

text-shadow: 0 -.05em .05em rgba(0, 0, 0, .5);

font-size: 125%;

line-height: 1.5;




如果我们要添加其他按钮,想使用同样的样式,只是颜色不同,可以直接在这个基础的button样式后面覆盖background-color属性即可。

html代码:

<button>Rabbit</button>

<button class="ok">OK</button>

<button class="cancel">Cancel</button>


CSS代码:

button {

padding: .3em .8em;

border: 1px solid rgba(0, 0, 0, .1);

background: #58a linear-gradient(hsla(0, 0%, 100%, .2), transparent);

border-radius: .2em;

box-shadow: 0 .05em .25em rgba(0, 0, 0, .5);

color: white;

text-shadow: 0 -.05em .05em rgba(0, 0, 0, .5);

font-size: 125%;

line-height: 1.5;

}

button.ok {

background-color: #6b0;

}

button.cancel {

background-color: #c00;

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 3,148评论 0 11
  • body{ background:#f5faff; } .demo_con{ width:960px; margi...
    小忆123阅读 1,081评论 0 0
  • 尽量减少代码重复 在软件开发中,保持代码的DRY 和可维护性是最大的挑战之一,而这句话对CSS 也是适用的。在实践...
    图灵教育阅读 1,193评论 0 14
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,303评论 0 11
  • 我从来没有想过,有一天也可以像现在一样,把内心的思绪变成墨黑的文字,不用过度修饰,也不用刻意模仿,只遵从内...
    某女人阅读 238评论 1 1