• css学习之 display:inline-block;


    设置display:inline-block;后的元素 就是一个格式化为行内元素的块容器( Block container );通俗讲就是:将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。

    支持的浏览器:目前有 safri 和 chorme 及 ie8+ 和 firefox3.6+;ie6和ie7不支持该属性;

    解决办法:

      IE6/IE7的inline-block属性只对原生默认的内联元素(span, a, em......)有效,对于块级元素(div,p,ul......)无效。
                In IE 6 and 7 inline-block works only on elements that have a natural display: inline.IE doesn't apply the value inline-block for the CSS display property on HTML elements that default to block level.
                
                两个结论: 1、IE6/7不识别inline-block,只是触发了layout,表现跟inline-block块元素表现一样。
                         2、IE6/7不完全支持inline-block,只对内联元素有效。

       ie6,7 块元素实现 display:inline-block效果:

        div{
                display: inline-block;
                width: 350px;
                min-height: 250px;
                background-color: silver;    
                margin:0 5px;
                
                vertical-align:top; /*垂直方向 顶部对齐,base_line为基线对齐*/
                *display: inline;    /*只用于 ie6和ie7的hack*/
                zoom: 1;            /*激发 ie7的 hasLayout*/
                _height:250px;        /*通过min-height 和 _height(ie6hack) 来达到相同高度效果*/
            }

       块状元素怎么实现display:inline-block;效果:

            方法有2个: 1、 先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(两个display 要先后放在两个CSS声明                中才有效果,这是IE的一个经典bug,如果先定义了display:inline-block,然后再将display设回 inline或block,layout不会消失)。代码如                下(...为省略的其他属性内容):
                      div {display:inline-block;...}
                      div {display:inline;}
                  2、直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1 或float属性等)。代码如下:
                    div { display:inline-block; _zoom:1;_display:inline;} /*推荐*/
                    div { display:inline-block; _zoom:1;*display:inline;} /*推荐:IE67*/

      触发haslayout有很多方法:

    display: inline-block
    * height: (任何值除了auto)
    * float: (left 或 right)
    * position: absolute
    * (任何值除了auto)
    * writing-mode: tb-rl
    * zoom: (除 normal 外任意值)
    Internet Explorer 7 还有一些额外的属性(不完全列表):
    * min-height: (任意值)
    * max-height: (除 none 外任意值)
    * min- (任意值)
    * max- (除 none 外任意值)
    * overflow: (除 visible 外任意值)
    * overflow-x: (除 visible 外任意值)
    * overflow-y: (除 visible 外任意值)
    * position: fixed

    附我的demo代码一个:

    <!DOCTYPE html>
    <html>
      <head>
        <title>display:inline-block hack001.html</title>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <style type="text/css">
            *{
                margin: 0px;
                padding: 0px;
            }
            
            h3{
                text-align:center;
                margin: 5px auto;
            }
        
            div{
                display: inline-block;
                width: 350px;
                min-height: 250px;
                background-color: silver;    
                margin:0 5px;
                
                vertical-align:top; /*垂直方向 顶部对齐,base_line为基线对齐*/
                *display: inline;    /*用于 ie6和ie7的hack*/
                zoom: 1;            /*激发 ie7的 hasLayout*/
                _height:250px;        /*通过min-height 和 _height(ie6hack) 来达到相同效果*/
            }
            
        </style>
    
      </head>
      
      <body>
          <p>inline-block 后的元素就是一个格式化为行内元素的块容器( Block container )</p>
          <h3>测试 demo</h3>
        <div>display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。
        </div>
        <div>
            这段代码在ie8以上版本显示正常,已经其他的浏览器都是正常的,而唯独在ie6,7下无效,然后通过css hack进行处理后的css为: zoom:1;*display:inline;
        </div>
        <div>
            在没有加 vertical-align:top 之前;显然,在垂直排列上有些错误。嗯,也不算错误吧,这是正确的表现,只不过不是我们想要的效果:这
            是因为每个div的基线是和其父基线对其的; 通俗的说 inline 和 inline-block 元素默认的值是 基线;也就是说元素基线要和其父元素基线对齐;
            总之,修正方法是很简单的: vertical-align: top;
            
            但是在IE 6 和 7 中,依然无效:IE 7 也不支持 inline-block,但是我们可以欺骗它以使 div 好像是 inline-block 的。
            怎么做呢?hasLayout,IE 的一个带来乐趣的神奇属性。你无法在一个元素上用 hasLayout: true; 显示地设置 hasLayout,或通过其他类似的简单方法,
            但是可以用其他类似 zoom:1 的声明来激发它。(技术上来说,hasLayout 意味着,一个 hasLayout 设为 true 的元素负责渲染它自己及其子元素);
            当我们给 div 加上 zoom:1 和 *display:inline(用于 IE6 和 IE7 的星号 hack) 之后,
            在 IE7 中它们就可以像 inline-block 一样显示了;
            
            只剩 IE 6 了:IE6 不支持 min-height,但是多亏它对 height 属性的不正确处理,我们可以用它来代替。
            把 _height(IE6 下划线 hack) 设为 250px 使所有的 div 元素高度为 250px,并且如果它们的内容大于 250px,他们会扩大来适应。
            其他所有的浏览器会忽略 _height。
        </div>
        <a href="###">这是基线</a>
        
      </body>
    </html>

    参考链接:http://www.cnblogs.com/yupeng/archive/2011/04/13/2014147.html

          http://www.cnblogs.com/leejersey/archive/2012/07/11/2586506.html

    等;另两个链接找不到了~~!

         

  • 相关阅读:
    协程greenlet与gevent模块
    进程通信和数据共享两种方式
    创建进程的两个方式
    queue队列吃包子
    queue队列是并发利器
    创建线程方式
    threading线程进程
    socketserver实现多用户并发聊天
    socket实现图片读取
    ZYB's Biology
  • 原文地址:https://www.cnblogs.com/happy-rabbit/p/5123904.html
Copyright © 2020-2023  润新知