你还在用a标签吗?——用button替代a
前言:a标签,不止你在用,我也在用。但某些时候我们可以考虑用button替代a。
在多页应用中,a标签很常见,我们常用来作为一个普通超链接,进行页面跳转。
而在单页应用中,我们使用路由进行页面切换,a标签的使用就少了。
不过当我们不需要跳转,只需要点击某个元素来达到一些效果的需求时,常常使用a标签。
如图,智联招聘上的这些选项,就是a标签,没有使用a标签进行页面的跳转,而是监听点击事件然后进行一些操作,这其实也是我们比较普遍的a标签用法。

这是一个修改了样式的a标签——
a{
text-decoration: none;
color: #666666;
font-size: 20px;
}
a:hover{
color: #3EA4DA;
}
看似很好,但隐藏着一些我们不想要的效果——
1.能拖拽 
2.会跳转,即使不写href地址,也会刷新页面
当然,我们可以通过js解决以上两个问题:
href值为javascript:; 点击后执行一条空代码不跳转页面
ondragstart='return false' 阻止拖动事件的默认行为
<a href="javasricpt:;" ondragstart='return false' >我是一个a标签</a>
不过我想提出另一个思路:用button替代a
这是同样进行了样式修改的button标签 
和a标签对比,差别不大,只需修改样式,无需写js代码。
且样式修改也很简单,三个关键——border、background、outline设为none即可
button{
border: none;
background: none;
outline: none;
font-size: 20px;
color: #666666;
}
button:hover{
color: #3EA4DA;
}
最后,并不是要求大家都要使用button,而舍去a,而且我个人有时也会习惯用a,只是提供一个思路:可用button替代a
补充:
Q:反正都是要去除默认样式的,为什么不直接用一个span标签?
A:
1.鼠标样式:当鼠标移入span时,显示的样式为
,不像button和a标签是我们比较喜欢的效果:
、
。
当然,这个可以通过样式cursor:default;修改。default是默认样式,箭头,同button;pointer是手指,同a。
2.双击选中文本:双击span就会选中文本,如图
。用户点击某一元素时,有时会多次点击,点击时间间隔短,便会产生双击效果,就会选中文字如图,这个效果就不是很好了。
3.HTML语义化:HTML100多个标签的存在,就是为了HTML语义化,而不是让我们所有元素都是div或span。
HTML丰富的标签,目的在于通过标签名传达标签内容类型的一些信息,就像h1标签传达了标题,header标签传达了头部...
在这里a标签和button标签,则传达了是链接、按钮,都是用于点击的元素
Q:为什么要语义化?(转载自:https://blog.csdn.net/qq_38128179/article/details/80811339)
A:
- 代码结构: 使页面没有css的情况下,也能够呈现出很好的内容结构
- 有利于SEO: 爬虫依赖标签来确定关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息
- 提升用户体验: 例如title、alt可以用于解释名称或者解释图片信息,以及label标签的灵活运用。
- 便于团队开发和维护: 语义化使得代码更具有可读性,让其他开发人员更加理解你的html结构,减少差异化。
- 方便其他设备解析: 如屏幕阅读器、盲人阅读器、移动设备等,以有意义的方式来渲染网页。
你还在用a标签吗?——用button替代a的更多相关文章
- odoo开发笔记 -- div标签代替odoo button写法
odoo开发笔记 -- div标签代替odoo button写法 并调用自定义js <footer> <div id="confirm_request_cloud_repo ...
- button标签和input button
一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...
- jq动态增加的button标签click回调失效的问题,即动态增加的button标签绑定事件$("button.class").click(function)无效
对于新增加的页面元素,改变了页面结构,如果是使用老办法$("button.class").click(function)去监听新的button标签事件,会失效. 笔者的应用是文字的 ...
- 来吧,HTML5之基础标签(下)
<dialog> 标签 定义对话框或窗口. <dialog> 标签是 HTML 5 的新标签.目前只有 Chrome 和 Safari 6 支持 <dialog> ...
- 记一次与a标签相遇的小事
最近做的一个项目,按钮使用的是a标签做的,样子还不错.不过正是这个a标签把我坑死了,有一个场景是点击a标签去调后台服务,为了防止用户频繁点击按钮提交,在去请求后台服务的时候肯定要先把按钮的事件给禁止掉 ...
- thinkphp自定义标签库
thinkphp ~ php中 的类, 的成员变量, 本身是没有类型说明的, 那么我怎么知道它的类型呢? 或初始值呢? 通常在类定义中, 如果能给一个初始值的(对于已知简单类型的),最好给一个初始值, ...
- HTML5新增标签
section标签 <section>标签,定义文档中的节.比如章节.页眉.页脚或文档中的其它部分.一般用于成节的内容,会在文档流中开始一个新的节.它用来表现普通的文档内容或应用区块,通 ...
- jquery.tagthis和jquery.autocomplete一起实现标签
目的 jquery.tagthis:http://www.dangribbin.co/jquery-tag-this/demo/ 使用tagthis控件实现标签的输入提醒功能,每个标签具有id和tex ...
- 【初探HTML本相】道之真谛不过自然,html标签脱俗还真
前言 须弥般若有无空,阴阳道化真虚同:洗尽前恩本非相,还吾面目下九重. 咳咳,其实老夫对佛教文化有点点研究啦,说以我们这里来了一点很有哲理的东西,因为我这里准备干一件很戳的事情,我准备来看看我们的ht ...
随机推荐
- Python随机数函数
Python随机数函数: ''' choice(seq) 从序列的元素中随机选出一个元素 randrange ([start,] stop [,step]) 从指定范围内,在指定步长递增的集合中 获取 ...
- nginx静态资源防盗链
含义: 用于阻止 Referer 头字段为无效值的请求访问站点.需记住的是,使用适当的 Referer 字段值来伪造请求非常容易,因此本模块的预期目的不是要彻底阻止此类请求,而是阻止常规浏览器发送的大 ...
- 求100以内所有奇数的和,存于字变量X中。
问题 求100以内所有奇数的和,存于字变量X中. 代码 data segment x dw ? data ends stack segment stack db 100 dup(?) stack en ...
- PHP is_iterable() 函数
is_iterable() 函数用于检测变量的是否是一个可迭代的值. PHP 版本要求: PHP 7 >= 7.1.0高佣联盟 www.cgewang.com 语法 bool is_iterab ...
- PV与UV你的网站也可以
个人博客网站分析 阅读前面的文章,有助于理解本文. 1.是时候来一个个人博客网站了 2.什么?你还没有自己的域名? 3.你的个人博客网站该上线了! 为什么需要流量分析? 各位小伙伴,请看下图,你们发现 ...
- 测试驱动开发学习笔记(UTDD)
title: 测试驱动开发学习笔记(UTDD) date: 2020-08-01 23:59:17 tags: [2020, 学习一门技能, TDD, DevOps] What TDD(Test-Dr ...
- ios wkwebview didReceiveAuthenticationChallenge crash解决
//需要响应身份验证时调用 同样在block中需要传入用户身份凭证 //现在就是不进行https验证了 然后就闪退不了了 - (void)webView:(WKWebView *)webView di ...
- SpringCloud微服务:基于Nacos组件,整合Dubbo框架
源码地址:GitHub·点这里 || GitEE·点这里 一.基础组件简介 1.Dubbo框架 Dubbo服务化治理的核心框架,之前几年在国内被广泛使用,后续由于微服务的架构的崛起,更多的公司转向微服 ...
- Java高级篇 JVM
JVM是什么? JVM起了什么作用? JVM包含了什么? JVM中, 一个类 程序是怎么加载的? JVM中垃圾回收机制?
- Java基础高级篇 NIO
nio模型与io模型的对比 netty 是什么 怎么使用