css 水平垂直居中那些事

本文是在参考众大神文章基础上,整理的几个常用方案,另外也掺杂个人的一些猜想,如有不妥,请不吝指出
下面开始正题,为了方便验证+展示,下面的案例我会直接附上个人验证的源码+截图

1.

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
  .container{
    position:relative;
    width:500px;
    height:500px;
    border:1px solid blue;
   }
  .cnt {
    position: absolute;
    margin:auto;
    width:200px;
    height:200px;
    border:1px solid red;
    left:0;
    right:0;
    top:0;
    bottom:0;
    }
</style>
</head>
<body>
<div class="container">
<div class="cnt"></div>
</div>
</body>
</html>
</pre>
<code>
<pre>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.container{
position:relative;
width:500px;
height:500px;
border:1px solid blue;
}
.cnt {
position: absolute;
margin:auto;
width:200px;
height:200px;
border:1px solid red;
left:0;
right:0;
top:0;
bottom:0;
}
</style>
</head>
<body>
<div class="container">
      <div class="innerCnt"></div>
</div>
</body>
</html>

  (所有实例运行效果图,均类似右图,下面就不在粘图了(笔者太懒。。。。))

这个案例主要应用了两个div,container和innerCnt组成,子div设成,固定宽高(非auto即可)、绝对定位(absolute)、top/right/bottom/left都设为0才能实现水平垂直居中的效果:

下面是本人猜测:在绝对定位情况下,如果没有设置坐标值(上右下左的距离),则默认吸附父容器左上角,但同时设置了上右下左的距离为等值的情况下相当于四个人同时朝这四个方向一起在拉绳子,当用相同的力量是达到了一个平衡态,使得容器得以水平垂直居中显示...233我太有才了这都想得出来

2.

 1 <!doctype html>
 2 <html lang="en">
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>Document</title>
 6 <style type="text/css">
 7 .container{
 8     display:table-cell; //以表格形式布局
 9     width: 500px;
10     height: 500px;
11     vertical-align: middle; //垂直居中
12     text-align: center;    //水平居中
13     border: 1px solid #000000;
14 }
15
16 .innerCnt{
17     display:inline-block;
18     width: 200px;
19     height: 200px;
20     border: 1px solid #FF0000;
21 }
22 </style>
23 </head>
24 <body>
25 <div class="container">
26 <div class="innerCnt"></div>
27 </div>
28 </body>
29 </html>

这个例子主要展示的是table-cell的应用

table-cell 此元素会作为一个表格单元格显示(类似 <td> 和 <th>)

使得整个区块作为一个单元格,通过vitical-align来控制垂直居中,text-align控制水平居中(需要注意的是子元素应该设置为inline-block来作为行内区块)。

3.

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
.container{
    text-align: center;
    width: 500px;
    height: 500px;
    border:1px solid blue;
}
.empty{
    width:100%;
    height:50%;
    margin-bottom:-100px;  //计算所得; =innerCnt.height/2
}
.innerCnt{
    display: inline-block;
    width: 200px;
    height: 200px;
    border:1px solid red;
}
</style>
</head>
<body>
<div class="container">
    <div class="empty"><!--空的内容--></div>
    <div class="innerCnt">hello</div>
</div>
</body>
</html>

利用一个空div来占位,然后通过margin-bottom来占位使得下方元素上提,实现元素的水平(text-align:center)垂直居中。

时间: 2024-10-04 23:35:36

css 水平垂直居中那些事的相关文章

聊聊css水平垂直居中那些事

1.水平居中实现方法 <div class="demo">     我是一个水平居中的div </div> /*方法1*/ .demo{width: 960px;margin: 0 auto;} /*方法2*/ .demo{width: 960px;height: 400px;background: #f00;position: relative;left: 50%;margin-left: -480px;} 2.水平垂直居中实现方法 <div class

常见的几种 CSS 水平垂直居中解决办法

用CSS实现元素的水平居中,比较简单,可以设置text-align center,或者设置 margin-left:auto; margin-right:auto 之类的即可. 主要麻烦的地方还是在垂直居中的处理上,所以接下来主要考虑垂直方向上的居中实现. 水平垂直居中主要包括三类:基本文本类,图像类,其他元素类 但,也是由一些方法可以实现的,下面就来谈谈了解到的10中方法. 方法一.使用 line-height 这种方式更多地用在 单行文字的情况,其中使用overflow:hidden的设置是

CSS水平垂直居中的几种方法

直接进入主题! 一.脱离文档流元素的居中 方法一:margin:auto法 CSS代码: div{ width: 400px; height: 400px; position: relative; border: 1px solid #465468; } img{ position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } HTML代码: <div> <img src="mm.jpg&quo

CSS水平垂直居中的几种方法2

直接进入主题! 一.脱离文档流元素的居中 方法一:margin:auto法 CSS代码: div{ width: 400px; height: 400px; position: relative; border: 1px solid #465468; } img{ position: absolute; margin: auto; top: 0; left: 0; right: 0; bottom: 0; } HTML代码: <div> <img src="mm.jpg&quo

介绍一种css水平垂直居中的方法(非常好用!)

这次介绍一下一个水平垂直居中的css方法,这个方法可以说是百试百灵,废话不多说,直接附上代码: html,body{ width:100%; height:100%; } 你需要居中的元素{ position: fixed;(absolute)      left:50%;      top:50%;      -webkit-transform: translate(-50%,-50%); } 他的父元素{ position: relative; width:100%; height:100%

CSS水平垂直居中方法总结

部分HTML代码如下: <div class="wrap block"> <div class="block-center">块儿居中</div> </div> <div class="wrap inline"> <span class="inline-center">内联居中</span> </div> 一.absolute 拔河

CSS水平垂直居中常见方法总结(转)

行内元素: 父级元素是块级元素:父元素设置text-align:center 1.元素水平居中 margin: 0 auto;谁居中,谁设置 居中不好使的原因: 1.元素没有设置宽度,没有宽度怎么居中嘛! 2.设置了宽度依然不好使,你设置的是行内元素吧 实例1: <div class="box"> <div class="content"> 哇!居中了 </div> </div> <style type=&quo

css - 水平垂直居中几种方式

水平垂直居中 水平居中 定宽: margin: 0 auto; 不定宽: 参考例子中不定宽高例子. 垂直居中 position: absolute设置left.top.margin-left.margin-to(定高): position: fixed设置margin: auto(定高): display: table-cell: transform: translate(x, y): flex(不定高,不定宽): grid(不定高,不定宽),兼容性相对比较差: 例子 右键f12 覆盖html后

css水平垂直居中总结

在网页布局中,垂直居中对齐总是一个绕不过的话题,而且这两种对齐方式由于浏览器渲染方式的不同,也存在很多不同的场景,本文试图将这些场景一一列举并给出解决方案,也是对这个知识点的一点回顾和总结. 1.水平居中 水平居中这个问题首先要搞清楚存在两个条件才能够称之为水平居中,即父元素必须是块级盒子容器,父元素宽度必须已经被设定好,在这两个前提下我们来看水平居中问题. 场景1:子元素是块级元素且宽度没有设定 在这种情况下,实际上也不存在水平居中一说,因为子元素是块级元素没有设定宽度,那么它会充满整个父级元