一个按钮样式测试出你的 css功力

简单点,bb的方式简单点。好的,大哥。

对于前端开发来说,css是必备的基本功。你可能会说css嘛,就那样,用的时候先这样,在这样。对我完全知道你在说什么,所以你可以认为css是很简单,因为我们涉及的都不深。

我们来看一段非常简单的代码(真的是非常的简单):

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        body,
        html {
            height: 100%;
            width: 100%;
        }

        .btn {
            display: inline-block;
            margin: 100px;
            padding: 6px 16px;
            border: 1px solid #446d88;
            background: #58a linear-gradient(#77a0bb, #58a);
            border-radius: 4px;
            box-shadow: 0 1px 5px gray;
            color: white;
            text-shadow: 0 -1px 1px #335166;
            font-size: 20px;
            line-height: 30px;
        }
    </style>
</head>

<body>
    <div class="btn">
        ydb!
    </div>
</body>

</html>

在这里我们只是简单的写了一个简单的按钮样式,在浏览器里面运行还挺好看的。

但是,但是请问一下你感觉有什么问题没有(不要跟我扯布局的问题)。

没错是存在问题的,并不是我们写错了,而是存在维护性的问题。

1.我们使用了太多的绝对值(你可以很轻松的掌控绝对值,但是它也可以很轻松的让你修改大量代码达到一个新的样式)

2.某些值相互依赖的时候,我们应该把它们的相互关系用代码表达出来(减少以后维护代码的量,比如这里的line-height)

我们先来看看第二个问题,我们举例中,行高和字体大小是有一定比例的,行高是字体大小的1.5倍,不信你自己去算。所以我们现在来修改一下:

font-size: 20px;

line-height: 1.5;

这样子修改以后,只要改变字体大小,那么行高是会保持他们之间这种关系的。

我们在来看第一个问题,我们使用了太多的绝对值,这个问题的出现的前提是我们假设我们后面会修改这个按钮的样式的。

使用太多的绝对值的时候,我们一旦修改按钮样式,就会修改很多代码,有没有什么办法让我们只要修改极少的代码就能够让按钮的样式得到统一风格的改变。

说到这里,我们在做移动端的时候,有没有用过这么一个东西,来做适配的。它就是rem,至于rem是什么,我想这个不用解释吧。是的,你没有猜错,我们下面的主角就是em(其实rem也可以,看自己)。em是什么我也不用多说了吧。想一下我们把之前按钮样式当中绝对值使用的地方,使用em来代替(当然,可能并不是完全替换,看实际情况),那我们只要修改父元素的字体大小,不就能达到统一风格样式的变化了嘛。很好,我们修改代码如下:

 html {
            height: 100%;
            width: 100%;
            font-size: 18px;
        }

        .btn {
            display: inline-block;
            margin: 100px;

            padding: 0.3em 0.89em;
            border: 1px solid #446d88;
            background: #58a linear-gradient(#77a0bb, #58a);
            border-radius: 0.22em;
            box-shadow: 0 1px 5px gray;
            color: white;
            text-shadow: 0 -1px 1px #335166;
            font-size: 1.11em;
            line-height: 1.5;
        }

现在我们修改完毕,当然你会发现跟我们最初定义的样式所呈现的效果,有点不同。是的,这一点我要承认,是我见色起意,没有考虑到换算时候取值的方便,导致有些是无限循环小数,但是问题都不大,主要是为了看em的使用,如果你愿意的话,完全可以把现在的样式当作最开始的标准。

现在我们来看看效果:

很好,现在我们修改父元素的字体大小为40px,再看看效果:

咋样,是不是整体风格的变化,而且我们用了最少的代码量,就实现了变化。

当然,到这里就会有人冷笑一下,你这个需求很奇特的啊。是很奇怪,但是我不是为了吐槽这种需求,而是为了说明一点,css也是有大学问的,尽可能做到DRY,这样对你以后的维护是很有好处的。当你写完css的时候,可以看看是不是好维护?彼此之间的关系又是怎么样子的?

来,趁热打铁,我们再来扩展一下。我们以此样式为基础,分别在写一个红色的按钮和一个绿色的按钮,我们都知道这样子写是最简单的:

但是结果了?

我们知道是红色部分的问题。css背景的设置,背景图片永远是在背景色上面的,所以你看到的永远是线性渐变产生的背景图片,所以我们需要修改。

修改如下:

看看效果:

其他都没有问题是吧,但是我们的第一个按钮怎么变成这个样子了(不做解释,自行解决哈哈哈)。

其实,你会发现我们在最初定义按钮的样式的时候,主色调是#58a,按钮的亮面和暗面(也就是阴影部分的设置),是写好了的,所以说后面扩展其他按钮就只需要上面的修改就行,来推出其他主色调对应的亮色和暗色版本。

现在我们在做一个变化,我们修改body元素的背景为黑色,看看有什么效果:

