一定能用到的简单但实用的五种按钮样式(HTML+CSS步骤详解,含详细注释)

article/2025/11/8 23:57:07

前言一

按钮在前端开发中往往是一个必不可少的元素,也有许多精美好看的样式资源供开发者直接使用。但博主认为,对于初学者而言,总是去cv别人做好的,而不理解其中的原理,是很不好的。
本人作为一名计科的学生,在大二也选修了校内的前端基础教程的课,但由于课时较短,老师往往不会深入讲解,许多问题无法深究。
本篇文章将会详细讲解xia五种简单的按钮样式,虽然简单,但作为基础,也很实用,且有着大学问。

请添加图片描述

文章目录

  • 前言一
  • 开始之前
  • 一、鼠标悬浮,按钮背景滑动(1)
    • 1.最终效果
    • 2.创建元素
    • 3. 重置浏览器样式,并使元素居中
    • 4.设置统一的样式
      • 4.1 设置按钮的大小
      • 4.2 设置文字样式及鼠标hover后文字的变化
      • 4.3 在button元素前添加背景
    • 5.设置不同的hover效果
      • 5.1 自上向下滑动
      • 5.2 自下向上滑动
      • 5.3 自右向左滑动
      • 5.4 自左向右滑动
      • 5.5 直接变换
    • 6.全部代码
  • 二、鼠标悬浮,按钮背景滑动(2)
    • 1.最终效果
    • 2.全部代码
  • 三、鼠标悬浮,边框扩展
    • 1.最终效果
    • 2.创建元素
    • 3. 重置浏览器样式,使元素居中,并设置统一的样式
    • 4.设置hover前的统一样式
    • 5.设置不同的hover样式
      • 5.1 左上及右下延伸出边框
        • 5.1.1 在左上角及右上角设置两个子盒子
        • 5.1.2 实现边框的延伸
      • 5.2 左下及右上延伸出边框
      • 5.3&5.4 两角出现边框并延伸
      • 5.5 从一角延伸
    • 6. 全部代码
  • 四、更多样的设计方式
    • 1.最终效果![请添加图片描述](https://img-blog.csdnimg.cn/8d67295865fd4c8997bcb623709af5be.gif)
    • 2.与之前的相同之处
    • 3.不同之处
    • 4.设置hover样式
    • 5.全部代码
  • 五、综合
  • 六、::before选择器和::after选择器
    • 1.伪元素概念
    • 2.我们为什么要使用伪元素?
    • 3.::before 和 ::after
      • 3.1 ::before
      • 3.2 ::after
      • 3.3 简单实例
      • 注意点
  • 七、Absolute(绝对定位)与relative(相对定位)
    • 1.要点
    • 2.position的属性值及区别
    • 3.实例及图解
    • 4.总结
  • 八、总结

开始之前

在开始之前,我们应当先了解一下::before选择器,::after选择器,以及弄懂position属性中的绝对定位(absolute)和相对定位(relative)。
没有了解过的看官,可以点击文章目录的后两节,先进行简单的了解。


一、鼠标悬浮,按钮背景滑动(1)

1.最终效果

将绿色改为透明(transparent)后。
运行效果:
请添加图片描述

2.创建元素

创建btn01.html文件,该种按钮有五种类型,如上图所示。
html文件较为简单,主要为创建五个按钮,并放在一个div中。
btn01.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>button01</title><link rel="stylesheet" href="btn01.css">
</head>
<body>
<div class="btn-holder"><button class="btn btn-1 hover-filled-slide-down"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-up"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-left"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-right"><span>hover me</span></button><button class="btn btn-1 hover-filled-opacity"><span>hover me</span></button>
</div>
</body>
</html>

运行效果如下:
请添加图片描述

3. 重置浏览器样式,并使元素居中

创建btn01.css,重置浏览器样式,并使元素居中,方便我们观察,也可以跳过此步骤。
btn01.css:

* {box-sizing: border-box;margin: 0; padding: 0;
}
/*为方便观察,将按钮元素放于屏幕中间
1.top: 50%;left: 50%;代表可以让div块的左上顶点位于页面正中间
2.transform: translate(-50%, -50%);代表让div块向上向左分别偏移50%,这样刚好使得div块位于正中央。
*/
.btn-holder{position: absolute ;top: 50%;left: 50%;transform: translate(-50%, -50%);
}

运行效果:
请添加图片描述

4.设置统一的样式

4.1 设置按钮的大小

五个按钮除hover时效果不同,因此,五个按钮设置了相同的类名(btn及btn-1),方便我们设置他们的统一样式。
btn01.css:

.btn {/*每个按钮应在页面中占有自己的位置,因此选择相对定位*/position: relative;/*使元素填满父级元素*/display: inline-block;/*div的width/height设置为auto,那么表示的这个div的所有部分(内容、边框、内边距等的距离加起来)为父元素宽度*/width: auto; height: auto;/*方便观察设置背景色为绿色,演示效果中设置为透明transparent*/background-color: green;border: none;/*鼠标悬浮于其上时显示为手型光标*/cursor: pointer;
}
.btn span {/*同样文字也应每个按钮中占有固定的位置,选择相对定位*/position: relative;/*使元素填满父级元素*/display: inline-block;/*设置字体大小*/font-size: 14px;/*设置文字为粗体*/font-weight: bold;/*设置文字间的间距*/letter-spacing: 2px;/*定义为大写字母*/text-transform: uppercase;/*调整子元素在父元素中的位置*/padding: 15px 20px;/*设置从一个属性过渡到另一个属性的时间*/transition: 0.3s;
}

运行效果:
请添加图片描述

4.2 设置文字样式及鼠标hover后文字的变化

btn01.css:

/*,设置按钮的边框为黑色
按钮内部及span中文本鼠标hover前字的颜色为白色*/
.btn-1 span {color: rgb(255,255,255);border: 1px solid rgb(28, 31, 30);transition: 0.2s 0.1s;
}/*鼠标hover后,字体变色*/
.btn-1 span:hover {color: rgb(28, 31, 30);transition: 0.2s 0.1s;
}

运行效果:
请添加图片描述

4.3 在button元素前添加背景

使用::before选择器,在button元素之前插入内容背景设置为黑色
btn01.css:

/*position: absolute;绝对定位,相对最近的父元素(btn-holder)来定位,不保留原有空间,并且不会影响其他元素位置
ease-out : 运动形式为减速*/
.btn-1::before {position: absolute;content: "";background-color: rgb(28, 31, 30);transition: 0.3s ease-out;
}

由于此时未设置高度及宽度,暂看不出具体的效果。可以看到添加的内容,位于.btn-1之前。
运行效果:
请添加图片描述

5.设置不同的hover效果

这里具体讲解,其中一种。其他基本同理。

5.1 自上向下滑动

修改button元素内容前的内容,也就是::before选择器插入的黑色背景,设置其宽高均为100%,在鼠标hover前,该元素距离底部边缘0px,鼠标hover后,黑色背景的高度变为0,由于该元素距离底部边缘为0px,所以自上而下活动。
btn01.css:

/*1.hover-filled-slide-down */
/*修改button元素内容前的内容,也就是::before选择器插入的黑色背景在鼠标hover前,距离底部边缘0px,高度为100%
*/
.hover-filled-slide-down::before {bottom: 0;height: 100%; width: 100%;}
/*鼠标hover后,黑色背景的高度变为0%,由于该元素距离底部边缘为0px,所以自上而下活动*/
.btn.hover-filled-slide-down:hover::before {height: 0%;
}

::before选择器插入的内容设置宽高后的样子。
请添加图片描述
运行效果:
请添加图片描述

5.2 自下向上滑动

同理,自下而上滑动只需将选择器中的元素,设置为距离顶部边缘为0px,那么效果就变为自下而上滑动
btn01.css:

/* 2.hover-filled-slide-up */
.btn.hover-filled-slide-up::before {top: 0; height: 100%; width: 100%;
}
.btn.hover-filled-slide-up:hover::before {height: 0%;
}

5.3 自右向左滑动

相信大家应该理解了该怎么做了。自右向左滑动,改变元素的宽度即可,同时使盒子距离左侧边缘为0px。
btn01.css:

/* 3.hover-filled-slide-left */
.btn.hover-filled-slide-left::before {top: 0; bottom: 0; left: 0;height: 100%; width: 100%;
}
.btn.hover-filled-slide-left:hover::before {width: 0%;
}

5.4 自左向右滑动

使盒子距离右侧边缘为0px即可。
btn01.css:

/* 4. hover-filled-slide-right */
.btn.hover-filled-slide-right::before {top:0; bottom: 0; right: 0;height: 100%; width: 100%;
}
.btn.hover-filled-slide-right:hover::before {width: 0%;
}

运行效果:
请添加图片描述

5.5 直接变换

opacity属性设置一个元素了透明度级别。从0.0(完全透明)到1.0(完全不透明)。
只需设置hover前不透明,hover后透明即可。
btn01.css:

/* 5. hover-filled-opacity */
.btn.hover-filled-opacity::before {height: 100%; width: 100%;opacity: 1;
}
.btn.hover-filled-opacity:hover::before {opacity: 0;
}

运行效果:
请添加图片描述

6.全部代码

btn01.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>button01</title><link rel="stylesheet" href="btn01.css">
</head>
<body>
<div class="btn-holder"><button class="btn btn-1 hover-filled-slide-down"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-up"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-left"><span>hover me</span></button><button class="btn btn-1 hover-filled-slide-right"><span>hover me</span></button><button class="btn btn-1 hover-filled-opacity"><span>hover me</span></button>
</div>
</body>
</html>

btn01.css


http://chatgpt.dhexx.cn/article/9rrkRoco.shtml

相关文章

几个实用又好看的纯css 按钮样式

分享几个实用又好看的纯css 按钮样式 1.带波纹效果的按钮 html部分: <button class"niceButton2">click</button>css部分&#xff1a; .niceButton2{position: relative;background-color: rgb(32, 93, 224);border: none;font-size: 28px;color: #f…

.apk文件的MIME类型

.apk文件的MIME类型 IIS7中下载apk文件会报404错误。 找到&#xff1a;IIS目录&#xff0c;MIME类型 添加.apk文件的MIME类型。 文件扩展名&#xff1a;.apk MIME类型&#xff1a;application/vnd.android.package-archive

android apk编译打包过程

Android安装包的后缀都是.apk&#xff0c; apk是Android Package的缩写。 解压apk文件后包含AndroidManifest.xml、assets目录、classes.dex(还可能有 classes2.dex,classes3.dex...classesN.dex)、lib目录、META-INF目录、res目录和resources.arsc。 AndroidManifest.xml对应源…

Android APK打包流程

目录 一、概述二、打包流程1、打包资源文件&#xff0c;生成R.java文件2、处理aidl文件&#xff0c;生成相应的Java文件3、编译项目源代码&#xff0c;生成class文件4、转换所有的class文件&#xff0c;生成classes.dex文件5、打包生成APK文件6、对APK文件进行签名7、对签名后的…

第四章 常见 Android 文件格式(一)(库文件、APK)

文章目录 库文件jar 包aar 包手动编写一个 aar 库APKAPK 文件结构APK 文件的生成流程APK 的安装流程通过系统程序安装(开机时安装)通过 Android 市场安装通过 adb 命令安装手机自带安装(通过 SD 卡里的 APK 文件安装)通过分析 packageinstaller.apk 的实现步骤了解 APK 的安…

android apk包解压缩,Android 解压APK文件

最近一个项目里需要得到Android已安装程序的签名文件(CERT.RSA)的SHA1值&#xff0c;所以就调研解压APK文件。 通过包名来得到已安装程序在系统的安装包路径。 private static String getApkPath(String pkgName) { PackageManager pm mContext.getPackageManager(); Applicat…

Android中APK打包流程

aapt: android application package tool,SDK (Android打包流程图) #Android打包流程 1.通过aapt工具将 资源文件(res)、清单文件(AndroidManifest.xml)生成对应的R.java文件 * 在项目的根目录下新建 gen目录&#xff0c;并且依次在gen目录下新建清单文件总包名对应的文件目录 …

android打包文件

直接把debug版本安装到真机会出现问题&#xff0c;和模拟器显示上的有点不一致。。亲身试验 接下来综合总结一下我看到其他博主们的经验 为什么要打包&#xff1a; apk文件就是一个包&#xff0c;打包就是要生成apk文件&#xff0c;有了apk别人才能安装使用。打包分debug版和re…

如何打开Android 打包文件 .apk 文件

在学习Android开发的过程中&#xff0c;常常想知道一些界面设计优良的应用是如何设计的。Android应用最后发布是以 .apk 文件提供的。那么如何在PC上打开这个 .apk文件呢&#xff1f; .apk 文件实际就是.zip 文件&#xff0c;可以使用WinZip ,WinRar 等来解压&#xff0c;一个简…

APK文件详解 + 打包流程

记录个人学习历程&#xff0c;毫无技术可言 前言 要学习Android必然需要了解apk的目录结构以及打包流程&#xff0c;还有各种文件详解 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、APK文件详解 本质就是一个压缩包&#xff0c;可以直接进行解压…

Android 打包流程之aapt打包资源文件

上一篇&#xff1a;Android打包流程之资源管理 Android应用最终是以apk的形式放在手机上安装并运行的&#xff0c;而负责将资源文件和代码进行打包的工具就叫appt&#xff0c;全称Android Asset Packaging Tool&#xff0c;翻译过来就是Android资源打包工具&#xff0c;是Andro…

Android文件格式

在Android的priv-app目录下发现有oat类型的文件夹 什么是oat&#xff1f; It’s Of Ahead Time, a silly reordering of Ahead Of Time. We went with that because then we say that process of converting .dex files to .oat files would be called quakerizing and that wo…

Android项目打包生成apk文件

Android开发打包生成APK文件 打包apk文件分为两种 无需密钥的apk有密钥的apk(常规) 他们的区别只是就是安全问题。 1.没有密钥的apk 点击之后会自动生成没有密钥的APK。 在编辑器的右下角会出现该弹窗&#xff0c;点击location会帮你找到该文件 2.有密钥的APK 1.找到bui…

Java利用mpxj解析mpp格式文件

转载请注明来源&#xff1a;http://blog.csdn.net/loongshawn/article/details/51038051 《Java利用mpxj解析mpp格式文件》《SpringBoot添加Email发送功能》《SpringBoot配置log4j输出日志》《SpringBoot定时任务说明》《SpringBoot接口服务处理Whitelabel Error Page》《构建…

java解析mpp文件(包含层级关系)

我用的是递归循环的&#xff0c;不限制有多少子级关系都可以拿到 首先引入解析mpp所需依赖 <dependency><groupId>net.sf.mpxj</groupId><artifactId>mpxj</artifactId><version>7.1.0</version></dependency>解析所用实体类…

Date转换年月日

timebasic.js //时间戳转年月日 export function format(shijianchuo) {//shijianchuo是整数&#xff0c;否则要parseInt转换var time new Date(shijianchuo);var y time.getFullYear();var m time.getMonth() 1;m m < 10 ? "0" m : m;var d time.getDate…

C# 接口中DateTime类型字段返回年月日格式,去掉时分秒的数据

背景 在我们平时写接口的时候&#xff0c;避免不了这样一个问题&#xff0c;数据库中存的字段类型为datetime,代码中对应的实体类也是DateTime类型的字段&#xff0c;于是在读取数据库内容之后返回的数据也是DateTime类型的值&#xff0c;比如2022-10-24 18:34:56.110&#xf…

vue3-用dayjs将时间戳转为年月日格式

已知&#xff0c;格式化时间&#xff1a;dayjs(cellValue).format(YYYY-MM-DD) 用法&#xff1a; import dayjs from dayjs;dayjs(时间戳).format(YYYY-MM-DD HH:mm:ss); 如&#xff0c;在get请求中使用&#xff1a; service.get(/trace/sourceSearchInput.value).then(res …

Java但中获取时间将时间转换成字符串格式(年月日格式)

一:直接上马拿走&#xff1a; package cn.wyj.one;import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date;/*** 测试时间对象和字符串之间的相互转化* DateFormat抽象类和SimpleDateFormat实现类的使用* author 86155**/public class Demo2…

Excel修改日期格式:日月年-年月日

最近处理数据&#xff0c;遇到需要处理一下日期格式&#xff0c;记一下。。。 1、原格式 2、新建Excel表&#xff0c;复制到表中&#xff0c;选择列&#xff0c;数据-分列&#xff0c;下一步…,选择列格式为“DMY”,点击完成 3、效果(若不成功&#xff0c;可以试一试其他的)