Flexbox实现元素的水平居中和垂直居中

网上有N种方法实现元素的水平居中和垂直居中,如CSS制作水平垂直居中对齐,这些方法各有各的优缺点。在这里,我们使用flexbox统一解决元素水平居中和垂直居中的问题。

水平居中

水平居中最为简单我们直接来看下代码

1.单个元素水平居中


CSS3 Flexbox轻松实现元素的水平居中和垂直居中

CSS代码

 .box {
            display: flex;
            justify-content: center;
            background: #0099cc
        }
h1{
   font-size:0.5rem;
}

HTML代码

<div class="box"><h1>flex弹性布局justify-content属性实现元素水平居中</h1></div>

在这段代码里我们只需要给h1标签的父元素添加两个属性就可以了,justify-content其作用就是 让class类为box的div盒子居中。盒子居中了,盒子里面的元素就自然居中了,他的好处就是不需要对需居中的元素(h1)设置任何样式,如果:width,margin。

2.多个h1元素水平居中


CSS3 Flexbox轻松实现元素的水平居中和垂直居中
HTML代码

<div class="box">
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
</div>

CSS代码

  .box {
        display: flex;
        justify-content: center;
        width: 100%;
        background: #0099cc
    }
    
    h1 {
        font-size: 0.5rem;
        padding: 1rem;
        border: 1px dashed #FFF;
        color: #FFF;
        font-weight: normal;
    }

代码还是相当的整洁的,在Flex布局中,作用对象是子元素与及父元素,所以在这里我们不妨把body当作一个正常的标签使用,虽然很少这样用,但是为了说明body标签也是很接地气的,所以本例中使用了body标签作为box的父元素。

现在我们来分析下代码,在Flex有两个东西,一个是Flex容器(子项目父元素),另一个是子项目(Flex容器子元素)。如果不给.box添加样式, 一个h1标签占一行,也就是页面会显示三行文字“flex弹性布局justify-content属性实现元素水平居中”。如果我们给.box添加了 display: flex;那么三个h1标签就妥妥地在一行里排列了,相当于浮动,只不过他不会因为超出了.box的宽度而换行,他总是会在一行内显示。

元素垂直居中

元素垂直居中在前端开发中还是比较麻烦的,但是用了Flex布局后一切就化繁为简!我们还是来看看例子吧!
1.单个h1标签垂直居中


HTML代码

<div class="box"> 
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
</div>

CSS代码

    .box {
        display: flex;
        width: 200px;
        height: 2rem;
        align-items: center;
        background: #0099cc
    }
    h1 {
        font-size: 0.5rem;
        padding: 1rem;
        border: 1px dashed #FFF;
        color: #FFF
    } 

为了让大家看得清楚,定义了.box的高,蓝色背景;给h1元素添加一个边框。这样,h1元素就乖乖地居中了,不用给h1设置高度,无需绝对定位,没错就这么简单粗暴。

2.多个h1标签并排垂直居中


HTML代码

<div class="box">
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
    <h1>flex弹性布局justify-content属性实现元素水平居中</h1>
</div>

CSS代码

.box {
    display: flex;
    width: 200px;
    height: 2rem;
    align-items: center;
    background: #0099cc
}

h1 {
    font-size: 0.5rem;
    padding: 1rem;
    border: 1px dashed #FFF;
    color: #FFF
}

上面这个例子除了上HTML代码多了两个h1标签,样式都没变化。有了Flex垂直居中,元素、图片、文字居中问题瞬间化为泡影。

注意:div,h1标签只是举例而已,Flex属性也适用于其它标签HTML标签。
如果想父元素水平居中,你只需要给body标签一个属性就OK了。代码如下:
body{ display: flex; justify-content: center;}

3.多行h1标签垂直居中
HTML代码

<div class="box">
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
</div>

CSS代码

.box {
    display: flex;
    width: 200px;
    height: 5rem;
    justify-content: center;
    background: #0099cc;
    flex-direction: column
}

h1 {
    display: flex;
    justify-content: center;
    font-size: 0.5rem;
    padding: 1rem;
    border: 1px dashed #FFF;
    color: #FFF
}

由于弹性容器.box添加了 display:flex; 属性,子项目默认是水平排列的,所以给.box追加一个 flex-direction:column 属性来让子项目垂直排列。此时垂直方向作为主轴,所以我们可以使用一个 justify-content:center 来让所有子项目在垂直方向上居中。为了让h1标签内的文字也水平居中,我们也给了h1一个dislay:flex;以及 justify-content:center,由于h1是默认的水平排列,所以 justify-content:center 就可以让文字在水平方向上居中。

在这里我们只需要注意 justify-content:center 的用法就可以了,它的作用就是定义Flex项目在主轴方向上的对齐方。你也可以在这篇文章《CSS3 Flex 弹性布局用法详解》了解更多。

一个完整的例子

最后我们来一个完整的例子,同时包含水平,垂直居中,我们还是老规矩,来看看例子



HTML代码

<div class="box">
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
    <h1>flex弹性布局justify-content属性实现元素垂直居中</h1>
</div>

CSS代码

body {
    display: flex;
    justify-content: center
}
.box {
    display: flex;
    width: 200px;
    height: 6rem;
    justify-content: center;
    background: #0099cc;
    flex-direction: column;
    align-items: center;
}

h1 {
    display: flex;
    justify-content: center;
    font-size: 0.5rem;
    padding: 1rem;
    border: 1px dashed #FFF;
    color: #FFF;
    width: 28rem
}

代码分析:为了让h1里的文字居中,我们给h1添加了 display:flex; 以及 justify-content:center,同样的为了让h1在.box里垂直居中,我们给.box也加上 display:flex; 以及 justify-content:center 属性。而.box里的align-items:center就 是让h1水平居中的。这个属性的作用是:定义项目在交叉轴上的对齐方式。由于我们使用了 flex-direction:column; 所以垂直方向作为主轴,交叉轴自然就是水平方向了。为让让.box也水平居中,我们同时也定义了body{display:flex;justify- content:center}

解决图片文字居中

由于个人初做前端,经常遇到这个问题,故在此写下解决方法:
效果图:

Css代码:

.box {
    display: flex;
    justify-content: center;
    align-items: center;
    background: #0099cc;
    width: 100px;
    height: 1rem;
    font-size: 10px;
}
.box img {
    width: 10px;
    height: 10px;
    padding-right: 5px;
}

Html代码:

<div class="box">
    ![](static/images/1.png)
    hello
</div>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,389评论 0 26
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 8,154评论 3 30
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,452评论 0 6
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 阅读目录移动开发基本知识点 calc基本用法box-sizing的理解及使用理解display:box的布局理解f...
    张宪宇阅读 1,510评论 0 1