CSS元素居中汇总
总结实现不同类型元素居中的几种方法:
一、把margin值设置为auto(实现水平居中)
可以实现元素水平居中对齐
原理:使 margin-left=margin-right
如果设置 margin:200px auto; 表示元素左右外边距相等,上外边距为200px;
注意:这个方法对浮动元素或是绝对定位元素无效,这个元素要居中的前提条件是元素的宽度设置了,并且display属性为block;(块),并且不能设置浮动,否则不起作用


二、使用text-align:center (实现水平居中)
只能对图片、按钮、文字等行内元素进行水平居中(display:inline或display:inline-block等)
text-align 运用在块级元素中,使其中的内容对齐。运用在块级元素中 text-align 会使其包含行内元素对齐。
在IE、Chrome、Firefox等浏览器中<img>图片默认的是(inline)行内元素,所以图片可以像文本一样设置 text-align:center 属性

在这里发现p、h1、img这些元素都居中了,这是为什么呢?
h1和p都是块级元素,可以独占一行,为什么可以使用text-align属性设置水平居中呢?
原因:这些块级元素继承<div>中的text-align属性,对其中的文本进行居中对齐。
使用<div>的好处,假如某些文本进行居中对齐,不用对每一个块级元素进行居中处理,只要对<div>进行统一样式设置就可以了。

对于这个问题还可以这样理解:
在这里并没有给div和h2设置宽高,当没有设置宽度和高度时,宽度继承了父元素的宽度,高度由文本撑开,同时也继承了父元素的text-align:center;
给父元素设置text-align这个属性,只会对其子元素是行级元素或是行内块元素起作用,且子元素会继承text-align这个属性应用在文本上。
如果把p元素转换为行内块元素,不仅p元素中的文本居中了,自身元素也居中了。
p{
display:inline-block;
border:2px solid red;
}

三、line-height设置行高(单行文字垂直居中)
把文字的 line-height 设为文字父容器的高度相同
注意:适用于只有一行文字的情况。
#lv{
width:300px;
height:100px;
border:2px solid red;
line-height: 100px;
}


四、使用表格时(实现水平或垂直居中)
如果我们是在使用表格时,有很多方法可以设置水平或是垂直居中。
使用HTML属性 align="center" 和 valign="middle" 分别实现水平居中和垂直居中,表格单元格里面的内容就会水平垂直居中显示;
使用CSS属性 vertical-align:middle,CSS中没有没有专门设置表格居中对齐的属性。
<table>
<tr>
<td height="200px" width="150px" style="border:2px solid red; vertical-align:middle; text-align:center;">
<div style="width:70px;height:60px; background:blue"></div>
</td>
</tr>
</table>

- 在IE6或是IE7可以使用text-align来对表格元素内容设置水平居中
- 在IE8+及谷歌、火狐等浏览器并不支持text-align对表格单元格的设置,只是对行内元素起作用,对块元素无效。
在IE7中的效果:

五、使用display:table-cell(元素垂直居中)
上面介绍完了表格的水平垂直居中,对于不是表格单元格的元素,我们还可以使用 display:table-cell 来将元素模拟成为表格单元格。方便使用表格的特性设置元素内容居中。
#box{
width:200px;
height:200px;
display:table-cell;
text-align:center;
vertical-align:middle;
border:3px solid green;
}
#bo{
background:orange;
}


注意:text-align:center;只在应对行内元素或是行内块元素时有效。如果给p标签设置了宽度和高度之后那么就不会继承text-align属性。
#bo{
width:100px;
height:100px;
background:orange;
}

上面这些都是一些比较基础的方法,通过设置属性来实现水平或是垂直居中,还可以通过布局来实现水平或是垂直居中。
六、使用绝对定位position:absolute(来实现水平或垂直居中)
position:absolute; top:50%; left:50%; transform:translate(-50%,-50%)
为元素设置绝对定位,再设置top:50%和left:50%,仅仅这样实际上还不是真正的实现元素的居中。
使用绝对定位进行居中的原理:通过把绝对定位元素的left和top设置为50%,这并不是真正的居中,只是比居中的位置向右或向左偏移了这个元素宽度或高度的一半的距离
第一种方法:需要使用transform:translate(-50%,-50%) 将元素拉回居中的位置。(只能在绝对定位里这样用)
第二种方法:需要使用一个负的margin-left或margin-top的值来把它拉回到居中的位置,这个负的margin值就取元素宽度或高度的一半
注意:如果只想实现一个方向的居中,则可以只使用left , margin-left 来实现水平居中,使用top , margin-top来实现垂直居中。
每个元素的原点都在左上角,使用这种方式的定位实际上就是相对于父元素的宽高50%进行定位
<style>
#box{
width:500px;height:500px;position:relative;
background: red
}
#bo{
width:300px; height:300px; background: blue;
position:absolute; top:50%; left:50%;}
</style>
</head>
<body>
<div id="box"><div id="bo"></div> </div>
</table>

