美文网首页
CSS奇淫巧技之:negative margin负边距妙用

CSS奇淫巧技之:negative margin负边距妙用

作者: 豆豆猫1031 | 来源:发表于2017-07-13 01:55 被阅读0次

    一、案例与疑问

    左列定宽右列自适应有这样一种思路:

    .left{width:100px;float:left;}

    .right-fix{width:100%;margin-left:-100px;float:right;}

    .right{margin-left:100px;}

    测试后发现

    此例适用于一栏宽度固定一栏宽度自适应的布局,就像QQmail一样,导航栏宽度固定,内容区域随着浏览器的大小而自动缩放。

    二、概念

    由此引出了negative margin的概念:

    负边距对这些由文档|图片流控制的元素的作用是,会使它们在文档流中的位置发生偏移,但这种偏移不同于相对定位,通过相对定位偏移后,其仍然会坚守着它原来占据的空间,不会让文档流的其它元素乘虚而入。而通过负边距进行偏移的元素,它会放弃偏移前占据的空间,这样它后面文档流中的其它元素就会“流”过来填充这部分空间。

    一句话概括负边距导致可以向边界外扩张。(与相对定位的区别在于后者会占位)

    应注意的是不能设置height width否者呈现的是位移效果

    三、发散--实际应用

    negative margin的应用:

    1.实现水平垂直居中:负边距+局对定位

    .left{width:100px;float:left;background:rosybrown;height:200px}

    .right-fix{width:100%;margin-left:-100px;float:right;}

    .right{margin-left:100px;background:goldenrod;height:300px}

    2.实现去掉边框的浮动列表展示:

    所以解决办法是加大子元素的父容器的宽度,让它能够容纳一行中有四个子元素加上四列间隔的宽度,然后最外面的的黑框的那个容器(祖父容器)设一个overflow:hidden就行了。

    这个方案的好处在于不用多定义(:last-child)

    3.额外增加元素宽度并突破边界限制

    4.实现浮动半重叠效果

    5.去除列表最后一个li元素的border-bottom

    方法有多种,加class去除,这种方法需要破坏html结构;另一种方法是使用结构伪类[:nth-child(an+b)](http://topcss.org/demo/pseudo-nth-child.html),设置*a:last-child{border-bottom:0 none;}*,可惜我们的IE6不支持这么高级的选择器。不过,我们可以为li元素设置*margin-bottom:-1px;*来实现,不过不要为ul/ol设置高度,需要高度请在外层嵌套一个div设置高度。

    这儿应注意的是不能设置height width否者呈现的是拉伸效果

    说白了就是竖着的浮动列表去边框效果

    6.负边距自适应布局(同开始的例子)

    7.三栏等高效果实现

    此例关键是给每个框设置大的底部内边距,然后用数值相似的负外边距消除这个高度。这会导致每一列溢出容器元素,如果把外包容器的overflow属性设为hidden,列就在最高点被裁切。

    这儿设置大的内边距 在于保证被切的时候不切到正文

    内外边距正负相反是为了保证内边距能越过父元素边界

    .box{

    overflow: hidden;

    width: 100%;

    position: relative;

    }

    .i{

    float: left;

    margin: 20px;

    padding: 20px;

    background-color: #565656;

    margin-bottom: -200px;

    padding-bottom: 200px;

    width:300px;

    }

    相关文章

      网友评论

          本文标题:CSS奇淫巧技之:negative margin负边距妙用

          本文链接:https://www.haomeiwen.com/subject/suwihxtx.html