作者:WangMin

格言:努力做好自己喜欢的每一件事

在开发过程中,很多网页需求要求我们居中一个div,比如html文档流当中的一块div,比如弹出层内容部分这种脱离了文档流等。不同的情况有不同的居中方式,接下来就分享下一下几种常用的居中方式。

1、margin:0 auto 水平居中

也就是将margin-left和margin-right属性设置为auto,从而达到水平居中的效果。前提:已设置width值。

HTML:

<div class="box"></div>

CSS:

.box{
width:500px;
height:100px;
background:#f00;
margin:0 auto;
}

注意:这种对齐方式要求居中元素是块级元素,并且不能脱离文档流(如设置position:absolute),否则无效。

2、text-align:center 方式

这种方式可以水平居中块级元素中的行内元素,如inline,inline-block;

<div class="box">
<span>text-algin:center</span>
</div>
.box{
width:500px;
height:100px;
background:#f00;
text-align: center;
}
.center_text{
display:inline-block;
width:500px
}



但是如果用来居中块级元素中的块级元素时,如div中的div,当内层的div有自己的宽度,这种方法就会失效。只能让里面div的文字等内容居中,而div仍然是左对齐的。

一般的图片居中都是和text-align一样,将图片包装在一个div中,将该div的text-align设为center即可。

<div class="box">
<img src="img/5d8eb50e70116.png" width="200px" height="150px"/>
</div>
.box{
width:300px;
background:#f00;
text-align: center;
}

3、position:absolute方式水平垂直居 (脱离文档流的居中方式)

1)absolute + 负margin(已知宽高 )

使用绝对定位和负外边距对块级元素进行垂直居中,利用 position:absolute 搭配top,left 50%,再将 margin 设为负值也可以对div进行水平垂直居中。margin中的值为该div宽度、高度的一半。

<div class="box">
<div>position: absolute;
left:50%;
top:50%;
margin:-100px 0 0 -100px;</div>
</div>
.box{
width:300px;
height:300px;
background:#f00;
position: relative;
}
.box>div{
width:200px;
height:200px;
position: absolute;
left:50%;
top:50%;
margin:-100px 0 0 -100px;
background:palegoldenrod;
}



我们可以总结成一个公式:

left:50%; margin-left:负的宽度的一半;top:50%; margin-top:负的高度的一半;

以上CSS代码可以简化,但居中效果一样:使用css3计算的方式居中元素calc,代码如下:

.box>div{
width:200px;
height:200px;
position: absolute;
top: calc(50% - 100px);
left: calc(50% - 100px);
background:palegoldenrod;
}

以上代码的计算原理跟我总结的公式原理是一致的,其优点是简化代码,提高网页的执行效率。

2)absolute + transform(未知宽高)

这个方法兼容性不错,但是有一个小缺点:必须提前知道被居中块级元素的尺寸,否则无法准确实现垂直居中。但是当我们不知道被居中块级元素的尺寸的时候该怎么办呢?解决方式如下:

.box>div{
position: absolute;
left:50%;
top:50%;
transform: translate(-50%, -50%);
background:palegoldenrod;
}



这种方法非常明显的好处就是不需要知道被居中的元素的尺寸,因为transform中偏移的百分比就是相对于元素自身的尺寸来说的,当被居中的元素是被自己内部元素撑开宽或者高的时候可适用此方法。

3)absolute + margin auto

<div class="box">
<div>absolute + margin auto</div>
</div>
.box{
width:400px;
height:300px;
background:#DEB887;
position: relative;
}
.box>div{
width:200px;
height:200px;
display: inline-block;
position: absolute;
top:0px;
left:0px;
right:0px;
bottom: 0px;
margin:auto;
background:palevioletred;
}

4、padding 填充方式

利用 paddingbackground-clip 配合实现 div 的水平垂直居中,通过 backgroun-clip 设置为 content-box ,将背景裁剪到内容区外沿,再利用 padding 设为外div减去内div的差的一半,来实现:

<div class="box">
<div>padding: 75px;
background-clip:content-box;
</div>
</div>
.box{
width:300px;
background:#f00;
}
.box>div{
width:150px;
height:150px;
padding: 75px;
background:palegoldenrod;
background-clip:content-box; /*居中的关键*/
}



这种方式看似没有什么技术含量,但其实在某种场景下也是非常好用的。

5、display:table-cell(未知宽高)

给父元素设置 display:table,可以通过 display: table-cell 将要对居中的子元素模拟成一个表格单元格 td, 配合 widthtext-align:centervertical-align:middle大小不固定元素垂直居中,floatabsolute 等属性都会影响它的实现,不影响margin属性。

<div class="box">
<div class="center_text">让大小不固定元素垂直居中</div>
</div>
.box{
display: table;
width:400px;
height:200px;
background:#f00;
}
.box>.center_text{
display: table-cell;
background:blanchedalmond;
text-align:center;
vertical-align: middle;
}

6、display:flex 居中

元素可以通过设置 display:flex; 将其指定为flex布局的容器,指定好了容器之后再为其添加 align-items 属性和 justify-content 属性,其中 align-items 属性属性定义项目在交叉轴(这里是纵向周)上的对齐方式,可能的取值有五种,分别如下:

flex-start:交叉轴的起点对齐;flex-end:交叉轴的终点对齐;

center:交叉轴的中点对齐;baseline项目第一行文字的基线对齐;

strech(该值是默认值):如果项目没有设置高度或者设置为auto,那么将占满整个容器的高度。

<div class="box">
<div class="center_text">display: flex;</div>
</div>
.box{
width:400px;
height:200px;
background:#f00;
display: flex;
align-items: center; /*垂直居中*/
justify-content: center;/*水平居中*/
}
.box>.center_text{
width:200px;
height:100px;
background:blanchedalmond;
}



这种方式最为简便,就是兼容性不好,不过随着时间的前进,各大浏览器一定会都兼容的。

7、line-height 行高方式

行内元素的垂直居中把height和line-height的值设置成一样的即可。

<div class="box">
<span>line-height: 100px;</span>
</div>
.box{
width:200px;
height:100px;
line-height: 100px;/*行高与高度一致*/
text-align: center;
background:#f00;
}

8、css3的fit-content

“fit-content”是CSS中给“width”属性新加的一个属性值,他配合margin可以轻松的实现水平居中的效果,但是浏览器兼容性差,不推荐使用。

<div class="box">
<div>width: fit-content;</div>
</div>
.box{
width: fit-content;
margin: 0 auto;
background:#ccc;
}

9、利用vertical-align:middle(未知宽高)

这个方法关键要有一个和容器一样高的元素作为居中的一个参照就像b元素一样,而且还要结合 display:inline-block。这方法不常见,所以不推荐使用。

<div class="box">
<b class="vamb"></b>
<div class="test">利用vertical-align:middle</div>
</div>
.box{
width:300px;
height:300px;
background:rgba(0,0,0,0.5);
text-align:center;
font-size:0;
}
.vamb{
display:inline-block;
width:0px;
height:100%;
vertical-align:middle;
}
.test{
display:inline-block;
vertical-align:middle;
font-size:16px;
text-align:left;
background:red;
}



以上是我目前所能理解的元素居中方式,后面如果有新的方式会补充的。


以上仅是个人见解,若有不足之处欢迎在下方评论指出,那就先分享到这里!! 后续继续更新!!

