`

不同浏览器上按钮的不同显示效果和解决方法

阅读更多

IE和FireFox在显示按钮时,具有不同的行为。这个行为在单独使用按钮时表现不太明显,但是当把一个很大的按钮放置到另外一个更小的包容元素时候,就表现的特别明显。比如放置到一个div元素当中,如下所示:

 

<html>
  <head>
    <style>
      .buttonContainer {
        position:absolute;
        overflow:visible;
      }
      
      .backbutton {
        font-size: 20px;
        font-family: Arial;
        font-weight: bold;
        font-style: normal;
        font-variant: normal;
      }
    </style>
  </head>
  <body>
    <div id="widget1" class="buttonContainer" style="left: 4px; top: 48px; width: 31px; height: 11px; z-index: 1; cursor: pointer; border: 1px solid red;">
      <div style="height: 100%; width: 100%; border: 1px solid green;">
        <button style="height: 100%; width: 100%;" class="backbutton">Back</button>
      </div>
    </div>
    
    <div id="widget2" class="buttonContainer" style="left: 4px; top: 100px; width: 31px; height: 11px; z-index: 1; cursor: pointer; border: 1px solid red;">
      <div style="height: 100%; width: 100%; border: 1px solid green;">
        <input type="button" value="Back" style="height: 100%; width: 100%;" class="backbutton"/>
      </div>
    </div>
  </body>
</html>

在FireFox和IE上分别执行上述代码后的结果如下:

 

     IE                                                   FireFox
                                                 

可以看到,虽然按钮的高度都设置为相对于包容元素的100%,但是在IE中按钮自动撑高了包容元素,而在Firefox中,按钮超出包容元素的部分被截断了。

为了解决上述问题,可以将按钮的高度设置为auto,如下所示:

 

<button style="height: auto; width: 100%;" class="backbutton">Back</button>
<input type="button" value="Back" style="height: auto; width: 100%;" class="backbutton"/>

在FireFox和IE上分别执行上述代码后的结果如下:

     IE                                        FireFox
                                     

此时,当包容元素没有设置边框时候,IE和FireFox的显示效果就比较类似了。

 

另外,FireFox中的按钮看起来总是比用其他方式模拟的按钮大(比如A标签),也比IE中的按钮大,原因是FireFox的按钮中有一个伪元素(Pseudo-elements),可能用来当按钮获得焦点时候,显示按钮的虚边框。而这个伪元素会占据额外的高度和宽度。如Fix Firefox Button Padding中描述的,我们可以通过设置特定于Firefox的css来解决这个问题。

 

      /* Used within FF chrome to target CSS to specific URLs: being FF-specific,
       it is also useful for targeting FF-only code */
      @-moz-document url-prefix(http://) {
        button::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="reset"]::-moz-focus-inner {
          padding: 0 !important;
          border: 0 none !important;
        }
      }

有时候,上述设置过后,仍然会发现按钮比其他模拟元素大,此时可以像Firefox Button Height Fix中描述的一样,根据页面具体情况,设置按钮的margin属性如下:

 

 

input::-moz-focus-inner { 
	border: 0; 
	padding: 0; 
	margin-top:-2px; 
	margin-bottom: -2px; 
}

 

 

另外为了使各个浏览器中的按钮显示尽量一致,我们可以设置按钮的overflow属性为visible,width属性为auto,如Styling HTML Submit Buttons中描述的:

 

.submit {
  cursor:pointer;
  overflow:visible; /* ie6/7 width fix */
  width:auto; /* ie6/7 width fix */
  padding:1px 5px;
  background:#ddd;
  color:#333;
  font:10pt arial, sans-serif;
  border:1px solid #aaa;
  }

我们也可以全部使用图片按钮来代替普通按钮,如-moz-focus-inner中描述的。但是当需要国际化时候,则需要很多的图片来支持不同的语言,这个显然不太合适。

 

其他比较有意思的关于按钮和CSS的文章:

css3-patterned-buttons

15 css tricks that must be learned

 

 

 

 

 

  • 大小: 2.2 KB
  • 大小: 1.5 KB
  • 大小: 2.2 KB
  • 大小: 2.1 KB
0
0
分享到:
评论

相关推荐

    解决微信内置浏览器返回上一页强制刷新问题方法

    微信内置浏览器在返回上一页面,且上一页面包含AJAX代码时,页面就会被强制刷新,极度影响用户体验。而我们想要的效果是:返回上一页面时,页面还停留在原来的状态,AJAX获取到的数据还在,滚动条也在原来的位置。 ...

    input 按钮显示差异的解决方法

    请在各浏览器里查看以下input的显示效果! 解决后显示效果! 具体代码 .button{ margin:0; padding:0 0.25em; width:auto; *width:1;/*宽度不带单位我是第一次见,不知道其作用!- -!*/ overflow:visible; } 还有一...

    傲游 [Maxthon] 浏览器 2.0.5.7845 正式版

    它基于 Internet Explorer 内核(可能正是您当前使用的默认浏览器), 这意味着它的效果和您在 IE 中看到的效果完全相同, 同时它还给您提供如下的额外功能... 多页面浏览界面 鼠标手势 超级托拽 隐私保护...

    phpcms_v9 后台上传图片按钮无法点击

    因为目前浏览器不支持flash,导致phpcms后台上传图片按钮无法点击,试了很多浏览器都不行。这个方法操作简单,亲测快速有效,原理是将原来的上传图片插件更改为h5图片上传插件。

    ReportViewer工具栏功能扩展[手动设置打印/导出按钮]

    ReportViewer在IE11后打印按钮就存在兼容问题,火狐,谷歌也存在打印按钮显示的兼容性问题,本资料就是解决ReportViewer打印按钮显示的问题, 通过自己写脚本添加到DOM里面让所有浏览器都能显示打印和自定义的按钮出来! ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Viewport 移动设备上的Viewport就是设备的屏幕上能用来显示网页的一块区域,即浏览器上用来显示网页的那部分区域。Viewport不局限于浏览器可视区域的大小,可能比浏览器的可视区域要大,也可能比浏览器的可视区域要...

    js仿微博图片缩放插件.7z

    经常看到新浪微博里有图片放大缩小旋转效果,感觉效果还不错,所以就想试着做一个类似的demo出来,至于旋转对于IE可以用滤镜来解决,标准的浏览器可以用html5中的canvas画布来解决。 思路:1.点击小图后,小图...

    傲游(Maxthon) 2.5.8.1332

    傲游基于IE内核开发, 这意味着您可以在傲游浏览器中看到和 IE 一致的效果, 并能正常使用网银等支付手段. 同时, 傲游浏览器还能有效防止恶意插件, 阻止弹窗和浮动广告, 加强网上浏览的安全. 傲游浏览器支持各种外挂...

    ShopEx2013京东宽屏模板

    当商品图片的大小和模板演示效果中不同时,有可能导致分享挂件错位,此时只需简单一步即可解决,进入后台--页面管理--模板列表--当前使用模板--编辑模板,找到商品详细页(product.html),点击可视化编辑按钮,就...

    jQuery攻略.pdf

    47 3.9 查明元素何时获得和失去焦点 49 3.10 在按钮上应用悬停效果 50 3.11 切换应用一个CSS类 52 3.12 创建基于图像的变换 54 3.13 为响应事件而添加和删除文本 57 3.14 应用样式作为对事件的响应 58 3.15 显示文字...

    开发 | 小程序也能像朋友圈一样「折叠全文」?有了这个技巧就能做! ...

    本质上,要实现这个效果得解决两个问题: 判断文本是否过长 文本过长时,页面样式如何折叠 如何判断文本是否过长? 所谓「文本过长」,就是文本占据屏幕的高度太大。之所以要判断这个,是为了能告知逻辑层控制「全文...

    超实用的jQuery代码段

    10.3 创建对话框显示效果 10.4 从外部文件中加载页面内容 10.5 为页面添加转场效果 10.6 设置全局默认的转场效果 10.7 定制显示回退按钮 10.8 在标题栏中添加导航栏 10.9 在页脚区域添加导航栏 10.10 添加可折叠的...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    6.2.htm 如何使用构造函数为对象实例增加属性和方法 6.3.htm 在网页上显示中文形式的日期 6.4.htm 将一个小数四舍五入到指定位数 6.5.htm 以从大到小冒泡排序法为例 6.6....

    能用漂亮分页控件及Demo源码

    Url重写技术可以使显示给用户的Url不同于实际的Url,Url重写技术被广泛应用于搜索引擎优化(SEO)、网站重组后重定向页面路径以及提供用户友好的Url等方面, AspNetPager支持Url重写技术使您可以自定义分页导航的Url...

    ExtAspNet_v2.3.2_dll

    ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox...

    WP主题:HotNewspro 2.72

    另外,主题在安装微软雅黑系统中IE8以上或其它核心浏览器显示效果最佳。 ■ 主题设置面板 启用主题后,首先需进入主题设置面板,熟习各项功能控制,设置相关选项(如图)。不论是否设置了相关选项,必须点一次保存...

    shopex 485易开店安装包公司600买的

    当商品图片的大小和模板演示效果中不同时,有可能导致分享挂件错位,此时只需简单一步即可解决,进入后台--页面管理--模板列表--当前使用模板--编辑模板,找到商品详细页(product.html),点击可视化编辑按钮,就...

Global site tag (gtag.js) - Google Analytics