Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >按钮样式的正确方式

按钮样式的正确方式

作者头像
frontoldman
发布于 2019-09-02 08:16:59
发布于 2019-09-02 08:16:59
3.9K00
代码可运行
举报
文章被收录于专栏:樯橹代码樯橹代码
运行总次数:0
代码可运行

按钮样式的正确方式

如果你正在建立一个网站或一个web应用,你可能会用到按钮,也许看起来像按钮的链接。不管怎样,让这些正常展示是很重要的。

在本教程中,我们将为<a><button>元素以及一个自定义.btnCSS组件创建基本样式。 你会在这个过程的每一步中找到一个演示页面。

重置<button>样式

通常,网站或应用程序中可点击事件的99.9%的元素应该是<a><button>元素。 如果您不确定在给定情况下使用什么元素:

  1. 如果它转到其他网址或更改了网页的大部分内容,请使用链接(<a href="some_url"> ... </a>)。
  2. 否则,请使用通用按钮(<button type =“button”> ... </ button>)。

使用正确的元素有几个优点:它对搜索引擎友好(尤其是链接!),它适用于键盘导航,它提高了所有用户的可访问性。

尽管如此,开发人员很少使用<button>元素。 在整个Web上,我们可以看到很多触发JavaScript操作的按钮,仔细检查后发现它们是用<div><span><a>编码的。

为什么<button>元素如此不受待见?

  • 知识点:许多开发人员不知道它(学习100+HTML元素需要一点时间)。
  • 样式上:<button>附带复杂的默认样式,这可能很难实现自定义外观。

幸运的是,样式部分可以北修复!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Reset button styles.
 * It takes a bit of work to achieve a neutral look.
 */
button {
  padding: 0;
  border: none;
  font: inherit;
  color: inherit;
  background-color: transparent;
  /* show a hand cursor on hover; some argue that we
  should keep the default arrow cursor for buttons */
  cursor: pointer;
}

我们最终得到的按钮是类似普通文本的。

这种方法的缺点是,现在我们必须对所有按钮进行样式设置,否则用户将无法识别它们。 另一个选择是使用这种风格作为mixin(使用Sass或其他预处理器)并选择性地应用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@mixin button-reset {
  padding: 0;
  border: none;
  font: inherit;
  color: inherit;
  background-color: transparent;
  cursor: pointer;
}

