zoukankan      html  css  js  c++  java
  • margin负值 – 一个秘密武器

    1b49f8d2b12abe3a48ca461711f68a16.jpg

      CSS盒模型中,margin是我们老熟悉的一个属性了, 它的负值你用过吗? 你知道margin负值的秘密武器吗?我们一起看看吧!

      1、带竖线分隔的横向列表(例如:网站底部栏目)

    96f892aa82ee851b2506a0a87260c06c.jpg

      传统的分隔符是使用 “|” 来实现的,弊端显而易见,不利于表现与结构的分离,同时增加了后台输出时的判断工作。

      所以我们采用border-left 左边框来模拟分割线,然后通过margin-left:-1px隐藏掉第一个列表项的边框,父元素设置 overflow:hidden 来隐藏溢出部分,这样完美达到首尾无分割线的要求。

      实际测试中发现 iphone safari 设置margin负值=border-widht 并不能很好的隐藏,

      还有约0.5px的细线,iPad没测不知道如何?修复方法如下:

      /* 修复iphone safari 不能完全隐藏边框的bug */

      @media screen and (max-device- 480px){
    
      .nav-list-item { margin-left:-2px; }
    
      .ui-tab-trigger-item { margin-bottom:-2px; }
    
      }

      2、带底部分割线的竖向列表(例如:新闻列表)

    dc5ec5ac6cdc0c0defc095c0b602db42.jpg

      原理同横向列表相同,需要注意的是 margin 负值在 IE 中的层级bug,详细参见:

      IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常,得到的最终解决方案是用 zoom:1确保触发hasLayout,然后设置position:relative。

      3、两栏、三栏自适应布局

    34ced08e2069d2015e90f91e6e0725d0.jpg

      曾经有这样一个经典的需求:

      1)两栏抑或三栏布局,主体自适应宽度;

      2)一个或两个侧边栏固定宽度;

      3)主体部分xhtml结构在最前面(网速慢时可以优先显示,对SEO有利)

      4)自适应高度,且不影响等高;

      5)兼容IE6+,firefox,chrome,opera。

      于是乎margin负值便大放光彩,首先是国外出现的圣杯布局,掀起一股margin负值热潮。

      紧接着在栅格化布局大行其道的淘宝,玉伯大湿进一步利用margin负值,创造了同一种xhtml结构,两栏或三栏位置通过css任意调整的布局,玉伯美其名曰:双飞翼布

      局--比翼双飞,像鸟儿翱翔蓝天一样自由。(双飞翼布局完整demo) 至此,margin负值在布局之路上配合float妹子,已经发挥得淋漓尽致。

      优雅的demo

      4、多栏等高

    bc913325a30ef0d67e8b93e23e5f7224.jpg

      正如上面所说,有时候我们还希望多栏等高,使页面看起来更美。于是便有了经典的padding-bottom:9999px;margin-bottom:-9999px;

      先通过padding把盒子扩展到足够高,然后通过margin伪娘把它给拉回来,最后父元素设置overflow:hidden隐藏溢出,这样多栏布局中就会以最高栏为其他栏的视觉高度。

      当然万物没有完美的,这种等高方法的弊端如下:

      1)当高度超过9999px时候失效,当然一般高度不会超过这个,也可以设置为最大值32767px(为啥,因为int的最大值就是32767,超过这个数值会以最大值计算)

      2)无法设置底部边框

      其他的就不多说了,以后会专门写一篇多栏等高的文章,详细介绍各种方法的利弊,大家按需使用。

  • 相关阅读:
    ASP.NET页面事件执行过程 总结
    程序员最应该读的图书(中译版) [收藏]
    C# 中的委托和事件的详解资料
    已添加项。字典中的关键字
    TFS 删除团队项目集合
    注册后第一篇
    类型的权限已失败 SqlClientPermission
    C#创建Oracle存储过程
    使用MySQL with 递归查询菜单树
    MySQL 常用TSQL(持续更新...)
  • 原文地址:https://www.cnblogs.com/aobingyan/p/3864205.html
Copyright © 2011-2022 走看看