博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSS居中完全指南
阅读量:6923 次
发布时间:2019-06-27

本文共 2492 字,大约阅读时间需要 8 分钟。

原载于,本文着重提取文中的方法,不完全翻译。如有需要,直接原文查看。

人们经常抱怨在CSS中居中元素的问题,其实这个问题其实并不复杂,只是因为方法众多,需要根据情况从众多方法中选取一个出来。接下来,我们做一个‘决定树’来帮我们把问题变的简单一点。首先你需要居中:

  • 水平

    • 需要居中 inline 或者 inline-* 元素(如文字或者链接)?

    • 需要居中 block 类的元素?

    • 需要居中多个 block 元素?

  • 垂直

    • 需要居中 inline 或者 inline-* 元素(如文字或者链接)?

    • 需要居中 block 类的元素?

  • 既水平又垂直

    • 固定宽高

    • 不固定宽高

    • 使用 flexbox

水平居中

水平居中 inline 或者 inline-* 元素

你可以轻松的在一个 block 元素中水平居中一个 inline 元素,以下代码对 inlineinline-blockinline-tableinline-flex 等有效

.parent {  text-align: center;}

水平居中 block 类的元素

block 元素被设定固定宽度的情况下,可以使用设置元素 margin-leftmargin-right 的值为 auto 的方法实现水平居中。

.child {  width: 400px;  margin: 0 auto;}

水平居中多个 block 类的元素

通过 inline-block实现

.parent {  text-align: center;}.child {  display: inline-block;  text-align: left;}

通过 flexbox 实现

.parent {  display: flex;  justify-content: center;}

垂直居中

垂直居中 inline 或者 inline-* 元素

单行

inline/text 元素可以简单的用设置相同的上下 padding 值达到垂直居中的目的。

.center {  pading-top: 30px;  padding-bottom: 30px;}

如果因为某种原因不能使用 padding 的方法,你还可以设置 line-height 等于 height来达到目的。

.center {  height: 100px;  line-height: 100px;  white-space: nowrap;}

多行

相同的上下 padding 也可以适用于此种情况,如果不能生效,你可以尝试将该元素的父元素的 dispaly 设置为 table ,同时该元素的 dispaly 设置为 table-cell,然后设置 vertical-align

.parent {  display: table;  width: 200px;  height: 400px;}.child {  display: table-cell;  vertical-align: middle;}

如果上述方法不能使用,你可以尝试使用 flexbox,一个单独的 flexbox 子元素可以轻易的在其父元素中居中。谨记,这种方法需要父元素有固定的高度。

.parent {  display: flex;  justify-content: center;  flex-direction: column;  height: 400px;}

如果上述两种方式均不能使用,你可以使用“幽灵元素”技术,这种方法采用伪元素 ::before 撑开高度 ,文字垂直居中。

.parent {  position: relative;}.parent::before {  content: " ";  display: inline-block;  height: 100%;  width: 1%;  vertical-align: middle;}.child {  display: inline-block;  vertical-align: middle;}

垂直居中 block 类的元素

已知元素高度

.parent {  position: relative;}.child {  position: absolute;  top: 50%;  height: 100px;  margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */}

未知元素高度

.parent {  position: relative;}.child {  position: absolute;  top: 50%;  transform: translateY(-50%);}

使用 flexbox

.parent {  display: flex;  flex-direction: column;  justify-content: center;}

既水平又垂直

固定宽高

.parent {  position: relative;}.child {  width: 300px;  height: 100px;  padding: 20px;  position: absolute;  top: 50%;  left: 50%;  margin: -70px 0 0 -170px;}

不固定宽高

.parent {  position: relative;}.child {  position: absolute;  top: 50%;  left: 50%;  transform: translate(-50%, -50%);}

使用 flexbox

.parent {  display: flex;  justify-content: center;  align-items: center;}

转载地址:http://vjujl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Dockerfile构建简单的mysql
查看>>
nutch介绍和安装配置
查看>>
Linux下的tar压缩解压缩命令详解
查看>>
JDK环境变量配置
查看>>
AKKA入门
查看>>
如何使用KeyChain保存和获取UDID
查看>>
理解css中的长度单位
查看>>
折半算法的demo
查看>>
windows && linux 访问github
查看>>
【JavaScript】容器尺寸/偏移尺寸/滚动条距离
查看>>
commons-fileupload的使用
查看>>
518抽奖软件教程之:开盘选房摇号
查看>>
Perl模块list
查看>>
网规:第2章 计算机网络规划与设计-2.5逻辑网络设计
查看>>
[软件] 装机员Ghost Win10 RS1 1067 64位纯净贺岁版2017
查看>>
Ubuntu 16.04 安装搜狗拼音
查看>>
项目开发之产品环境
查看>>
通过Intel XDK编写跨平台app(二)
查看>>
cache和buffer介绍
查看>>