.my-custom-button {
  @include button-reset;
  padding: 10px;
  background-color: skyblue;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button type="button">
  I use default browser styles
</button>

<button type="button" class="my-custom-button">
  And I’m using custom styles instead
</button>

编写一个“button”CSS组件

现在我们已经删除了默认样式,让我们定义我们自己的按钮样式。 这是我们想要做的事情:

  • 可应用于链接或按钮的“按钮”样式;
  • 我们希望有选择地应用它,因为我们的页面中会有其他链接和按钮样式。

这需要一个CSS组件。 CSS组件是一种风格或样式集合,我们可以使用类来应用,通常在几种不同类型的HTML元素之上。 您可能熟悉Bootstrap或Foundation等CSS框架中的这个概念。

我们将这个组件称为.btn(就像Bootstrap一样,但我们只设置颜色和大小,以保持简单)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.btn {
  /* default for <button>, but useful for <a> */
  display: inline-block;
  text-align: center;
  text-decoration: none;

  /* create a small space when buttons wrap on 2 lines */
  margin: 2px 0;

  /* invisible border (will be colored on hover/focus) */
  border: solid 1px transparent;
  border-radius: 4px;

  /* size comes from text & padding (no width/height) */
  padding: 0.5em 1em;

  /* make sure colors have enough contrast! */
  color: #ffffff;
  background-color: #9555af;
}

以下是我们的按钮组件的外观:

你可能想知道为什么差别这么明显。第二行按钮看起来就不错,谁不喜欢柔和的外观?

悬停(hover),焦点(focus)和活动(active)样式

很酷,你的按钮看起来不错,但是...用户将与它进行交互,并且当按钮的状态改变时,他们需要视觉反馈。

浏览器为“focus”和“active”(即按下)状态设置了默认样式,但通过重置按钮样式我们已经删除了其中的一些。 我们还希望为鼠标悬停设置样式,总体而言,我们希望可见的样式与我们的设计相匹配。

让我们从以下主题开始:活动状态,即按钮或者链接被点击:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* old-school "down" effect on clic + color tweak */
.btn:active {
  transform: translateY(1px);
  filter: saturate(150%);
}

我们可以更改按钮的颜色,但我想为我们的鼠标悬停式样保留这种效果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* inverse colors on mouse-over */
.btn:hover {
  color: #9555af;
  border-color: currentColor;
  background-color: white;
}

现在让我们添加一些焦点样式。 您的网站或网络应用程序的用户可以使用键盘或虚拟键盘(在iOSAndroid上)“”并激活表单域,按钮,链接和其他交互元素。

  • 对于一些用户来说,它可以加速缓慢的交互,比如填写表单。
  • 对于其他人来说,使用鼠标或触摸指针是不可能的或困难的。 他们依靠使用键盘或专用设备访问网站。

在我见过的大多数Web项目中,设计师都指定了预期的鼠标移过样式,但未指定焦点样式。 我们应该做什么? 一个简单的解决方案是重用:hover风格作为我们的focus风格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* inverse colors on mouse-over and focus */
.btn:hover,
.btn:focus {
  color: #9555af;
  border-color: currentColor;
  background-color: white;
}

一旦你有了这种可见的对焦风格(而不是之前!),你可能想要删除浏览器的按钮的默认样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.btn {
  /* ... */
  /* all browsers: remove the default outline since
      we are rolling our own focus styles */
  outline: none;
}

/* Firefox: removes the inner border shown on focus */
.btn::-moz-focus-inner {
  border: none;
}

在这里尝试一下; 如果您在桌面计算机上,请使用Tab和Shift + Tab键在按钮之间导航:

处理focus样式

还有一个棘手的问题。 在多个浏览器中,当您单击链接或按钮时,将应用两个伪类:

  • :active
  • :focus

一旦停止按下鼠标按钮或触控板,“active”伪类就会停止应用。 但在某些浏览器中,focus样式会一直保留,直到用户点击页面上的其他内容为止。

在我的测试中,受影响的浏览器包括Chrome(66),Edge(16)和Firefox(60,仅用于链接)。 Safari(11.1)似乎更聪明并避免了这个问题。

我们可以使用新的: :focus-visible伪类(草稿规范)来解决此问题。 这个功能还没有完全指定,但想法是浏览器只能在键盘或类似键盘的交互之后设置: :focus-visible,而不是点击。

由于它尚未被浏览器实现,我们将不得不使用JavaScript实现,比如有些polyfill。 它在整个页面上运行,并且仅在使用键盘时才将焦点可见的类设置为接收焦点的元素。

让我们改变我们的样式来解耦:hover和:focus样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* inverse colors on hover */
.btn:hover {
  color: #9050AA;
  border-color: currentColor;
  background-color: white;
}

/* make sure we have a visible focus ring */
.btn:focus {
  outline: none;
  box-shadow: 0 0 0 3px rgba(255, 105, 180, 0.5),
    0 0 0 1.5px rgba(255, 105, 180, 0.5);
}

现在,在我们的页面中包含focus-visible.js脚本后,它会为<body>元素添加一个js-focus-visible类。 我们可以使用它来从没有焦点可见类的焦点元素中移除焦点样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* hide focus style if not from keyboard navigation */
.js-focus-visible .btn:focus:not(.focus-visible) {
  box-shadow: none;
}

一个更简单的解决方案是只为focus-visible类声明焦点样式,但如果polyfill不是活动的(例如,如果我们的JS未能加载),则会中断焦点样式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
大胆尝试这些新的CSS属性,释放CSS的力量吧(一)
本文章系《Unleashing the Power of CSS》(释放CSS的力量,暂且这么翻译吧)一书的学习笔记,希望通本书的学习,系统的梳理下CSS相关的高级新特性。本篇文章是其第一部分,由于全书英文版,理解和阅读会有偏差,欢迎各位大佬们指正,我们一起共同提高。
前端达人
2023/09/11
3341
大胆尝试这些新的CSS属性,释放CSS的力量吧(一)
前端反卷计划-组件库-03-组件样式
因为我们使用的是create-react-app创建的项目,但是create-react-app不支持scss,需要安装node-sass解决
程序员库里
2023/11/16
2920
『真香警告』这33个超级好用的CSS选择器,你可能见都没见过。
CSS 选择器也是如此,然而如今也已经发布了第四版 —— CSS Selectors Level 4 ,这一版最早的草案发布于2011年09月29日,最后更新是2018年11月21日。
陈大鱼头
2020/07/16
4770
『真香警告』这33个超级好用的CSS选择器,你可能见都没见过。
你的网站可以一键变色吗?
得益于 Web 标准的发展和设计风格的变化,前端开发者从通过切图还原设计逐渐变为通过代码还原设计。CSS 预处理器也在一定程度上弥补了 CSS 本身表达能力的不足,许多 UI 框架(比如 Element)将基础的颜色值作为配置项供使用者定制,其余的颜色则在它们的基础上调整亮度/饱和度,或者与其他颜色混合而成。虽说做不到一键变色,但是通过重新构建来改变整个网站的配色是没有问题的。 除了可定制,这样做还可以让代码变得更容易维护。相比较充斥着各种颜色值的 CSS 代码,甚至可以表达出一些配色思路。 配色思路?
腾讯NEXT学位
2018/05/14
1.7K0
3w字长文带你【从0开发一个自己的前端组件库】 | 技术创作特训营第五期
因为我们的组件库要发布到npm上面,所以你的组件库名称不能和其他npm包的名称重复。
程序员库里
2024/01/22
1.2K8
3w字长文带你【从0开发一个自己的前端组件库】 | 技术创作特训营第五期
BUTTONS V. 2.0.0——CSS按钮库
参考资料 BUTTONSV. 2.0.0 Buttons 是一个高度可定制的、免费并且开源的按钮 CSS 样式库。
小蔚
2019/09/12
6990
【前端不得不会的各种特效】01.滑动显示效果的数字选择器代码实现
这部分是HTML代码,定义了一个包含滑动显示效果的数字组合。使用<section>元素标签包裹,表示这段内容是一个独立的节(section)。<p>标签用于显示文本 “滑动显示”。接下来是一个无序列表(<ul class="code">),用于容纳数字。每个数字都被包裹在一个列表项(<li tabindex="0" class="digit">)中,通过tabindex="0"属性使得这些列表项可以获得焦点。数字本身则被包裹在<span>标签中。
全栈若城
2024/02/29
7120
【前端不得不会的各种特效】01.滑动显示效果的数字选择器代码实现
正则表达式——表单验证
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>实验</title> <style type="text/css"> /*该元素获得焦点时,不出现虚线框(或高亮框)*/ *:focus{ outline:none; } form{ width: 750px; height: 500px; background-color: #FFC0CB; positi
王凡汎
2020/04/02
1.2K0
浅谈逻辑选择器 -- 父选择器它来了!
在 CSS 选择器家族中,新增这样一类比较新的选择器 -- 逻辑选择器,目前共有 4 名成员:
Sb_Coco
2022/05/18
1.6K0
浅谈逻辑选择器 -- 父选择器它来了!
分享100 个鲜为人知的 CSS 技巧
金三银四找工作的旺季来了,在过去的一段时间里,我花了很多时间将之前的一些基础知识做了整理,希望这些内容能够帮助你在面试的时候,稍微顺利一些。因此,我将整理好的这 100 个 CSS 知识技巧分享给你,希望你会觉得太对你有用。
前端达人
2024/03/11
4410
分享100 个鲜为人知的 CSS 技巧
全栈之前端 | 11.CSS3基础知识之列表链接学习
描述: 上一章节,一起学习了表单与表格的样式设计,此章节我们将继续学习列表与链接的常规CSS样式设计,让我们一起熟悉其HTML源码及其相关样式属性与最佳实践吧!
全栈工程师修炼指南
2024/01/15
2380
全栈之前端 | 11.CSS3基础知识之列表链接学习
如何不用一行 JS 代码做一个现代化可交互网站
之前做了一个纯 HTML+CSS 网站,完全没有 JS 代码,大家可以点击这个链接体验一下 https://woopen.github.io/ssp/ 。
羽月
2022/10/08
1.8K0
如何不用一行 JS 代码做一个现代化可交互网站
前端反卷计划-组件库-04-Button组件开发
比如上面代码中的@include button-size 函数,这个是scss的一个特性,可以从官网上看下介绍。
程序员库里
2023/11/27
3810
前端优秀实践不完全指南
一个 Web 页面,一个 APP,想让别人用的爽,也就是所谓的良好的用户体验,我觉得他可能包括但不限于:
Sb_Coco
2021/03/02
1K0
前端优秀实践不完全指南
哔哩哔哩注册--表单练习
哔哩哔哩注册–表单练习 HTML代码 可能代码有些不足或者用词不当等 希望大家能够见谅 这是一次bilibili的注册表单练习 里面都有详细注释 当然一个网页有许多种 这只是其中一种 是为了相互交流 希望大家喜欢 最后的效果是这样子的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-sca
宁在春
2022/10/31
4.2K0
哔哩哔哩注册--表单练习
vue2基础组件通信案例练习:把案例Todo-list新增编辑按钮
<font color='red'>注意点1:</font>改动App和MyItem页面
刘大猫
2024/10/24
810
Web 用户体验设计提升实践
一个 Web 页面或是一个 App,想让别人用得爽,获得良好的用户体验,可能需要包括但不限于:
Shopee技术团队
2021/11/16
1.4K0
Web 用户体验设计提升实践
阅读Skeleton.css源码,改善睡眠质量(尽管它只有419行代码)
虽然现在大部分业务都不需要重复造轮子了,但对于小白来说,学习完 Skeleton 源码 是能走出新手村的。
德育处主任
2022/04/17
7630
阅读Skeleton.css源码,改善睡眠质量(尽管它只有419行代码)
前端优秀实践不完全指南
一个 Web 页面,一个 APP,想让别人用的爽,也就是所谓的良好的用户体验,我觉得他可能包括但不限于:
桃翁
2021/03/18
9120
美化你的RSS订阅地址
最近一直被毕业设计缠着,连站点的文章都有点久没更新了,实在是忙得飞起。不过好在眼看着总算快收尾了,心里也轻松不少,就开始手痒想折腾点新东西。
柳神
2025/04/19
670
美化你的RSS订阅地址
推荐阅读
相关推荐
大胆尝试这些新的CSS属性,释放CSS的力量吧(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验