在div的宽度和高度固定的情况下,实现div水平和垂直居中普遍采用如下的方式:

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
    .mydiv{
        width: 400px;
        height: 300px;
        position: absolute;
        left: 50%;
        top: 50%;
        margin: -150px 0 0 -200px;
        background-color: black;
    }
</style>
</head>
<body>
    <div class="mydiv">
    </div>
</body>
</html>

1.利用定位使div的起始位置处于界面的中心,即div的左上角处于界面的中心点

position: absolute;

left: 50%;

top: 50%;

2.然后利用外边距属性上移和左移div高度和宽度的一半

margin: -150px 0 0 -200px;

补充:

1.CSS让DIV水平居中

让一个DIV水平居中。只要设置了DIV的宽度,然后使用margin设置边距0 auto,CSS自动算出左右边距,使得DIV居中。

.mydiv{
    margin:0 auto;
    width:400px;
    height:300px;
    background: black;
}

2.负margin属性介绍

如果使用得当,负margin是非常强大的属性,以下是2种(负margin占主导位置)的场景。

一、作用于static元素上的负margin属性

Static元素是没有设定成浮动的元素,下图说明了负margin对static元素的作用

当static元素的margin-top/margin-left被赋予负值时,元素将被拉进指定的方向。

例如:

/* 元素向上移10px*/
#mydiv{
    margin-top:-10px;
}

但如果你设置margin-bottom/right为负数,元素并不会如你所想的那样向下/右移动,而是将后续的元素拖拉进来,覆盖本来的元素。

例如:

/*mydiv后续元素向上移10px, mydiv本身不移动*/
#mydiv {
    margin-bottom:-10px;
}

如果没有设定width属性,设定负margin-left/right会将元素拖向对应的方向,并增加宽度,此时的margin的作用就像padding一样。

二、浮动元素上的负margin
考虑下以下这种情况

HTML代码:

<div id="mydiv1">First</div>
<div id="mydiv2">Second</div>

如果给一个浮动元素加上相反方向的负margin,则会使行间距为0且内容重叠。这对于创建1列是100%宽度而其他列是固定宽度(比如100px)的自适应布局来说是非常有用的方法。

/* 应用在与浮动相反方向的负margin */
#mydiv{
    float:left;
    margin-right:-100px;
}

若两个元素都为浮动,且#mydiv1的元素设定margin-right为20px。这样#mydiv2会认为#mydiv1的宽度比原来宽度缩短了20px(因此会导致重叠)。但有意思的是,#mydiv1的内容不受影响,保持原有的宽度。

如果负margin等于实际宽度,则元素会被完全覆盖。这是因为元素的完全宽度等于margin,padding,border,width相加而成,所以如果负margin等于余下三者的和,那元素的实际宽度也就变成了0px。

最新文章

  1. ecshop商品子分类点击下拉,子分类空时,直接跳转功能
  2. 腾讯优测优分享 | 这些年,我们追过的 fiddler
  3. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.4.Tabs控件
  4. jsonObject jsonArray jsonTokener jsonStringer,json解析以及http请求获取josn数据并加以解析
  5. ArrayAdapter的简单使用
  6. InterfaceConnect
  7. The iOS Design Cheat Sheet 界面设计速参
  8. WCF(1)----服务创建
  9. HighCharts之气泡图
  10. TypeError: &#39;_io.TextIOWrapper&#39; object does not support item assignment
  11. python 模块 不可不知的知识点
  12. pyinstaller安装配置
  13. SpringBoot前端给后端传list
  14. 使用ServiceDesk Plus保证及时解决问题,防止违反SLA
  15. 无图形界面安装CentOS
  16. C#Redis集合set
  17. Qt界面UI之QML初见(学习笔记四)
  18. angularJs按需加载代码(未验证)
  19. Outliner大纲式笔记软件介绍
  20. MPVUE多环境定义后台URL

热门文章

  1. Swift - 一步步教你使用SpriteKit创建开发游戏项目
  2. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)
  3. Qml 写的弹出层控件(13篇博客)
  4. Linux中more命令的实现
  5. c/c++数组名和指针区别深入探索
  6. Mysql iot表
  7. php获取server端mac和clientmac的地址
  8. codeforces584B Kolya and Tanya
  9. nginx 区分pc和mobile 到不同的404页面
  10. 让qt应用程序支持触摸