实现水平垂直居中,设置绝对定位,设置top:50%和left:50%,最重要的是设置 transform:translate(-50%,-50%)
只设置 transform:translate(-50%,-50%) 的情况:(是相对于子元素宽高的50%)

实现元素水平垂直居中
#bo{
width:300px;
height:300px;
background: blue;
position:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%)
}
或者是
#bo{
width:300px;height:300px;
background: blue;
position:absolute;
top:50%;left:50%;
margin-top:-50%;margin-left: -50%;
}

七、设置元素为弹性盒子(实现水平垂直居中)
还可以使用弹性盒子布局来实现元素的水平和垂直居中
弹性盒子元素的水平居中
HTML部分代码:
<main>
<div class="item">News 1</div>
<div class="item">News 2</div>
<div class="item">News 3</div>
</main>
一、容器里面的项目实现水平对齐
1、在容器部分添加 justify-content:center;

实现了水平居中效果

二、容器项目垂直对齐
当容器内项目添加内容,高度变化,如何为其设置垂直问题:
1、在main容器部分添加 align-items:stretch
这是预设值,会让项目延展,会让其中一个项目变高其他项目延展。


2、div元素位于容器中心,设置容器部分为align-items:center,实现元素在弹性容器内的垂直居中。


八、使用浮动配合相对定位来实现水平居中
关于浮动元素如何解决居中问题的解决方法。
浮动居中的原理:
1、把浮动元素相对定位到父元素50%的位置(top:50%; left:50%;),这个时候元素并不是居中的,只是比实现居中的位置多出了自身一半的宽度;
2、需要里面的子元素再用一个相对定位,再把多出的自身的一半的宽度拉回来。
3、因为相对定位是相对自身来定位的,所以自身一半的宽度可以使用(left:50%;或是right:50%;)实现,用百分数所以就不需要知道元素的实际宽度是多少。
优点:使用浮动配合相对定位实现居中,可以不知道要居中元素的宽度,即使是这个宽度是不断变化的也可以。
缺点:需要多余的元素来包裹要居中的元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
margin:;padding:;
}
.content{
width:250px;height:200px;
border:2px solid red;
} .box{
/*浮动元素居中需要有一个包裹的元素,需要浮动的就是这个元素*/
float:left;
/*在包裹元素上进行浮动,让他自适应内容的宽度*/
position:relative;
left:50%;
/*相对定位到父元素宽度一半的位置,向右偏移父元素一半的宽度*/
clear:both;
/*清除所有浮动影响,每行字得以向左浮动且换行*/
}
.bo{
border: 2px solid blue;
/*这个才是真正要实现居中的元素*/
position:relative;
/*给元素设置相对定位*/
left:-50%;
/*向左偏移自身的一半宽度。向右偏移完父元素一半的宽度之后再向左偏移子元素一半宽度,正好实现水平居中*/
white-space: nowrap;
}
</style>
</head>
<body>
<div class="content">
<div class="box">
<div class="bo">实现水平居中</div>
</div>
<div class="box">
<div class="bo">宽度不同的一行</div>
</div>
<div class="box">
<div class="bo">依旧居中</div>
</div>
</body>
</html>
九、使用font-size实现垂直居中
局限性:只针对IE6和IE7有效
优点:使用这种方法不需要知道子元素的宽度和高度。
在父元素高度是已知的情况下,要实现里面的子元素的垂直居中。
首先给父元素设置一个合适的font-size的值,这个值的取值为父元素的高度除以1.14得到的值;
子元素必须是一个行内或行内块元素(inline或inline-block元素),需要加上vertical-align:middle属性。
如果父元素高度是已知的,要把它里面的子元素进行水平垂直居中,则可以使用这种方法,且子元素的宽度或高度都不必知道。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
body{
margin:;padding:;
}
.main{
font-size:200px;
/*设置这个数是因为元素的高能整除1.14,228/1.14=200*/
height:228px;
/*有一个固定的高度才能计算出相应的font-size的值*/
width:228px;
border:2px solid red;
text-align: center;
}
.box{
vertical-align:middle;
/*这句是必须的*/
display:inline;zoom:;
/*在IE6或IE7中将元素变成inline-block元素,如果本身就是行内元素或是行内块元素就不需要这一步了*/
font-size:12px;
width: 50px;
height:50px;
background: yellow;
}
</style>
</head>
<body>
<div class="main">
<div class="box"></div>
</div>
</body>
</html>
在IE7或6中的表现(其他浏览器并不适用这个方法)
十、使用绝对定位(实现水平垂直居中)
前提:这种方法只适用于已经知道高度或宽度的元素
#bo{
width:300px;
height:300px;
background: blue;
position:absolute;
left:;
right:;
top:;
bottom:;
margin:auto;
}