CSS 元素居中方式总结的更多相关文章

  1. Css元素居中设置

    你对DIV CSS居中的方法是否了解,这里和大家分享一下,用CSS让元素居中显示并不是件很简单的事情,让我们先来看一下CSS中常见的几种让元素水平居中显示的方法. DIV CSS居中 用CSS让元素居 ...

  2. css元素居中方法

    几种居中方式,分情况使用: 1.已知父盒子宽度,子盒子宽度: div{ transform: translate(-50%,-50%); //margin-left: - 自身宽度一半: positi ...

  3. css 元素居中

    css 4种常见实现元素居中的办法: 1.通过 margin 属性调整 : { position: absolute; top: 50%; left: 50%; margin-left: 盒子的一半: ...

  4. CSS元素居中汇总

    总结实现不同类型元素居中的几种方法: 一.把margin值设置为auto(实现水平居中) 可以实现元素水平居中对齐 原理:使  margin-left=margin-right  如果设置  marg ...

  5. CSS元素居中的常用方法

    只有普通流和绝对定位的元素可以设置居中,浮动元素是不存在居中的. 1.块级元素居中 1) 普通流元素(position : static 或 position : relative) 水平居中:{ m ...

  6. css元素居中的几种方式

    1.水平居中 <div style="width:200px;margin:0 auto;background-color: yellow;">水平居中</div ...

  7. css元素居中

    水平居中 若为行内元素,对其父元素用text-align:center即可: 若为块元素(无浮动),则一般有两种方法可实现对其的水平居中,一为margin:0 auto;二为通过css计算函数calc ...

  8. css 元素居中方法

    目前知道有两种方法 方法一:主要适用于元素未设定高度的情况下. 直接上代码 html: <div class="nav-content"> <ul ng-clic ...

  9. css 元素居中各种办法

    一:通过弹性布局<style> #container .box{ width: 80px; height: 80px; position: absolute; background:red ...

  10. css常用居中方式

    一.水平居中 1.内联元素 父级元素加 text-align: center 即可 html <div class="container"> <a>内联元素 ...

随机推荐

  1. 利用InnoStep在VS编译时自动构建安装包

    摘要 很多同学在C/S开发领域或多或少都可能会遇到需要制作安装包的场景,打包的工具也是五花八门,例如有NSIS.InstallShield.Wix Toolset.ClickOnce等等,这里以Inn ...

  2. Docker安装及镜像加速器配置

    Centos7安装 卸载旧版本(如果安装过旧版本的话) yum remove docker docker-common docker-selinux docker-engine 安装Docker依赖环 ...

  3. ABP 的ajax请求错误:400 Empty or invalid anti forgery header token.

    ABP 的ajax请求错误 记录于2018-03-22 13:31:16 星期四 错误信息:400 Empty or invalid anti forgery header token. 我从网上找到 ...

  4. Kubernets常用命令

    查看所有namespace的pods运行情况 kubectl get pods --all-namespaces kubectl get service -ALL kubectl get deploy ...

  5. JVM篇(一) 什么是JVM,它有什么用

    一.JVM的组成 1. JVM由那些部分组成,运行流程是什么? 从图中可以看出 JVM 的主要组成部分 ClassLoader(类加载器) Runtime Data Area(运行时数据区,内存分区) ...

  6. 基于 ASP.NET 的投票系统

    OnlineVoting 基于 ASP.NET 的投票系统 功能页面 登录 注册 首页 投票广场 查看别人发布的投票. 个人中心 个人资料 换头像.修改密码和其他信息. 发布投票 项目地址:https ...

  7. .NET 操作 TDengine .NET ORM

    TDengine 是国内比较流的时序库之一,支持群集并且免费,在.NET中资料比较少,这篇文章主要介绍SqlSugar ORM来操作TDengine 优点: 1.SqlSugar支持ADO.NET操作 ...

  8. 《SQL与数据库基础》23. 读写分离

    目录 读写分离 一主一从 准备 配置 双主双从 准备 配置 主库配置 从库配置 从库关联主库 主库相互复制 双主双从读写分离 本文以 MySQL 为例.以 MyCat 数据库中间件为例,通过 MyCa ...

  9. HTML一键打包APK工具 如何进行实名认证购买和激活

    HTML一键打包APK工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × √ 去 ...

  10. 2-MySQL基本语法

    上文说到,数据库的安装和连接,接下来将给大家讲解MySQL数据库的基本语法及数据的类型 1.基本语法 (1).查看当前所有数据库 : show databases; (2).创建数据库 create ...