有没有发现阴影部分很奇怪?是的连字体阴影都很奇怪。请仔细对比一下白色背景下的样式显示。这样子不行,我们制作的UI应该是任何情况下都有整体的表现的。其实我知道你没有发现,导致这个原因的是因为我们对边框颜色,盒子阴影颜色,文字阴影颜色才用的都是固定值,这个可不行。我们发现他们三个都变暗,所以可以考虑用黑色来代替。还有我们要在不同的背景下达到统一显示(也就是迎合环境颜色),应该使用透明度的。

修改如下:

看看结果

有一点,我要说明一下,我是图方便,采用了黑色背景,导致第一张图效果不明显(其实黑色作为背景的情况很少,基本没有),其实换成其他背景颜色更好。

来,我们在多了解一点:

仔细看一下这两个按钮的边框,是不是跟主色调有关系,好像就是主色调是什么颜色,边框颜色就是什么颜色(只能说接近,对吧),是因为我们给边框设置了透明度的。

但是透明度也是给边框设置的啊,这里的感觉为什么像是背景跑到边框下面去了,然后边框的透明显示综合出来的颜色?恭喜你原因就是你说的好像。

我们现在来夸张一点:

看到没有跟我们想的是一样就是背景入侵(背景入侵,可以是背景颜色,也可以是背景图片,这里是背景图标,别忘了渐变是背景图片方式展示的)。

所以我们才能达到主色调变化,边框跟着变化。

这很好,我们需要这样子,至少在这里是这样子。但是有时候我们不希望这样子,我边框不能被入侵,就要原滋原味的。

当然是可以解决的,我们可以通过background-clip属性来调整上述的默认行为,这个属性是border-box(就是会入侵),我们只要设置成padding-box,这样子浏览器会用内边距的外沿来把背景裁切掉(也就是不会入侵)。

看看代码:

看看效果:

这下才是原滋原味的边框。很漂亮。

原文地址:https://www.cnblogs.com/jsydb/p/12589968.html

时间: 2024-10-12 10:43:13

一个按钮样式测试出你的 css功力的相关文章

Android 点击一个按钮,弹出一个对话框

界面非常的简单,就是一个Button,点击这个Button呢,会弹出一个对话框 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout

当一个按钮点击不了时,鼠标可以自定义的样式

现在很多网站流行做法,当一个按钮点击不了的时候,会给用户一个略显优雅的提示,即鼠标手势的样式发生变化.简单的样式变化. 图方便就利用下jquery...主要就是注意下,cursor值的用法 $('#www').mouseout(function(){ $('body').css('cursor', 'default'); }); $('#www').mouseover(function(){ $('body').css({'cursor':'url("cursor.png"),defa

第一个微信小程序(实现点击一个按钮弹出toast)

今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss中的样式为全局样式,作用于每一个页面.在page的wxss文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖app.wxss中相同的选择器. app.js文件代码: App({ onLaunch: function () { console.log('小程序已启动') }, onShow: f

Python3 Tkinter基础 Menubutton 设置一个按钮 点击按钮出现下拉菜单

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() #配置一个按钮并放置 menubutton=Menubutton(root, text='单击出现下拉菜单', relief=RAISED) menubutton.pack() userChoice

页面table的每行都有一个&lt;input type=&#39;button&#39; /&gt;,如何实现点击按钮在按钮下方弹出一个div,点击空白消失

\ <input id="test" type="button" />/*按钮*/ <div id="tanchu"></div> <script language="javascript"> $(document).ready(function(e) { $("#test").click(function(e) { $("#tanchu"

[HTML/CSS]uploadify自定义按钮样式

概述 在项目中经常用到uploadify上传插件,但是FLASH按钮的外观往往跟我们网页的设计的主题色不太搭配.这时就需要对其样式进行修改. 样式文件是uploadify.css. 打开这个文件后,你会看见CSS设置的按钮样式. 1 .uploadify-button { 2 background-color: #505050; 3 background-image: linear-gradient(bottom, #505050 0%, #707070 100%); 4 background-

每天一个JavaScript实例-展示设置和获取CSS样式设置

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-展示设置和获取CSS样式设置</title> <style> #date{ width:200px; background-color:l

推荐:想了解一个项目完整测试流程,看这篇文章就OK了

推荐:想了解一个项目完整测试流程,看这篇文章就OK了 写在前面:本文来自真实企业测试人员的工作总结,用一个项目的进行流程为线索,记录每个阶段测试包含的内容及关注点. <ignore_js_op> 项目的测试流程大只包含的几个阶段:立项.需求评审.用例评审.测试执行.测试报告文档 一.立项后测试需要拿到的文档 1.需求说明书 2.原型图(及UI图) 3.接口文档 4.数据库字典(表的数量.缓存机制) 二.需求评审 参加人员:开发.测试及需求人员,由需求人员主持讲解. 为了会议的有效举行,测试及开

如何写出优雅的CSS代码 ?(转)

对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混乱,虽然表达出了最终的效果,然而却晦涩难懂,显然团队成员在读这样的代码时就显得无从下手,更不利于后期的维护了.那么如何写出优雅的代码呢?下面我将以一个很小的项目就以下几个方面简单的表达一下自己的看法,如有不妥,望批评指正. 如何整理一个项目. 如何写出清晰易懂的HTML代码. 如何写出优雅的css代