css中margin 负值使用一例

margin我很少会用到,一般用到也只是相对的去调整一个层的位置以达到一定效果。因为最近正在着手更新自己使用的主题,所以研究了一下各种布局的实现方法。发现使用margin负值形成的布局结构要比我们一般用层嵌套层再去分别左右浮动的方式要灵活很多。

margin 负值对文档流的影响

确切的说应该是margin负值对于层定位的影响,

没有浮动时

如果没有浮动的话,负的外边距会影响到各个层的高度、宽度,
当然这要看你设定的是水平还是垂直的负边距。有兴趣的可以去建立一个demo实验一下。

有浮动时

有浮动时当然要复杂的多,本例以向左浮动(float:left;)为例。
DEMO 地址:margin 负值布局演示

margin-demo

简单概括一下这个例子:

整个演示包括三个层 自左至右是 #gird-left、#main、#siderbar
在文档流的先后顺序却是#main、#gird-left、#siderbar
三个层的浮动都是向左(float:left;),而且三个层都在一个水平位置。
比较通俗的讲法就是如果你想实现如上布局就要外边距的负值大于当前水平的所有宽度。
css布局定义如下:

#main{
margin: 0 315px 0 160px;
}
以#main作为主要的文档流显示左右分别预留160像素和315像素来给剩下的两个层留出位置。

#gird-left{
margin-left: -100%;
}

左外边距-100%,可以将本层直接从文档流抽出直接显示在父级层最左上的位置。

#siderbar{
margin-left: -300px;
}

将#siderbar设定-300像素是因为本层有300像素宽,而上一个层宽度为100%;

这一个例子牵扯到了margin负值的多种综合应用,希望你能看懂。
浮动的margin负值布局,同一水平位置是会层叠的,
靠后的文档流会在上层,
如果看不懂给一个增强理解的例子:

margin--

margin负值布局的好处

从文档的先后顺序来看,我们不需要像传统布局那样,由上至下,由左至右的安排文档流代码的顺序。
很明显,作为一个网页内容的重要先后顺序为#main、#gird-left、#siderbar,
而我们阅读网页的习惯是将主要的东西放中间,其次左,最后右,
使用负值外边距我们完美的做到了这一点,
不但能优化搜索引擎而且还提高了阅读体验。

【案例解析】

一、三栏显示(无需浮动及额外标签);
列表过长时,我们一般都会考虑通过浮动来使之显示为多列,其实换个思路也可以实现。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>negative margin 之列表三栏显示</title>
    <style>
    *{margin:0;padding:0;font-size: 14px;}
    .goback{clear:both;height:30px;line-height:30px;text-align: center;}

    ul {list-style:none;}
    li {width:100px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.3em;}
    .col2 {margin-left:120px;}
    .col3 {margin-left:240px;}
    .top {margin-top:-2.6em;}
    </style>
</head>
<body>
    <ul>
        <li class="col1">10家国企年招待费超29亿 被指仅用于吃喝</li>
        <li class="col1">媒体称中国豪车市场因政府严控公车快速萎缩</li>
        <li class="col2 top">菲发言人笑答射杀台渔民事件</li>
        <li class="col2">情妇打越洋电话提供证据</li>
        <li class="col3 top">雷政富涉嫌受贿罪被检察机关提起公诉</li>
        <li class="col3">日称冲绳久米岛附近海域发现疑似中国海军潜艇</li>
    </ul>
</body>
</html>二、叠加效果;

