`
dunhuangmi
  • 浏览: 27008 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

解决浏览器兼容问题,呈现一致按钮(input和a元素)

    博客分类:
  • css
阅读更多

【dunhuangmi原创,转载注明

一、如何让a和input写的button看起来一致


网页上的按钮通常是用a或input两种方式来展现的。
a标签的写法很简单,定义display:block或inline-block之后,可以给按钮长宽,字体高度,使之居中
同上可以定义input[type="button"]的样式,ie6+和其他主流浏览器都支持改变input的背景字体颜色。
那么我们假如把css写成这样:

.abtn{float:left;display:inline-block; margin:0;padding:0;color:#FFF; text-decoration:none;text-align:center;width:48px; height:24px; line-height:24px;font-size:14px; border:1px solid #28aad0;background: #0da9d9;}

 html简单写成:

<a class="abtn" href="javascript:void(0)">发布</a>
<input type="button" class="abtn" value="发布"/>

 会出现什么现象呢?


 
在所有浏览器里,input都比 定义为同样高度的 a看起来要矮了一些。
经过调试,input的height属性增加2px可以使两者看起来一样高(宽可能也需要增加,但我们一般应用按钮都是横排,所以宽度不同看起来并不明显,因此不去管它),这是因为input的height包括了border的 度,而a是不包括的:

.inpbtn{float:left;display:inline-block; margin:0;padding:0;color:#FFF; text-decoration:none;text-align:center;
width:48px; height:26px; font-size:14px; border:1px solid #28aad0;background: #0da9d9;cursor:pointer}

 

  我们发现了新的问题,在firefox下,input里的文字比a要下沉一些。如果两者并排,就很明显了。但显然需要将a和input并排的场合还是很多的(比如一个提交钮,一个关闭钮,前者用submit更好,后者用a更省事),这样的差别不能不解决。
调整input的line-height大小根本没用,我们可以把这个属性去掉。经过查资料,知道ff对input ,有一个默认的padding值,要通过如下的方式把它设置为0:

.inpbtn2::-moz-focus-inner,.inpbtn2::-moz-focus-inner{border:0;padding:0}
.inpbtn2{float:left;display:inline-block; margin:0;padding:0;color:#FFF; text-decoration:none;text-align:center;
width:48px; height:26px; font-size:14px; border:1px solid #28aad0;background: #0da9d9;cursor:pointer}

 这时呈现的效果就基本是满足要求的了,如果我们更加精细的话,再用hack将input内的字体抬高1px

@-moz-document url-prefix() { .inpbtn2 { padding-bottom:1px } }

 效果完美:(ff下截图,第三行)


 

二、给按钮增加圆角和渐进背景


现在有css3了,渐进背景不用再作图、切图那么麻烦。不支持css3的ie8也支持ie filter 。对于ie6,ie7等,可不必追求完美效果, 直接用不变的同色背景好了。css3的圆角非常好写,不赘述(ie6-9均不支持圆角,用缺省的方角按钮,也不太难看)

.databtn
{
background: #0da9d9;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#0da9d9', endColorstr='#1dbae9', GradientType=0)"; /* IE*/
background: linear-gradient(to top,  #1dbae9,#0da9d9); /*ie 10*/
background: -moz-linear-gradient(top, #0da9d9, #1dbae9); /* Firefox */
background: -o-linear-gradient(top, #0da9d9, #1dbae9); /* opera*/
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #0da9d9), color-stop(1, #1dbae9)); /* Saf4+, Chrome */
border:1px solid #28aad0;
-moz-border-radius:4px;
-khtml-border-radius:4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.databtn:hover 
{
background: #16b2df;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#01bdfa', endColorstr='#16b2df', GradientType=0)" ;/* IE*/
background: linear-gradient(to top,  #16b2df,#01bdfa); /*ie 10*/
background: -moz-linear-gradient(top, #01bdfa, #16b2df); /* Firefox */
background: -o-linear-gradient(top, #01bdfa, #16b2df); /*opera*/
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #01bdfa), color-stop(1, #16b2df)); /* Saf4+, Chrome */ 
}
.databtn:active
{
background: #08a8dc;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#18a9d3', endColorstr='#08a8dc', GradientType=0)"; /* IE*/
background: linear-gradient(to top, #08a8dc,#18a9d3); /* ie10 */
background: -moz-linear-gradient(top, #18a9d3, #08a8dc); /* Firefox */
background: -o-linear-gradient(top, #18a9d3, #08a8dc); /* opera */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #18a9d3), color-stop(1, #08a8dc)); /* Saf4+, Chrome */
}

 

<a class="abtn databtn" href="javascript:void(0)">发布</a> 
<input type="button" class="inpbtn2 databtn" value="发布" />
 

注意到了吗:ie10的渐变写法与所有其他现代浏览器都不同,别人是“top”,ie10是“to top”,意思也就是相反的,ie10的两个颜色也是反着写的。webkit内核的浏览器写法也不同。

 非ie7-9下效果是这样的,请自 尝试在ie7-9下什么样子:


 

三、再给两组配色供参考

.relabtn
{
background: #84b617;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#84b617', endColorstr='#8dbf2a', GradientType=0)"; /* IE*/
background: linear-gradient(to top, #84b617, #8dbf2a); /* ie 10 */
background: -moz-linear-gradient(top, #84b617, #8dbf2a); /* Firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #84b617), color-stop(1, #8dbf2a)); /* Saf4+, Chrome */
background: -o-linear-gradient(top, #84b617, #8dbf2a);/*opera*/
border:1px solid #76a814;
-moz-border-radius:4px;
-khtml-border-radius:4px;
-webkit-border-radius:4px;
border-radius:4px;
}
.relabtn:hover
{
background: #8cc70d;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8cc70d', endColorstr='#86b32d', GradientType=0)"; /* IE*/
background: linear-gradient(to top, #8cc70d, #86b32d); /* ie 10 */
background: -moz-linear-gradient(top, #8cc70d, #86b32d); /* Firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #8cc70d), color-stop(1, #86b32d)); /* Saf4+, Chrome */
background: -o-linear-gradient(top, #8cc70d, #86b32d);/*opera*/
}
.relabtn:active
{
background: #82b426;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#7aac17', endColorstr='#82b426', GradientType=0)"; /* IE*/
background: linear-gradient(to top, #7aac17, #82b426); /* ie 10 */
background: -moz-linear-gradient(top, #7aac17, #82b426); /* Firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #7aac17), color-stop(1, #82b426)); /* Saf4+, Chrome */
background: -o-linear-gradient(top, #7aac17, #82b426);/*opera*/
}

.aidbtn
{
background: #8d8d8d;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8d8d8d', endColorstr='#a3a3a3', GradientType=0)"; /* IE*/
background: linear-gradient(to top,#a3a3a3 ,#8d8d8d); /* ie 10 */
background: -moz-linear-gradient(top, #8d8d8d, #a3a3a3); /* Firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #8d8d8d), color-stop(1, #a3a3a3)); /* Saf4+, Chrome */
background: -o-linear-gradient(top, #8d8d8d, #a3a3a3); /* opera */
border:1px solid #929292;
-moz-border-radius:4px;
-khtml-border-radius:4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.aidbtn:hover
{
background: #a4a4a4;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#a4a4a4', endColorstr='#969696', GradientType=0)"; /* IE*/
background: linear-gradient(to top, #969696, #a4a4a4); /* ie 10 */   
background: -moz-linear-gradient(top, #a4a4a4, #969696); /* Firefox */
background: -o-linear-gradient(top, #a4a4a4, #969696); /* opera */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #a4a4a4), color-stop(1, #969696)); /* Saf4+, Chrome */
}
.aidbtn:active
{
background: #a3a3a3;
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#8d8d8d', endColorstr='#a3a3a3', GradientType=0)"; /* IE*/
color:#6b6b6b;
background: linear-gradient(to top, #a3a3a3,#8d8d8d); /* ie10 */
background: -moz-linear-gradient(top, #8d8d8d, #a3a3a3); /* Firefox */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #8d8d8d), color-stop(1, #a3a3a3)); /* Saf4+, Chrome */
background: -o-linear-gradient(top, #8d8d8d, #a3a3a3); /* opera */
}

 

 

四、进一步改进

 

如果button内文字前面要加小icon怎么办?

我想到的方法之一是外套父元素,同时内层的background写成transparent。比如facebook是用label嵌套input来完成的。js事件可以绑在label之上。 这样整个网站的button结构就统一 了。大家可以根据这个思路试试看。

【dunhuamgmi原创,转载注明】

  • 大小: 2.9 KB
  • 大小: 6.7 KB
  • 大小: 2.4 KB
  • 大小: 16.4 KB
  • 大小: 3.2 KB
  • 大小: 2.3 KB
分享到:
评论

相关推荐

    input框中出现提示文字(兼容ie 火狐 谷歌)

    附件中的"input框中出现提示文字(兼容ie 火狐 谷歌)"可能包含了一个JavaScript或者jQuery的解决方案,旨在为旧版IE、火狐和谷歌浏览器提供一致的提示文字功能。 在IE8及以下版本,我们可以使用传统的JavaScript...

    input框添加图片按钮

    这种方法虽然简单有效,但建议在实际项目中尽可能使用更现代且标准化的技术栈,比如Flexbox或Grid布局来实现跨浏览器兼容性。 #### 示例代码详解 接下来,我们详细分析示例代码: 1. **HTML结构**: ```html ;...

    angular浏览器兼容性问题解决方案.docx

    ### Angular 浏览器兼容性问题解决方案 #### 一、Edge 浏览器下固定列边框消失问题 ##### 问题描述 在 Edge 浏览器中,使用 `ng-zorro-antd` 表格组件时,如果使用 `nzLeft` 和 `nzRight` 指令来固定表格的某列,...

    input 按钮在IE下显现不一致的兼容问题

    这表明在Web开发过程中,遇到浏览器兼容问题时,与其他开发者交流与合作的重要性。 标签“input按钮 不一致 IE兼容”直接指出了问题的核心——input元素在IE浏览器中的不一致性。这通常涉及到CSS样式设置在IE中的...

    兼容多浏览器的JS日期控件

    首先,我们需要理解浏览器之间的兼容性问题。不同的浏览器可能对JavaScript的某些API或CSS样式处理有所不同,这给开发者带来了挑战。例如,IE浏览器和基于Webkit的浏览器(如Chrome、Safari)在处理DOM操作、事件...

    IE8浏览器中文本框、按钮变小解决方案(IE8浏览器第三方主题软件).docx

    这样,无论使用哪种第三方主题,IE内核的浏览器都能按照设定的字体大小显示元素,解决了文本框和按钮过小的问题。 值得注意的是,这种问题可能是由于IE8与某些第三方主题软件之间的兼容性问题导致的,因为在IE7中并...

    layui点击按钮页面会自动刷新的解决方案

    在开发Web应用时,我们经常遇到点击按钮导致页面刷新的问题。...以上就是小编为大家分享的layui点击按钮页面会自动刷新的解决方案,希望能够帮助到遇到类似问题的开发人员,让Web开发更加顺畅和高效。

    兼容IE7、IE8、IE9的input type=&quot;number&quot;插件

    在网页开发中,`&lt;input type="number"&gt;` 是HTML5引入的一个新特性,用于创建一个...这个插件通过JavaScript和DOM操作,实现了对`&lt;input type="number"&gt;`特性的模拟,确保在不支持它的浏览器中也能提供一致的用户体验。

    CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式

    本篇主要讨论的是如何解决在iPhone的Safari浏览器中,表单元素如`input[type="submit"]`按钮和`input[type="text"]`文本输入框出现的默认样式问题。 首先,问题在于iPhone的Safari浏览器对表单元素有自己的默认样式...

    解决ie8按钮和文字变小问题。

    通过对IE8环境下按钮和文字变小问题的原因分析及解决方案介绍,我们可以看出虽然IE8存在诸多限制,但只要采取合适的方法仍然能够有效解决这类兼容性难题。在实际项目开发中,建议结合实际情况灵活运用上述提到的各种...

    数字微调input兼容IE6

    它们可能包含了具体的代码示例、注意事项和解决常见问题的方法。 7. **备份文件`index.html.bak`和`index2.html`**:这些可能是网站的主页面的不同版本,可能是为了测试和迭代而创建的。开发者可能在其中尝试了不同...

    input按钮onclick事件大全

    ### Input按钮Onclick事件详解 在Web开发中,`&lt;input&gt;`标签是HTML文档中最常用的元素之一,常用于创建各种...然而,需要注意的是,部分事件可能仅在特定浏览器(如IE)中有效,因此在实际应用时还需考虑兼容性问题。

    自定义 input radio 兼容ie6

    为了解决这个问题,我们可以利用JavaScript或者jQuery来检测radio按钮的状态,并根据状态改变对应的样式。 以下是一种常见的实现方案: 1. **HTML 结构**:创建一个隐藏的 radio 元素,以及一个用于显示样式的标签...

    清新淡雅的表单效果!兼容IE、FF、OP等浏览器

    2. FF和OP兼容:这些浏览器通常对现代CSS特性支持较好,但有时仍需注意某些特性在旧版本中的兼容问题。例如,使用`-moz-`、`-webkit-`前缀为Firefox和Opera添加私有属性支持。 三、表单样式技巧 1. 使用内联Block...

    按钮显示和隐藏

    ### 按钮显示和隐藏知识点详解 #### 一、知识点概述 在Web开发中,按钮的显示与隐藏是常见的交互需求之一。本知识点主要围绕一个具体的HTML示例来讲解...此外,在实际开发中还需注意跨浏览器兼容性和用户体验等问题。

    input file上传文件样式支持html5的浏览器解决方案

    最近在使用画布处理图像像素时用到了file上传控件,发现了file上传控件的两个兼容性问题。一个是file上传控件在火狐下无法通过css改变width,另一个是file上传控件在不同的浏览器下的外观和行为都不一样。 下面是...

    彻底解决IE8按钮变小的问题

    ### 彻底解决IE8按钮变小的问题 在互联网浏览器的发展历程中,Internet Explorer(简称IE)曾一度占据着主导地位。特别是在IE8版本发布时,由于其对新特性的支持以及性能上的改进,被广泛应用于各类操作系统之中。...

    webbrowser模拟点击按钮

    2. **兼容性问题**:不同的浏览器对 JavaScript 的支持程度不同,某些方法可能在特定环境下不起作用。 3. **安全性和隐私**:在进行自动化的操作时,需要确保不会侵犯网站的安全策略和个人隐私。 #### 五、进阶技巧...

    Input标签与图片按钮水平对齐解决方法

    综上所述,input标签与图片按钮水平对齐问题的解决方法涉及到CSS的vertical-align属性,通过适当的设置和调整,可以使输入框和图片按钮在视觉上保持在同一水平线上。这一知识点不仅适用于简单的布局,还可以扩展到...

Global site tag (gtag.js) - Google Analytics