这种方法只是用设置宽高的元素。
- 如果不设置宽高,则宽度会由left和right决定,高度会由top和bottom决定。所以必须设置元素的宽度的高度。
- 如果同时设置top、bottom、right、left还可以实现元素向某一个方向偏移
不设置元素的宽度和高度时,情况如下

参考博客:https://www.cnblogs.com/2050/p/3392803.html
CSS元素居中汇总的更多相关文章
- Css元素居中设置
你对DIV CSS居中的方法是否了解,这里和大家分享一下,用CSS让元素居中显示并不是件很简单的事情,让我们先来看一下CSS中常见的几种让元素水平居中显示的方法. DIV CSS居中 用CSS让元素居 ...
- css 元素居中
css 4种常见实现元素居中的办法: 1.通过 margin 属性调整 : { position: absolute; top: 50%; left: 50%; margin-left: 盒子的一半: ...
- CSS元素居中的常用方法
只有普通流和绝对定位的元素可以设置居中,浮动元素是不存在居中的. 1.块级元素居中 1) 普通流元素(position : static 或 position : relative) 水平居中:{ m ...
- css元素居中
水平居中 若为行内元素,对其父元素用text-align:center即可: 若为块元素(无浮动),则一般有两种方法可实现对其的水平居中,一为margin:0 auto;二为通过css计算函数calc ...
- css 元素居中方法
目前知道有两种方法 方法一:主要适用于元素未设定高度的情况下. 直接上代码 html: <div class="nav-content"> <ul ng-clic ...
- css 元素居中各种办法
一:通过弹性布局<style> #container .box{ width: 80px; height: 80px; position: absolute; background:red ...
- css元素居中方法
几种居中方式,分情况使用: 1.已知父盒子宽度,子盒子宽度: div{ transform: translate(-50%,-50%); //margin-left: - 自身宽度一半: positi ...
- (前端)面试300问之(2)CSS元素居中【水平、垂直、2者同时居中】
一 仅水平居中 1 行内元素 1)给父元素添加 text-align:center 即可 <div class="parent"> <span class=&qu ...
- css元素居中的几种方式
1.水平居中 <div style="width:200px;margin:0 auto;background-color: yellow;">水平居中</div ...
随机推荐
- window.screenLeft&&window.screenTop&&window.screenX&&window.screenY
http://blog.sina.com.cn/s/blog_14e2a237b0102w4i0.html window.screenLeft&&window.screenTop&am ...
- Java 语言特性之 Annotation 注解
利用 Java 的反射机制,可以在运行时获取 Java 类的注解信息. 注解 注解的特性 注解是 Java 5 的一个新特性,是插入代码中的一种注释或者说是元数据.注解并不是程序代码,可以对程序作出解 ...
- 解决172.17 或者172.18 机房环境下harbor服务器不通的问题
直接改docker-compose.yml文件: 把原来的network选项注释掉,自定义 #networks: # harbor: # external: false networks: harbo ...
- 最全的DevOps自动化工具集合
版本控制&协作开发:GitHub.GitLab.BitBucket.SubVersion.Coding.Bazaar 自动化构建和测试:Apache Ant.Maven .Selenium.P ...
- [Git] 021 来一颗“恶魔果实”?
0. 前言 需要新的功能时,一般会新建一条 "feature" 分支(尴尬的是,我第一眼看时,看成了 "future") 在 "feature&quo ...
- [官网]Prevent a worm by updating Remote Desktop Services (CVE-2019-0708)
Prevent a worm by updating Remote Desktop Services (CVE-2019-0708) ★★★★★ https://blogs.technet.micro ...
- [19/06/06-星期四] HTML基础_文本标签、列表(有序、无序、定义)、文本格式化(单位、字体、大小写、文本修饰、间距、对齐文本)
一.文本标签 em:用来表示一段内容的着重点,语气上的强调.一般显示为斜体 i:是斜体显示,和em显示效果一样.h5规定不需要着重的内容而是单纯加粗或斜体可以用i或b.用的不多 strong:用来表示 ...
- Spark启动流程(Standalone)- master源码
Master源码 package org.apache.spark.deploy.master //伴生类 private[deploy] class Master( override val rpc ...
- linux 进程1
一. 进程的开始和结束 1.1. main函数的调用 a. 编译链接时的引导代码.操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的 ...
- 用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载.
用nopcomerce3.8版本的同行注意了,前2天发布3.8正式版后,作者收到一些BuG,作者修复后重新提供了一个源代码包下载地址,不是github上的那个链接.去作者官网论坛我那个链接地址,或关注 ...

