CSS 元素居中方式总结
作者:
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 填充方式
利用 padding 和 background-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, 配合 width,text-align:center,vertical-align:middle 让大小不固定元素垂直居中,float、absolute 等属性都会影响它的实现,不影响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 元素居中方式总结的更多相关文章
- Css元素居中设置
你对DIV CSS居中的方法是否了解,这里和大家分享一下,用CSS让元素居中显示并不是件很简单的事情,让我们先来看一下CSS中常见的几种让元素水平居中显示的方法. DIV CSS居中 用CSS让元素居 ...
- css元素居中方法
几种居中方式,分情况使用: 1.已知父盒子宽度,子盒子宽度: div{ transform: translate(-50%,-50%); //margin-left: - 自身宽度一半: positi ...
- css 元素居中
css 4种常见实现元素居中的办法: 1.通过 margin 属性调整 : { position: absolute; top: 50%; left: 50%; margin-left: 盒子的一半: ...
- CSS元素居中汇总
总结实现不同类型元素居中的几种方法: 一.把margin值设置为auto(实现水平居中) 可以实现元素水平居中对齐 原理:使 margin-left=margin-right 如果设置 marg ...
- CSS元素居中的常用方法
只有普通流和绝对定位的元素可以设置居中,浮动元素是不存在居中的. 1.块级元素居中 1) 普通流元素(position : static 或 position : relative) 水平居中:{ m ...
- css元素居中的几种方式
1.水平居中 <div style="width:200px;margin:0 auto;background-color: yellow;">水平居中</div ...
- 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.内联元素 父级元素加 text-align: center 即可 html <div class="container"> <a>内联元素 ...
随机推荐
- C语言基础--逻辑判断和循环
目录 一.储存标识符 1.auto 2.register 3.static 4.const 二.运算符 1.逻辑运算符 2.位运算符 3.运算符 4.三元运算符 三.选择结构 1.if判断 1.1 i ...
- 如何在Avalonia11中设置自定义字体
如何在Avalonia11中设置自定义字体 由于avalonia默认的中文字体显示的效果不太理想,我们需要下载一些自定义的字体,来优化UI的显示效果.avalonia的官方文档地址. 对我在项目中运用 ...
- python-多继承构造函数声明问题
背景 有场景分别定义两组逻辑,随后有统一入口做基类属性的整合 其中两组逻辑的积累构造函数定义入参不同 设计类继承图如: 实际的使用方式抽象为[使用] 小节 实际开发过程中遇到问题 先说结论 pytho ...
- Unity 编辑器选择器工具类Selection 常用函数和用法
Unity 编辑器选择器工具类Selection 常用函数和用法 点击封面跳转下载页面 简介 在Unity中,Selection类是一个非常有用的工具类,它提供了许多函数和属性,用于操作和管理编辑器中 ...
- 快速入门OpenCv(python版)
OpenCV是一个(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python. ...
- [python]从环境变量和配置文件中获取配置参数
前言 从环境变量和配置文件中获取配置参数,相关库: python-dotenv:第三方库,需要使用pip安装 configparser:标准库 示例代码 test.ini [mysql] host = ...
- [go笔记]websocket入门
简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket让客户端和服务端之间的数据交换变得非常简单,且允许服务器主动向客户端推送数据,并且之后客户端和服务端所有的通信都 ...
- 【go笔记】目录操作
基本目录操作 涉及:创建目录.重命名目录.删除目录 package main import ( "fmt" "os" "time" &quo ...
- 重学HTTP:理解同源策略和CORS
每次遇到跨域.代理.CORS这几个词都懵懵的,我决定一次把他们都搞明白,以后遇到他们再也不用害怕了. 一.什么是同源策略? 同源策略是在1995年由 Netscape公司引入到浏览器的,目前所有浏览 ...
- 全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略
本教程收集于:AIGC从入门到精通教程汇总 全免费开源,仅需一个域名就可以部署国内的ChatGPT镜像版本. One-Click to deploy well-designed ChatGPT web ...