zoukankan      html  css  js  c++  java
  • 跨浏览器的 inlineblock 实现[CSS]

    最近项目做多浏览器测试遇到一些兼容性问题,比如这个 inline block。所幸大多数问题都解决了,所以写出来分享一下。

    我们在制作网页时,有时会希望一个元素既能像 block 一样定义宽度和高度,又可以像普通的 inline 一样不断行,在 Opera 和 Webkit 中支持一个 CSS2 的属性 display: inline-block。利用这个属性,在 Opera 下即可完全实现我们所需的效果,但在其它浏览器下就不行了。

    display 属性另外还有一个不太常用的值 display: inline-table。利用这个值也可以完全实现我们所需的效果。这个属性被除了 IE 以外的所有浏览器正确支持,但是…… 呃,又是 IE。虽然在面对 CSS 的时候所有 Web Developer 都会恨之入骨,但放弃 IE 就等于放弃 70% 的用户,所以我们还是得找出其它的解决方案。

    没辙了,只好 Google,结果还真给我找到了。在这篇文章中指出,如果你首先触发 IE 的 hasLayout,然后再设置它的 display: inline,这个元素将变为 inline-block! 这样一来,我们就可以利用 IE 这个不可理喻的特点,结合一些 CSS Hacks,给出兼容各种浏览器的 CSS 代码:

    .element-class {
        display: -moz-inline-stack;  //Firefox only code
        display: inline-block;       //some standard browsers
        zoom: 1;                     //IE only
        *display: inline;            //Only IE know this code (CSS Hack)
    }

    通过这样的代码就可以实现在各种浏览器中表现一致的 inline-block 了。不过这种方式有个小缺憾,就是无法通过 W3C CSS 验证。当然,要想通过验证也很简单,可以对除了 IE 之外的浏览器发出 inline-table 属性的样式表,对于 IE 单独发出一份 IE Only 的 CSS。

  • 相关阅读:
    恢复 root 本地无权限 Access denied for user 'root'@'localhost' (using password: NO)
    linux 下 PHP Notice: session_start(): ps_files_cleanup_dir 报错 问题剖析
    linux 下mysql 开启远程连接
    linux 下mysql 字段插入的值超过 预设大小报错
    CSS、HTML5、JS
    WPF、Sivelright、UWP
    Quartz.net作业调度
    nginx+iis、NLB、Web Farm、Web Garden、ARR
    workflow
    SqlSugar ORM
  • 原文地址:https://www.cnblogs.com/focus_dada/p/2982309.html
Copyright © 2011-2022 走看看