最常见的选项卡,当前项选中状态;

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>negative margin 之叠加</title>
    <style>
    *{list-style:none;margin:0;padding:0;font-size: 12px;}
    .clearfix:after {
    clear: both;
    display: block;
    height: 0;
    line-height: 0;
    visibility: hidden;
    content: "";
}
    .clearfix {*zoom:1;}
    .goback{clear:both;height:30px;line-height:30px;text-align: center;}
   
    .demo{width:400px;}
    .tab{
    border-bottom:1px solid #66CC66;
    }
    .tab li{
    float:left;
    display:inline;
    margin-left:8px;
    }
    .tab li a{
    background-color:#CCFFCC;
    border:1px solid #66CC66;
    color:#666;
    display:block;
    margin-bottom:-1px;
    padding:0 5px;
    line-height:20px;
    float:left;
    font-weight:bold;
    text-decoration:none;
    }
    .tab li .current,
    .tab li a:hover{
    background-color:#fff;
    border-bottom:1px solid #fff;
    _position:relative;
    }
    .cont{padding:10px;border:1px solid #6c6;border-top:0;}
    </style>
</head>
<body>
    <div class="demo">
        <div id="demo2">
                    <ul class="tab clearfix">
                        <li><a href="#" class="current">Tab One</a></li>
                        <li><a href="#">Tab Two</a></li>
                        <li><a href="#">Tab Three</a></li>
                        <li><a href="#">Tab Four</a></li>
                    </ul>
                </div>
        <div class="cont">荒凉的旷野,一群暴虐的劫匪正在鞭挞一位美丽的姑娘玛丽亚(萝蕾丹娜·卡波莱特 Loredana Cappelletti饰)。幸得迪亚戈(弗兰科·尼罗 Franco Nero饰)的解救。他神秘而冷峻,拖着一副棺材漫步在泥泞的荒野上。迪亚戈带着玛丽亚来到荒凉的小镇,人们对他的到来充满好奇,更对这副棺材里隐藏的秘密而惶惶不安。</div>
    </div>
</body>
</html>三、两列流式布局;
固定宽度的布局so easy,配合浮动轻松搞定两列自适应布局,三列同理。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>negative margin 之两列自适应布局</title>
    <style>
    *{list-style:none;margin:0;padding:0;font-size: 12px;}
    .goback{clear:both;height:30px;line-height:30px;text-align: center;}
   
    .layout{width:960px;margin:0 auto;background:#f5f5f5;}
    .main{float:left;width:100%;height:300px;margin:0 -200px 0 0;background:#ccc;}
    .main-wrap{margin:0 210px 0 0;}
    .aside{float:left;width:200px;height:300px;background:#f5f5f5;}
    </style>
</head>
<body>
    <div class="layout">
        <div class="main">
            <div class="main-wrap">main</div>
        </div>
        <div class="aside">aside</div>
    </div>
</body>
</html>四、去除多余的外边距;
图文混排,每行最后一个元素的margin值如何处理?单独设置类名消0?通过父层来裁切?使用margin负值吧!

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>negative margin 之去除多余外边距</title>
    <style>
    *{list-style:none;margin:0;padding:0;font-size: 12px;}
    .clearfix:after {
    clear: both;
    display: block;
    height: 0;
    line-height: 0;
    visibility: hidden;
    content: "";
}
    .clearfix {*zoom:1;}
    .goback{clear:both;height:30px;line-height:30px;text-align: center;}
   
    .demo{width:320px;margin:0 auto;padding:10px 0;*overflow:hidden;background:green;}
    .figure-list{margin:0 -10px 0 0;}
    .figure-list li{float:left;width:100px;height:100px;margin:0 10px 10px 0;background:#f5f5f5;}
    </style>
</head>
<body>
    <div class="demo">
        <ul class="figure-list clearfix">
            <li>item-1</li>
            <li>item-2</li>
            <li>item-3</li>
            <li>item-4</li>
            <li>item-5</li>
            <li>item-6</li>
        </ul>
    </div>
</body>
</html>

margin负值布局的缺点

作为层叠的文档流,我们要多做一些测试,以免各层文字内容重叠造成阅读困难

时间: 2024-09-24 04:13:31

css中margin 负值使用一例的相关文章

CSS中margin和padding的两者对比与用法

  CSS边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.--W3School 边界(margin):元素周围生成额外的空白区."空白区"通常是指其他元素不能出现且父元素背景可见的区域.--CSS权威指南 padding称呼为内边距,其判断的依据即边框离内容正文的距离,而我喜欢CSS权威指南解释的"补白"(或者叫"留白"),因为他很形象.补白(padding):

css中Margin用法你真的懂了么?

Margin是什么 CSS 边距属性定义元素周围的空间.通过使用单独的属性,可以对上.右.下.左的外边距进行设置.也可以使用简写的外边距属性同时改变所有的外边距.--W3School 边界,元素周围生成额外的空白区."空白区"通常是指其他元素不能出现且父元素背景可见的区域.--CSS权威指南 我比较喜欢使用"外边距"这个词来解释margin(同理padding可以称之为"内边距",但是我又恰恰喜欢称呼padding为"补白"或

css中margin和padding用法区别介绍

用margin还是用padding这个问题是每个学习CSS进阶时的必经之路. CSS边距属性定义元素周围的空间,通过使用单独的属性,可以对上.右.下.左的外边距进行设置,也可以使用简写的外边距属性同时改变所有的外边距. 边界(margin):元素周围生成额外的空白区,"空白区"通常是指其他元素不能出现且父元素背景可见的区域. padding称呼为内边距,其判断的依据即边框离内容正文的距离,而我喜欢CSS权威指南解释的"补白"(或者叫"留白"),因

CSS教程:margin,padding,border

文章简介:CSS中margin,padding,border-style有几种书写规范. 在我们使用CSS时,经常看到margin:0 0,margin:0 5px,padding:0 5px 10px;而它们研究是什么含义呢,在WEB标准中,它们会有以下含义,它适合于CSS中的margin,padding,border-style等属性 第一种情况,四个值都有,它们的含义如下属性:上 右 下 左 第二种情况,只有三个值,它们的含义如下属性:上 右左 下 第三种情况,只有两个值,它们的含义如下属

css网页制作技巧:margin负值和bug的解决

文章简介:最近做的项目中经常会用到margin的负值,这里就总结一下关于margin负值的5种使用及相关bug的解决. 最近做的项目中经常会用到margin的负值,这里就总结一下关于margin负值的5种使用 及相关bug的解决. 1. 在流动性布局中的应用如WordPress的两栏式不固定布局就是使用margin负值来实现的定位,属于左右 margin负值在流动性布局中的应用. <div style="width:200px;float:left;border-right:4px sol

css中为某个div设置高度,高度包括margin上下值吗?

问题描述 css中为某个div设置高度,高度包括margin上下值吗?高度具体包括哪些值或属性值呢? 解决方案 设置height就是高度了,margin是与另外一个对象的距离

总结CSS中火狐浏览器与IE浏览器的兼容代码

总结CSS中火狐浏览器与IE浏览器的兼容代码,兼容你兼容主要是语法规范问题,你写CSS写规范了,就都兼容了,其他的就是一些浏览器的BUG了,发一些技巧给你看看,或许有用. CSS技巧 1.div的垂直居中问题 vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了.缺点是要控制内容不要换行 2.margin加倍的问题 设置为float的div在ie下设置的margin会加倍.这是一个ie6都存在的bug.解决

CSS中的滑动门技术

css 原文作者:Douglas Bowman 原文出自:A List Apart 中文翻译:54player.com nobita 版权说明:本文中文翻译版权归译者54player.com nobita所有.需要转载发表的,请先与作者联系 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标

CSS中的滑动门技术研究

css 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标签导航栏就是其中的一个例子.过去,我们频繁的使用这些标签,并已成为了一种非常流行的站点导航方式.现今,在CSS已被广泛支持的前景下,我们可以为我们站点制作出更高质量和更好外观的标签导航栏来.你也许知道CSS可以用来"驯服"无